http://jeffreythompson.org/collision-detection/rect-rect.php
我试图用矩形图片和代码找出矩形/矩形的碰撞检测算法。根据Jeff Thompson的碰撞检测文章,r1RightEdge为r1x + r1w。
float r1RightEdge = r1x + r1w;
if (r1RightEdge >= r2x) {
// right edge of r1 is past left edge of r2
}
图片中蓝色矩形的r1RightEdge垂直dosh线是吗?如果是这样,为什么r1RightEdge是r1x + r1w而不是r1x + r1h?
答案 0 :(得分:1)
基于示例代码
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”没有意义,因为一个是水平的,另一个是垂直的。
答案 1 :(得分:1)
通用且更简单的解决方案可以是:
// 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;
当矩形相交但任何矩形的角都不位于另一个内部时,这也将处理特殊情况。