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

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

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


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

        2D向量的法向量非常好求 向量(X,Y)的法向量为(Y,-X)或(-Y,X)(设待求斜率为k,根据垂直的向量斜率之积等于-1,Y/X*k= - 1  =>  k=  - X/Y),这个算法不需要考虑方向,所以任选一种即可。然后分别计算这两个多边形的所有点在此向量上的投影,并求出最大最小区域,如果没有重合,那么直接确定这两个多边形不重合,如果有重叠,那么继续判断下一条边的法向量。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值