碰撞检测 rectangle/rectangle 算法
Collision Detection rectangle/rectangle algorithm
http://jeffreythompson.org/collision-detection/rect-rect.php
我想弄清楚 rectangle/rectangle 与矩形的图片和代码的碰撞检测算法。根据 Jeff Thompson 的碰撞检测文章,有价值的 r1RightEdge 是 r1x + r1w。
float r1RightEdge = r1x + r1w;
if (r1RightEdge >= r2x) {
// right edge of r1 is past left edge of r2
}
图中蓝色矩形的r1RightEdge垂直虚线是有价值的吗?如果是这样,为什么有价值的 r1RightEdge 是 r1x +r1w 而不是 r1x+r1h?
基于示例代码
if (r1x + r1w >= r2x && // r1 right edge past r2 left
r1x <= r2x + r2w && // r1 left edge past r2 right
r1y + r1h >= r2y && // r1 top edge past r2 bottom
r1y <= r2y + r2h) { // r1 bottom edge past r2 top
return true;
}
return false;
我理解 x(在你的例子中:r1x)表示 r1 左上点的水平位置 - 或 R1LeftEdge,只有在我们添加 r1w(宽度)时才有意义,因为它们都是水平,结果是 r1 - 或 R1RightEdge 的水平右上角点。 "r1x+r1h" 没有意义,因为一个是水平的,另一个是垂直的。
通用且更简单的解决方案可以是:
// If one rectangle is on left side of other
if (r1x > r2x + r2w || r2x > r1x + r1w)
return false;
// If one rectangle is above other
if (r1y > r2y + r2h || r2y > r1y + r1h)
return false;
// If none of the above meet then there will be a intersection
return true;
这也将处理矩形相交但任何矩形的角 none 位于其他矩形内的特殊情况。
http://jeffreythompson.org/collision-detection/rect-rect.php
我想弄清楚 rectangle/rectangle 与矩形的图片和代码的碰撞检测算法。根据 Jeff Thompson 的碰撞检测文章,有价值的 r1RightEdge 是 r1x + r1w。
float r1RightEdge = r1x + r1w;
if (r1RightEdge >= r2x) {
// right edge of r1 is past left edge of r2
}
图中蓝色矩形的r1RightEdge垂直虚线是有价值的吗?如果是这样,为什么有价值的 r1RightEdge 是 r1x +r1w 而不是 r1x+r1h?
基于示例代码
if (r1x + r1w >= r2x && // r1 right edge past r2 left
r1x <= r2x + r2w && // r1 left edge past r2 right
r1y + r1h >= r2y && // r1 top edge past r2 bottom
r1y <= r2y + r2h) { // r1 bottom edge past r2 top
return true;
}
return false;
我理解 x(在你的例子中:r1x)表示 r1 左上点的水平位置 - 或 R1LeftEdge,只有在我们添加 r1w(宽度)时才有意义,因为它们都是水平,结果是 r1 - 或 R1RightEdge 的水平右上角点。 "r1x+r1h" 没有意义,因为一个是水平的,另一个是垂直的。
通用且更简单的解决方案可以是:
// If one rectangle is on left side of other
if (r1x > r2x + r2w || r2x > r1x + r1w)
return false;
// If one rectangle is above other
if (r1y > r2y + r2h || r2y > r1y + r1h)
return false;
// If none of the above meet then there will be a intersection
return true;
这也将处理矩形相交但任何矩形的角 none 位于其他矩形内的特殊情况。