Gdc10 Catto Erin Gjk
Transcript of Gdc10 Catto Erin Gjk
![Page 1: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/1.jpg)
Computing Distance
Erin Catto
Blizzard Entertainment
![Page 2: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/2.jpg)
Convex polygons
![Page 3: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/3.jpg)
Closest points
![Page 4: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/4.jpg)
Overlap
![Page 5: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/5.jpg)
Goal
Compute the distance between convex polygons
![Page 6: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/6.jpg)
Keep in mind
2D
Code not optimized
![Page 7: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/7.jpg)
Approach
simple complex
![Page 8: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/8.jpg)
Geometry
![Page 9: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/9.jpg)
If all else fails …
![Page 10: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/10.jpg)
DEMO!
![Page 11: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/11.jpg)
Outline
1. Point to line segment
2. Point to triangle
3. Point to convex polygon
4. Convex polygon to convex polygon
![Page 12: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/12.jpg)
Concepts
1. Voronoi regions
2. Barycentric coordinates
3. GJK distance algorithm
4. Minkowski difference
![Page 13: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/13.jpg)
Point to Line SegmentSection 1
![Page 14: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/14.jpg)
A line segment
A B
![Page 15: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/15.jpg)
Query point
Q
A B
![Page 16: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/16.jpg)
Closest point
Q
PA B
![Page 17: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/17.jpg)
Projection: region A
Q
A B
![Page 18: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/18.jpg)
Projection: region AB
Q
A B
![Page 19: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/19.jpg)
Projection: region B
Q
A B
![Page 20: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/20.jpg)
Voronoi regions
A B
region A region AB region B
![Page 21: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/21.jpg)
Barycentric coordinates
G(u,v)=uA+vB
u+v=1
A G B
![Page 22: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/22.jpg)
Fractional lengths
G(u,v)=uA+vB
u+v=1
A G B
u=0.5v=0.5
![Page 23: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/23.jpg)
Fractional lengths
G(u,v)=uA+vB
u+v=1
A G B
u=0.75v=0.25
![Page 24: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/24.jpg)
Fractional lengths
G(u,v)=uA+vB
u+v=1
AG B
u=1.25
v=-0.25
![Page 25: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/25.jpg)
Unit vector
A B
B-A=
B-An
n
![Page 26: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/26.jpg)
(u,v) from G
A G Buv
B-G nu=
B-A
G-A nv=
B-A
![Page 27: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/27.jpg)
(u,v) from Q
B-Q nu=
B-A
A G Buv
Q-A nv=
B-A
Q
![Page 28: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/28.jpg)
Voronoi region from (u,v)
A G B
u > 0 and v > 0 region AB
u > 0v > 0
![Page 29: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/29.jpg)
Voronoi region from (u,v)
AG B
v <= 0 region A
u > 0
v < 0
![Page 30: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/30.jpg)
Voronoi region from (u,v)
A GB
u <= 0 region B
u < 0
v > 0
![Page 31: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/31.jpg)
Closet point algorithm
input: A, B, Q
compute u and v
if (u <= 0)
P = B
else if (v <= 0)
P = A
else
P = u*A + v*B
![Page 32: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/32.jpg)
Point to TriangleSection 2
![Page 33: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/33.jpg)
Triangle
A
B
C
![Page 34: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/34.jpg)
Closest feature: vertex
A
P=B
C
Q
![Page 35: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/35.jpg)
Closest feature: edge
A
C
Q
B
P
![Page 36: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/36.jpg)
Closest feature: interior
A
C
B
P=Q
![Page 37: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/37.jpg)
Voronoi regions
A
B
C
Region AB
Region CA
Region BC
Region ABC
Region A
Region B
Region C
![Page 38: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/38.jpg)
3 line segments
A
B
C
AB ABu ,v
CA CAu ,v
BC BCu ,v
Q
![Page 39: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/39.jpg)
Vertex regions
A
B
C
AB
BC
u 0
v 0
CA
AB
u 0
v 0
BC
CA
u 0
v 0
Using line segment uv’s
![Page 40: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/40.jpg)
Edge regions
A
B
C
AB
AB
u 0
v 0
?
Line segment uv’s are not sufficient
![Page 41: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/41.jpg)
Interior region
A
B
C
?
Line segment uv’s don’t help at all
![Page 42: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/42.jpg)
Triangle barycentric coordinates
Q uA vB wC
1wvu
A
C
B
Q
![Page 43: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/43.jpg)
Linear algebra solution
x x x x
y y y y
A B C u Q
A B C v = Q
1 1 1 w 1
![Page 44: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/44.jpg)
Fractional areas
A
B
CC
Q
![Page 45: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/45.jpg)
The barycenctric coordinates are the fractional areas
B
A
C
Q
w
u Area(BCQ)
C
v
u
v Area(CAQ)
w Area(ABQ)
![Page 46: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/46.jpg)
Barycentric coordinates
CC
A
B
w 0
v 0
u 1Q
![Page 47: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/47.jpg)
Barycentric coordinates
area(QBC)u
area(ABC)
area(QCA)v
area(ABC)
area(QAB)w
area(ABC)
![Page 48: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/48.jpg)
Barycentric coordinates are fractional
line segment : fractional length
triangles : fractional area
tetrahedrons : fractional volume
![Page 49: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/49.jpg)
Computing Area
A
C
B
1
signed area= cross B-A,C-A2
![Page 50: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/50.jpg)
Q outside the triangle
C
Q
C
A
B
![Page 51: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/51.jpg)
Q outside the triangle
C
0v
0w
v+w>1
C
A
B
Q
![Page 52: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/52.jpg)
Q outside the triangle
C
0u
C
A
B
Q
![Page 53: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/53.jpg)
Voronoi versus Barycentric
Voronoi regions != barycentric coordinate regions
The barycentric regions are still useful
![Page 54: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/54.jpg)
Barycentric regions of a triangle
A
B
C
![Page 55: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/55.jpg)
Interior
A
B
C 0w0,v0,u
Q
![Page 56: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/56.jpg)
Negative u
A
B
C
0u
Q
![Page 57: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/57.jpg)
Negative v
A
B
C 0v
Q
![Page 58: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/58.jpg)
Negative w
A
B
C
0w
Q
![Page 59: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/59.jpg)
The uv regions are not exclusive
A
B
C
Q
P
![Page 60: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/60.jpg)
Finding the Voronoi region
Use the barycentric coordinates to identify the Voronoi region
Coordinates for the 3 line segments and the triangle
Regions must be considered in the correct order
![Page 61: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/61.jpg)
First: vertex regions
A
B
C
AB
BC
u 0
v 0
AB
CA
v 0
u 0
BC
CA
u 0
v 0
![Page 62: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/62.jpg)
Second: edge regions
A
B
C
AB
AB
u 0
v 0
?
![Page 63: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/63.jpg)
Second: edge regions solved
A
B
C
AB
AB
ABC
u 0
v 0
w 0
![Page 64: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/64.jpg)
Third: interior region
A
B
C
ABC
ABC
ABC
u > 0
v > 0
w > 0
![Page 65: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/65.jpg)
Closest point
Find the Voronoi region for point Q
Use the barycentric coordinates to compute the closest point Q
![Page 66: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/66.jpg)
Example 1
A
B
C
Q
![Page 67: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/67.jpg)
Example 1
A
B
C
uAB <= 0
Q
![Page 68: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/68.jpg)
Example 1
A
B
C
uAB <= 0 and vBC <= 0
Q
![Page 69: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/69.jpg)
Example 1
A
P=B
C Conclusion:P = B
Q
![Page 70: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/70.jpg)
Example 2
A
B
C
Q
![Page 71: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/71.jpg)
Example 2
A
B
C
Q is not in any vertex region
Q
![Page 72: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/72.jpg)
Example 2
A
B
C
uAB > 0
Q
![Page 73: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/73.jpg)
Example 2
A
B
CuAB > 0 and vAB > 0
Q
![Page 74: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/74.jpg)
Example 2
A
B
CuAB > 0 and vAB > 0and wABC <= 0
Q
![Page 75: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/75.jpg)
Example 2
A
B
C
Conclusion:P = uAB*A + vAB*B
P
Q
![Page 76: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/76.jpg)
Implementation
input: A, B, C, Q
compute uAB, vAB, uBC, vBC, uCA, vCA
compute uABC, vABC, wABC
// Test vertex regions
…
// Test edge regions
…
// Else interior region
…
![Page 77: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/77.jpg)
Testing the vertex regions
// Region A
if (vAB <= 0 && uCA <= 0)
P = A
return
// Similar tests for Region B and C
![Page 78: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/78.jpg)
Testing the edge regions
// Region AB
if (uAB > 0 && vAB > 0 && wABC <= 0)
P = uAB * A + vAB * B
return
// Similar for Regions BC and CA
![Page 79: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/79.jpg)
Testing the interior region
// Region ABC
assert(uABC > 0 && vABC > 0 && wABC > 0)
P = Q
return
![Page 80: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/80.jpg)
Point to Convex PolygonSection 3
![Page 81: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/81.jpg)
Convex polygon
A
B
C
DE
![Page 82: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/82.jpg)
Polygon structure
struct Polygon{Vec2* points;int count;
};
![Page 83: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/83.jpg)
Convex polygon: closest point
Q
A
B
C
DE
Query point Q
![Page 84: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/84.jpg)
Convex polygon: closest point
P
Closest point Q
A
B
C
DE
Q
![Page 85: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/85.jpg)
How do we compute P?
![Page 86: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/86.jpg)
What do we know?
Closest point to point
Closest point to line segment
Closest point to triangle
![Page 87: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/87.jpg)
Simplex
0-simplex 1-simplex 2-simplex
![Page 88: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/88.jpg)
Idea: inscribe a simplex
A
B
C
DE
Q
![Page 89: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/89.jpg)
Idea: closest point on simplex
A
B
P = C
DE
Q
![Page 90: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/90.jpg)
Idea: evolve the simplex
A
B
C
DE
Q
![Page 91: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/91.jpg)
Simplex vertex
struct SimplexVertex{
Vec2 point;int index;float u;
};
![Page 92: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/92.jpg)
Simplex
struct Simplex{SimplexVertex vertexA;SimplexVertex vertexB;SimplexVertex vertexC;int count;
};
![Page 93: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/93.jpg)
We are onto a winner!
![Page 94: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/94.jpg)
The GJK distance algorithm
Computes the closest point on a convex polygon
Invented by Gilbert, Johnson, and Keerthi
![Page 95: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/95.jpg)
The GJK distance algorithm
Inscribed simplexes
Simplex evolution
![Page 96: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/96.jpg)
Starting simplex
Start with arbitraryvertex. Pick E.
This is our startingsimplex.
A
B
C
DE
Q
![Page 97: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/97.jpg)
Closest point on simplex
P is the closest point.
A
B
C
D
Q
P=E
![Page 98: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/98.jpg)
Search vector
Draw a vectorfrom P to Q.
Call this vector d.
d
A
B
C
DP=E
Q
![Page 99: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/99.jpg)
Find the support point
Find the vertex on polygon furthest in direction d.
This is the supportpoint.d
A
B
C
D
Q
P=E
![Page 100: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/100.jpg)
Support point code
int Support(const Polygon& poly, const Vec2& d){int index = 0;float maxValue = Dot(d, poly.points[index]);for (int i = 1; i < poly.count; ++i){float value = Dot(d, poly.points[i]);if (value > maxValue){index = i;maxValue = value;
}}return index;
}
![Page 101: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/101.jpg)
Support point found
C is the supportpoint.
d
A
B
C
DE
Q
![Page 102: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/102.jpg)
Evolve the simplex
Create a line segment CE.
We now have a1-simplex.
A
B
C
DE
Q
![Page 103: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/103.jpg)
Repeat the process
Find closest pointP on CE.
A
B
C
DE
P
Q
![Page 104: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/104.jpg)
New search direction
Build d as a line pointing from P to Q.
A
B
C
DE
d P
Q
![Page 105: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/105.jpg)
New support point
D is the support point.
A
B
C
DE
d
Q
![Page 106: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/106.jpg)
Evolve the simplex
Create triangle CDE.
This is a2-simplex.A
B
C
DE
Q
![Page 107: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/107.jpg)
Closest point
Compute closest point on CDE to Q.
A
B
C
DE
P
Q
![Page 108: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/108.jpg)
E is worthless
Closest point is on CD.
E does not contribute.
A
B
C
DE
P
Q
![Page 109: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/109.jpg)
Reduced simplex
We dropped E,so we now havea 1-simplex.
A
B
C
DE
P
Q
![Page 110: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/110.jpg)
Termination
Compute support point in direction d.
We find either C or D. Since this is a repeat, we are done.
Q
A
B
C
DE
P
d
![Page 111: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/111.jpg)
GJK algorithm
Input: polygon and point Q
pick arbitrary initial simplex S
loop
compute closest point P on S
cull non-contributing vertices from S
build vector d pointing from P to Q
compute support point in direction d
add support point to S
end
![Page 112: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/112.jpg)
DEMO!!!
![Page 113: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/113.jpg)
Numerical Issues
Search direction
Termination
Poorly formed polygons
![Page 114: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/114.jpg)
A bad direction
Q
A
B
C
DE
P
d can be built from PQ.
Due to round-off:
dot(Q-P, C-E) != 0
d
![Page 115: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/115.jpg)
A real example in single precision
Line Segment
A = [0.021119118, 79.584320]
B = [0.020964622, -31.515678]
Query Point
Q = [0.0 0.0]
Barycentric Coordinates
(u, v) = (0.28366947, 0.71633047)
Search Direction
d = Q – P = [-0.021008447, 0.0]
dot(d, B – A) = 3.2457051e-006
![Page 116: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/116.jpg)
Small errors matter
numerical directionexact direction
correctsupport
wrongsupport
![Page 117: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/117.jpg)
An accurate search direction
A
B
C
DE
d
Directly compute a vector perpendicular toCE.
d = cross(C-E,z)
Where z is normalto the plane.
Q
![Page 118: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/118.jpg)
The dot product is exactly zero
x y
-y x
-xy+yx=0
e
d
e d
edge direction:
search direction:
dot product:
![Page 119: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/119.jpg)
Fixing the sign
A
B
C
DE
d
Flip the sign of d so that:
dot(d, Q – C) > 0
Perk: no dividesQ
![Page 120: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/120.jpg)
Termination conditions
}
![Page 121: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/121.jpg)
Case 1: repeated support point
A
B
C
DE
d
P
Q
![Page 122: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/122.jpg)
Case 2: containment
We find a 2-simplex and all vertices contribute.
A
B
C
DE
P=Q
![Page 123: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/123.jpg)
Case 3a: vertex overlap
We will computed=Q-P as zero.
So we terminate ifd=0.
A
B
C
EP=Q=D
![Page 124: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/124.jpg)
Case 3b: edge overlap
d will have an arbitrary sign.
A
B
E
P=Q
C
D
d
![Page 125: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/125.jpg)
Case 3b: d points left
If we search left, we get a duplicate support point.In this case we terminate.
A
B
E
P=Q
C
D
d
![Page 126: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/126.jpg)
Case 3b: d points right
If we search right, we get a new support point (A).
A
B
E
C
D
d
Q=P
![Page 127: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/127.jpg)
Case 3b: d points right
But then we get back the same P, and then the same d.
Soon, we detect a repeated support point or detect containment.
A
B
E
C
D
d
P=Q
![Page 128: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/128.jpg)
Case 4: interior edge
d will have an arbitrary sign.
A
B
E
P=Q
C
D
d
![Page 129: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/129.jpg)
Case 4: interior edge
Similar to Case 3b
A
B
E
P=Q
C
D
d
![Page 130: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/130.jpg)
Termination in 3D
May require new/different conditions
Check for distance progression
![Page 131: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/131.jpg)
Non-convex polygon
Vertex B is non-convex
A
E
C
D
B
![Page 132: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/132.jpg)
Non-convex polygon
B is never a support point
AB
E
C
D
![Page 133: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/133.jpg)
Collinear vertices
B, C, and D are collinear
A
E
B
D
C
![Page 134: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/134.jpg)
Collinear vertices
2-simplex BCD
A
E
B
D
CQ
![Page 135: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/135.jpg)
Collinear vertices
area(BCD) = 0
A
E
B
D
CQ
![Page 136: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/136.jpg)
Convex Polygon to Convex PolygonSection 4
![Page 137: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/137.jpg)
X Y
Closest point between convex polygons
![Page 138: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/138.jpg)
What do we know?
GJK
![Page 139: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/139.jpg)
What do we need to know?
???
![Page 140: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/140.jpg)
Idea
Convert polygon to polygon into point to polygon
Use GJK to solve point to polygon
![Page 141: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/141.jpg)
Minkowski difference
YX Y-X Z
![Page 142: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/142.jpg)
Minkowski difference definition
j i i jZ = y - x : x X, y Y
![Page 143: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/143.jpg)
Building the Minkowski difference
Input: polygon X and Y
array points
for all xi in X
for all yj in Y
points.push_back(yj – xi)
end
end
polygon Z = ConvexHull(points)
![Page 144: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/144.jpg)
Example point cloud
YX Y-X
Compute Yi – Xj for i = 1 to 4 and j = 1 to 3
![Page 145: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/145.jpg)
Building the convex hull
Compute the convex hull by shrink wrapping the points.
![Page 146: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/146.jpg)
Building the convex hull
Compute the convex hull by shrink wrapping the points.
![Page 147: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/147.jpg)
Building the convex hull
Compute the convex hull by shrink wrapping the points.
![Page 148: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/148.jpg)
Building the convex hull
Compute the convex hull by shrink wrapping the points.
![Page 149: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/149.jpg)
Building the convex hull
Compute the convex hull by shrink wrapping the points.
![Page 150: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/150.jpg)
Building the convex hull
Compute the convex hull by shrink wrapping the points.
![Page 151: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/151.jpg)
Building the convex hull
Compute the convex hull by shrink wrapping the points.
![Page 152: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/152.jpg)
Building the convex hull
Compute the convex hull by shrink wrapping the points.
![Page 153: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/153.jpg)
Building the convex hull
Compute the convex hull by shrink wrapping the points.
![Page 154: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/154.jpg)
Z
The final polygon
![Page 155: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/155.jpg)
Z
Property 1: distances are equal
YX
distance(X,Y) == distance(O, Y-X)
O
![Page 156: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/156.jpg)
Property 2: support points
support(Z, d) = support(Y, d) – support(X, -d)
ZYX O
dd-d
![Page 157: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/157.jpg)
Convex Hull?
![Page 158: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/158.jpg)
Modifying GJK
Change the support function
Simplex vertices hold two indices
![Page 159: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/159.jpg)
Closest point on polygons
Use the barycentric coordinates to compute the closest points on X and Y
See the demo code for details
![Page 160: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/160.jpg)
DEMO!!!
Download: box2d.org
![Page 161: Gdc10 Catto Erin Gjk](https://reader035.fdocuments.us/reader035/viewer/2022081715/552039984979598e2f8b485b/html5/thumbnails/161.jpg)
Further reading
Collision Detection in Interactive 3D Environments, Gino van den Bergen, 2004
Real-Time Collision Detection, ChristerEricson, 2005
Implementing GJK: http://mollyrocket.com/849, Casey Muratori.