凸多边形碰撞检测算法——分离坐标轴方法
2014-07-14 21:07
1011 查看
直观来看,如果两个凸多面体不相交,那么必定存在一个空间平面,使得这两个多面体分别位于平面两侧。如果找不到这样的平面,那么可以判定其相交。这个情况等价于:如果能找到垂直于某个平面的直线,使得多面体在这条直线上的投影不相交,那么就可以判定多面体不相交;否则就相交。这条直线,就是分离轴。一般而言,检验多面体在直线上的投影,会比检验多面体是否位于平面两侧更加方便。
SAT是一种检测凸多边形相交的算法,他的内容是,如果能找到一条轴,使得两个物体在该轴上的投影互不重叠,那么这两个物体就是不相交的。
原理很容易理解,这个算法的关键在于,如何找到这条轴。 在2D的情况下,两个多边形每条边的法向量包含了这条轴的所有可能性。所以我们只需要枚举两个多边形的每条边的法向量即可。
2D向量的法向量非常好求 向量(X,Y)的法向量为(Y,-X)或(-Y,X)(设待求斜率为k,根据垂直的向量斜率之积等于-1,Y/X*k= - 1 => k= - X/Y),这个算法不需要考虑方向,所以任选一种即可。然后分别计算这两个多边形的所有点在此向量上的投影,并求出最大最小区域,如果没有重合,那么直接确定这两个多边形不重合,如果有重叠,那么继续判断下一条边的法向量。
SAT是一种检测凸多边形相交的算法,他的内容是,如果能找到一条轴,使得两个物体在该轴上的投影互不重叠,那么这两个物体就是不相交的。
原理很容易理解,这个算法的关键在于,如何找到这条轴。 在2D的情况下,两个多边形每条边的法向量包含了这条轴的所有可能性。所以我们只需要枚举两个多边形的每条边的法向量即可。
2D向量的法向量非常好求 向量(X,Y)的法向量为(Y,-X)或(-Y,X)(设待求斜率为k,根据垂直的向量斜率之积等于-1,Y/X*k= - 1 => k= - X/Y),这个算法不需要考虑方向,所以任选一种即可。然后分别计算这两个多边形的所有点在此向量上的投影,并求出最大最小区域,如果没有重合,那么直接确定这两个多边形不重合,如果有重叠,那么继续判断下一条边的法向量。
相关文章推荐
- 基于分离轴定理的二维游戏碰撞检测算法
- 碰撞检测之分离轴定理算法讲解
- [郑群 原创]我研究的地形碰撞检测方法
- 成功研究出多边形的碰撞检测算法
- 3D模型下的鼠标拣选和碰撞检测-射线与圆的相交算法
- 任意多边形的碰撞检测——向量积判断方法
- 游戏里实现碰撞检测方法
- J2ME中的基础碰撞检测算法
- 游戏里实现碰撞检测方法
- [Game] 游戏开发中的数学和物理算法:圆和球的碰撞检测
- [郑群 原创]我研究的地形碰撞检测方法
- 技术转载:游戏里实现碰撞检测方法
- J2ME中的基础碰撞检测算法
- 游戏里实现碰撞检测方法
- J2ME中的基础碰撞检测算法浅析
- 地形碰撞检测方法(转)
- 胶囊和凸多边形的动态碰撞检测
- 矩形检测碰撞算法
- J2ME中的基础碰撞检测算法浅析
- 检测DB WEB是否分离的方法