+ All Categories
Transcript
Page 1: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

2.4. PRIMITIVE TESTS - CLOSEST POINT

Closest point forms of intersection detection

Page 2: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point forms of intersection detection

Finding the closest point between two objects provides a number of benefits. If positive, the objects are separated, if negative, the objects are interpenetrating (and knowledge of the closest point can be used to provide contact information).

Two different approaches can be used to find the minimum point:

Keeping a record of the

closest points between

two objects can often

be incrementally

maintained at a low

cost (object coherency),

providing fast collision

testing.

• Formulate the test as a minimisation problem and solve it using calculus.

• Use the geometric properties of the objects to geometrically derive the closest point (considered here).

Page 3: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Forms of closest point test

Consult the recommended course text for details of the following tests:

•Closest Point on Plane to Point•Closest Point on Line Segment to Point•Closest Point on AABB to Point•Closest Point on OBB to Point•Closest Point on Triangle to Point•Closest Point on Convex Polyhedron to Point•Closest Points of Two Lines•Closest Points of Two Line Segments•Closest Points of a Line Segment and a Triangle•Closest Points of Two Triangles

Two illustrative forms of closest point test are explored next.

Page 4: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

POINT TO OBBClosest point between an OBB and a Point

Page 5: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on an OBB to a Point

Consider an OBB with centre point C, orthogonal unit vectors (u0, u1, u2)

and half-width distances (e0, e1, e2)

and a point P.

Page 6: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on an OBB to a Point

The closest point on/in the OBB to P can be determined by:

1.Transforming the point P into the local coordinate system of the OBB,

2.Computing the point on the OBB (now effectively an AABB) closest to the transformed point.

3.Transforming the resulting point back into world coordinates

Page 7: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on an OBB to a Point

1.Transform P into the OBB coordinate system:

The transformed point Q is found from:

i.e. the distance vector of the point from the centre of the OBB as projected onto each defined OBB axisQx = (P – C)● uo Qy = (P – C)● u1

Qz = (P – C)● u2

C●

P●

P-C

(P-C)● uo

u0

Page 8: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on an OBB to a Point

2. Computing OBB point closest to the transformed point.

If the transformed point u0, u1, u2 distances are

respectively longer than e0, e1, e2 then clamp to

half-width extents

3. Transform the point back into world coordinates

Qi = (P–C)● ui if(Qi>ei) Qi=ei

if(Qi<-ei) Qi=-eiC

P●

u0u1

Qe1

e2

Qi = C + Qiui

Page 9: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on an OBB to a PointExpressed as code:

ClosestPointToOBB(Point point, OBB box, out Point closestPt){Vector distance = point- box.centre;closestPt = box.centre;

for (int i = 0; i < 3; i++) {float length = Dot(distance, box.axis[i]);

if (length > box.extent[i]) length = box.extent[i];if (length < -box.extent[i]) length = -box.extent[i];

closestPt += length * box.axis[i]; }}

Initially set closest point as box centre

Iterate over box axis Determine projection along axis

Clamp if needed

Build world location component by moving determine distance along OBB axis

Page 10: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on an OBB to a Point

The separation (actual or squared) can then be determined simply as:

float distance = (closestPt – point).length()

Somewhat obviously, if all components of the closest OBB point (expressed in OBB space) are less than the half-width extents, then the point is within the OBB.

Page 11: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

POINT TO TRIANGLEClosest point between a Triangle and a Point

Page 12: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on a triangle to a point

Given a triangle defined by points ABC and a point P, assume Q defines the point of ABC closest to P.

An efficient means of computing Q is:

1.Determine which triangle Voronoi region P is within (i.e. find which feature P is closest to).

2.Orthogonally project P onto the determined closest feature.

A

B

C

A

Voronoi region of

vertex A

Voronoi region of edge CB

Page 13: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on a triangle to a point

Intersection with the Voronoi region for vertex A, B and C can be determined as the intersection of the negative half-space of the two planes through that point, e.g. for A each plane passes through A, one with a normal (B-A) and the other with normal (C-A).

A

A

Voronoi region of vertex A

C

B

Page 14: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on a triangle to a point

The Voronoi region of each triangle edge can be efficiently computed by determining the triangle barycentric coordinates of P.

Assuming n is the normal of triangle ABC and R is the projection of P onto the triangle’s plane, i.e. R = P – tn some for t, the barycentric coordinates of R (R = uA + vB + wC) are given by:

B

C

A

Voronoi region of edge CB

n = (B-A)×(C-A)rab = n ● ((A-P)×(B-P))rbc = n ● ((B-P)×(C-P))rca = n ● ((C-P)×(A-P))abc = rab + rbc + rcau = rbc/abc, v = rca/abc, w = rab/abc

Aside: the

barycentric

coordinates of R

are given as the

ratios of the signed

areas of triangles

RAB, RBC, and RCA

to the signed area

of ABC

Page 15: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on a triangle to a point

To determine if P is within a triangle edge Voronoi region the following conditions must hold:

Aside: It is not sufficient

just to test if P is outside

AB, in that for a triangle

with an obtuse angle at

A, P could be outside

AB and actually be

located in the Voronoi

region of edge CA (see

figure).

B

C

A

B(X-A)●(B-A) > 0

(X-B)●(A-B) > 0

1.Calculated area of the barycentric region must be <= 0 (i.e. for AB, rab <= 0)

2.The point must be within the positive half-spaces of the planes (assuming an edge AB): (X-A)●(B-A) = 0 and (X-B)●(A-B) = 0

Page 16: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on a Triangle to a Point

ClosestPointToTriangle( Point a, Point b, Point c, Point p, out Point q{

Vector ab = b – a, ac = c – a, bc = c - b;

float snom = Dot(p - a, ab), sdenom = Dot(p - b, a - b);float tnom = Dot(p - a, ac), tdenom = Dot(p - c, a - c);if (snom <= 0.0f && tnom <= 0.0f) return a;

float unom = Dot(p - b, bc), udenom = Dot(p - c, b - c);if (sdenom <= 0.0f && unom <= 0.0f) return b; if (tdenom <= 0.0f && udenom <= 0.0f) return c;

Points ABC defined the triangle, point P is the source point, point Q is the closest triangle point to P

Vertex Voronoi region hit early out

Build edge vectors

Determine the parametric position s for the projection of P onto AB (i.e. P’ = A+s*AB, where s = snom/ (snom+sdenom), and then parametric position t for P projected onto AC

Aside: the

projection of P onto

AB from point A is:

(P-A)●(B-A) and from P

onto BA is: (P-B)●(A-

B). Added together

they sum to the

length of AB

Parametric position u for P projected onto BC

Page 17: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Closest point on a Triangle to a Point

Vector n = Cross(b - a, c - a);float vc = Dot(n, Cross(a - p, b - p));

if (vc <= 0.0f && snom >= 0.0f && sdenom >= 0.0f)return a + snom / (snom + sdenom) * ab;

float va = Dot(n, Cross(b - p, c - p));if (va <= 0.0f && unom >= 0.0f && udenom >= 0.0f)return b + unom / (unom + udenom) * bc;

float vb = Dot(n, Cross(c - p, a - p));if (vb <= 0.0f && tnom >= 0.0f && tdenom >= 0.0f)return a + tnom / (tnom + tdenom) * ac;

float u = va / (va + vb + vc);float v = vb / (va + vb + vc);float w = 1.0f - u - v; // = vc / (va + vb + vc)return u * a + v * b + w * c;

}

Determine if P is outside (or on) edge AB by finding the area formed by vectors PA, PB and the triangle normal. A scalar triple product is used.

If P is outside of AB (signed area <= 0) and within Voronoi feature region, then return projection of P onto AB

Repeat the same test for P onto BC

Repeat the same test for P onto CA

P must project onto inside face. Find closest point using the barycentric coordinates

Aside: The Lagrange

identity (a × b) · (c × d) = (a ·

c)(b · d) − (a · d)(b · c) can be

used to express the

three scalar triple

products in a manner

that can be calculated

more quickly.

Page 18: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

DIRECTED READINGDirected mathematical reading

Directed

reading

Page 19: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Directed reading Directed

reading• Read Chapter 5 (pp125-155) of Real Time Collision Detection

• Related papers can be found from:

http://realtimecollisiondetection.net/books/rtcd/references/

Page 20: 2.4. P RIMITIVE T ESTS - C LOSEST POINT Closest point forms of intersection detection.

Summary

To do:Read the directed

material

After reading the

directed material, have

a ponder if this is the

type of material you

would like to explore

within a project.

Today we explored:

Notion of closest point forms of intersection testing.

Closest point to an OBB or triangle


Top Related