返回
浅析碰撞检测:Separating Axis Theorem
前端
2023-09-04 08:40:55
SAT 的基本原理
SAT 的核心思想是找到将两个多边形分开的轴。如果沿着该轴的投影不重叠,则这两个多边形不会发生碰撞。对于两个多边形,我们可以找到很多条分开的轴。这些轴可以是多边形的边,也可以是多边形的对角线。
为了找到将两个多边形分开的轴,我们可以使用以下步骤:
- 找到两个多边形的所有边和对角线。
- 计算每个边或对角线的方向向量。
- 将两个多边形的所有方向向量放入一个集合中。
- 遍历集合中的每个方向向量,并计算两个多边形沿着该方向的投影。
- 如果两个多边形的投影不重叠,则该方向向量就是将两个多边形分开的轴。
SAT 的工作原理
为了更好地理解 SAT 的工作原理,我们来看一个简单的例子。如图 1 所示,有两个多边形 A 和 B。我们要判断这两个多边形是否发生碰撞。
首先,我们需要找到两个多边形的所有边和对角线。如图 2 所示,多边形 A 有 4 条边和 2 条对角线,多边形 B 有 3 条边和 1 条对角线。
接下来,我们需要计算每个边或对角线的方向向量。如图 3 所示,我们可以用箭头表示每个边或对角线的方向向量。
然后,我们将两个多边形的所有方向向量放入一个集合中。在这个例子中,集合中有 10 个方向向量。
最后,我们需要遍历集合中的每个方向向量,并计算两个多边形沿着该方向的投影。如图 4 所示,我们可以用线段表示两个多边形沿着每个方向向量的投影。
从图 4 中我们可以看到,有两个方向向量将两个多边形分开了。这两个方向向量分别是方向向量 1 和方向向量 3。这意味着,如果两个多边形沿着方向向量 1 或方向向量 3 移动,它们就不会发生碰撞。
SAT 的优缺点
SAT 是一种检测两个多边形是否发生碰撞的有效方法。它快速且易于实现。但是,SAT 也有以下缺点:
- SAT 只能检测多边形的碰撞,不能检测其他形状的碰撞。
- SAT 不能检测非凸多边形的碰撞。
- SAT 不能检测旋转多边形的碰撞。
结论
SAT 是一种检测两个多边形是否发生碰撞的有效方法。它快速且易于实现。但是,SAT 也有以下缺点:
- SAT 只能检测多边形的碰撞,不能检测其他形状的碰撞。
- SAT 不能检测非凸多边形的碰撞。
- SAT 不能检测旋转多边形的碰撞。
尽管如此,SAT 仍然是 2D 游戏中碰撞检测的常用方法。