您的位置:首页 > 其它

凸多边形碰撞检测算法——分离坐标轴方法

2014-07-14 21:07 1011 查看
直观来看,如果两个凸多面体不相交,那么必定存在一个空间平面,使得这两个多面体分别位于平面两侧。如果找不到这样的平面,那么可以判定其相交。这个情况等价于:如果能找到垂直于某个平面的直线,使得多面体在这条直线上的投影不相交,那么就可以判定多面体不相交;否则就相交。这条直线,就是分离轴。一般而言,检验多面体在直线上的投影,会比检验多面体是否位于平面两侧更加方便。

SAT是一种检测凸多边形相交的算法,他的内容是,如果能找到一条轴,使得两个物体在该轴上的投影互不重叠,那么这两个物体就是不相交的。

原理很容易理解,这个算法的关键在于,如何找到这条轴。 在2D的情况下,两个多边形每条边的法向量包含了这条轴的所有可能性。所以我们只需要枚举两个多边形的每条边的法向量即可。

2D向量的法向量非常好求 向量(X,Y)的法向量为(Y,-X)或(-Y,X)(设待求斜率为k,根据垂直的向量斜率之积等于-1,Y/X*k= - 1 => k= - X/Y),这个算法不需要考虑方向,所以任选一种即可。然后分别计算这两个多边形的所有点在此向量上的投影,并求出最大最小区域,如果没有重合,那么直接确定这两个多边形不重合,如果有重叠,那么继续判断下一条边的法向量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: