sat(分离轴定理)用来检测两个凸多边形是否相交,也可以用于检测点是否在凸多边形内。凸多边形内的点的连线上的点都在凸多边形内,或者连线只和图多边形相交两次(边界处)。


1. 原理
如果凸多边形在某个轴上的投影不重叠,则两个凸多边形不相交。需要对所有的轴(每个边的法向量)进行投影,存在一个轴上的投影不相交,则两个凸多边形不相交。如果所有轴上的投影都相交,则多边形相交。


Axis[] axes = // get the axes to test
// loop over the axes
for (int i = 0; i < axes.length; ++i) {
Axis axis = axes[i];
// project both shapes onto the axis
Projection p1 = shape1.project(axis);
Projection p2 = shape2.project(axis);
// do the projection overlap?
if (!p1.overlap(p2)) {
// the we can gurantee that the shapes do not overlap
reture false;
}
}
// if we get here then we know that every axis had overlap on it
// so we can guarantee an intersection
return ture;
2. 分离轴
分离轴是凸多边形每个边的法向量。做碰撞检测的两个凸多边形的所有边都需计算其法向量。如果只需要计算两个凸多边形是否碰撞,则分离轴不需要归一化;如果需要计算 M T V MTV

本文详细介绍了分离轴定理(SAT),一种用于检测两个凸多边形是否相交的算法。通过遍历每个凸多边形边的法向量作为分离轴,计算投影并检查是否有重叠来确定相交情况。同时,文中还阐述了如何计算最小翻译向量(MTV),即使两个相交的凸多边形分开所需的最小距离和方向。该方法在游戏开发和物理模拟等领域有广泛应用。
最低0.47元/天 解锁文章
1597





