0.简介
前一篇对碰撞检测的准备工作做了阅读,这回我们看第一步,分离轴定理检测矩形是否相交。
1.分离轴定理
这里面简单对分离轴定理做一个说明,这个里面有详细说明分离轴定理详细说明
大概就是比如两个凸多边形,这两个多边形分别向每条边的垂直方向做投影,如果有一个方向上的投影不相交,则两个多边形不相交,反之则相交。
具体就看上面的链接吧。
2.代码阅读
int Collide(Contact* contacts, Body* bodyA, Body* bodyB)
{
...
//C是一个从B坐标系变换到A坐标系的一个矩阵
Mat22 C = RotAT * RotB;
//经过Abs处理,Abs实际就是将矩阵中每个元素都进行求绝对值
//最后absC中全部都是大于等于0的数字
Mat22 absC = Abs(C);
//这里将absC矩阵转置得到逆矩阵
Mat22 absCT = absC.Transpose();
//1.分离轴计算碰撞
// Box A faces
Vec2 faceA = Abs(dA) - hA - absC * hB;
if (faceA.x > 0.0f || faceA.y > 0.0f)
return 0;
// Box B faces
Vec2 faceB = Abs(dB) - absCT * hA - hB;
if (faceB.x > 0.0f || faceB.y > 0.0f)
return 0;
...
}
上面这段代码,其中,这里就是计算出一个矩阵C,求其绝对值和其逆。
//C是一个从B坐标系变换到A坐标系的一个矩阵
Mat22 C = RotAT * RotB;
//经过Abs处理,Abs实际就是将矩阵中每个元素都进行求绝对值
//最后absC中全部都是大于等于0的数字
Mat22 absC = Abs(C);
//这里将absC矩阵转置得到逆矩阵
Mat22 absCT = absC.Transpose();
如何判断是否相交?

上图是只做A物体分离轴投影的结果,当然物体B也应该做一次,这里没有画出,还是画一下吧。

本文介绍使用分离轴定理进行矩形碰撞检测的方法。通过计算矩形在各个轴上的投影来判断是否相交,重点在于如何快速找到矩形在变换坐标系下的边界点。
最低0.47元/天 解锁文章
590

被折叠的 条评论
为什么被折叠?



