基本概念
闵可夫斯基差(Minkowski difference)
凸体
和
两个物体相交,当且仅当其闵可夫斯基差包含原点。
单纯形(simplex)
这里相当于在闵可夫斯基差内迭代形成一个多面体,且尽可能地使其包含原点。若其包含原点,则闵可夫斯基差包含原点,物体相交。
支持函数(support function)
即物体在方向
上最远的点
有定理
算法
function GJK_intersection(shape p, shape q, vector initial_axis):
vector A := Support(p, initial_axis) − Support(q, −initial_axis)
simplex s := {A}
vector D := −A
loop:
A := Support(p, D) − Support(q, −D)
if dot(A, D) < 0:
reject
s := s ∪ A
s, D, contains_origin := SimplexOrigin(s)
if contains_origin:
accept
复制代码
原点判定
线段
前面由
判定过,所以原点不可能在
和
区域。那么若