明可夫基斯差以及其原点的最近距离
如果两个物体重叠或相交,它们的明可夫斯基差肯定包括原点。
经典的GJK算法就是用这个来执行碰撞检测的判断
下面我会分成三部【明可夫斯基和,明可夫斯基差,明可夫基斯差到原点的最近距离】来一步一步剖析
明可夫斯基和
明可夫斯基和是两个欧几里得空间的点集的和。点集A与B的明可夫斯基和就是。
用公式表示: A + B = { a + b | a∈A ,b∈B}
例如,图1平面上有两个多边形,其坐标分别为
A = {(4, 11), (4, 5), (9, 9)}及B = {(5, 7), (12, 7), (7, 3),(10,2)}
则其明可夫斯基和为A + B = {(4, 11), (4, 5), (9, 9),(5, 7), (12, 7), (7, 3),(10,2)}。
明可夫斯基差
对于减法,明可夫基斯和的概念也成立,这是可称为明可夫斯基差
用公式表示:A - B = A + (-B) ={ a + (-b) | a∈A ,b∈B}={ a - b | a∈A ,b∈B}
由图1可得图2
明可夫斯基差为
A - B = {
(4-5, 11-7), (4-5, 5-7), (9-5, 9-7),
(4-12, 11-7), (4-12, 5-7), (9-12, 9-7),
(4-7, 11-3), (4-7, 5-3), (9-7, 9-3),
(4-10, 11-2), (4-10, 5-2), (9-10, 9-2)
}
={
(-1,4),(-1,-2),(4,2),
(-8,4),(-8,-2),(-3,2),
(-3,8),(-3,2),(2,6),
(-6,9),(-6,3),(-1,7)
}。
明可夫基斯差到原点的最近距离
ok通过前面的内容你应该已经很清晰透彻的了解明可夫斯基差和和的概念了,那么如何求到原点最近的距离呢?
由于上面的图是物体相互碰撞的的情况,不是很方便说明,我换一个不碰撞的新图来解释一下。
如图三所示
首先我们能清楚的看到最近的边其实是A(-4,-1)和 B(1,3)所连的直线。
那么我们可以把问题转换为点到直线的距离 【求OC向量】
由数学几何向量的性质很容易就能知道在三角形OAC里 OC = OA + AC
那向量OC的模就是点到直线的长度了
而OA已知是(-4,-1)
接下来就是求AC:
我们很容易就能看出,AC其实就是AO到AB的投影
则AC向量的推导过程如图【没有笔鼠标画的有点丑见谅】
则AC=AB*(doc(AO,AB)/doc(AB,AB))
AB=(1,3)-(-4,-1)=(5,4)
AO=(0,0)-(-4,-1)=(4,1)
doc(AO,AB)=54+41=24
doc(AB,AB)=55+44=41
AC=(24/41)*AB=(120/41,96/41)
则OC=OA+AC=(-4,-1)+(120/41,96/41)=(-44/41,55/41)≈(-1,1.3)
模OC≈1.64