首页 > 解决方案 > 如何确定正常矩形和旋转矩形之间是否存在碰撞?

问题描述

确定两个 AABB(轴对齐边界框)矩形之间是否发生碰撞很简单:

doRectanglesCollide(r1X, r1Y, r1W, r1H, r2X, r2Y, r2W, r2H) {
  return r1X < r2X + r2W && r1X + r1W > r2X && r1Y < r2Y + r2H && r1Y + r1H > r2Y;
}

确定两个旋转矩形之间是否发生碰撞的效率要低得多。

但是,有一个窍门。可以将两个矩形旋转相同的量,使得其中一个变为 AABB 矩形。

那时,只需要一个函数来确定 AABB 矩形和旋转矩形是否相交。我认为它比使用分离轴定理来确定两个旋转的矩形是否相交要有效得多,因为后者是确定两个任意多边形是否相交的通用公式。

所以,换个说法,这是我的问题:我有两个旋转的矩形。除了使用链接的答案之外,没有更有效的算法可以利用这样一个事实,即可以通过将其中一个矩形旋转两个来将它们制成 AABB 矩形这一事实-radians?因为到那时,问题就变成了 AABB 矩形和旋转矩形是否相交的问题。

标签: javascriptmathintersectionrect

解决方案


推荐阅读