基于分离轴定理的碰撞检测算法
如图所示,如果两个图形在某条线上的投影重叠,那么这两个图形就相交(黄色部分表示重叠部分)。
读者可能立马想到下面的情况,投影相交但是图形不相交。
但是却一定至少存在一条线,使这两图形在这条线上的投影没有交集,如:
试比较这两种情况的区别。
如果两个图形不相交,必然至少存在一条线,使这两个图形在这条线上的投影没有交集。如果图形相交,那么这条线一定不存在。这就是算法的核心。要实现算法,枚举所有可能的线判断是否存在投影没有交集的情况。而在二维平面中,两个多边形的每条边的法向量包含了这条轴的所有可能性,所以我们只要枚举所有边的法向量即可。
计算一条边的法向量
如果多边形的一条边的向量是(x,y),这条边的法向量就是(-y,x)或(y,-x)。计算每条边在法向量(轴)上的投影,找出最大值和最小值
如果法向量的坐标是(x1,y1),边的坐标是(x2,y2),边在法向量上的投影dot计算方法如下
temp1=x2∗x