碰撞检测矩形/矩形算法

时间:2019-09-24 04:47:38

标签: html algorithm canvas collision-detection rectangles

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?

2 个答案:

答案 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;

当矩形相交但任何矩形的角都不位于另一个内部时,这也将处理特殊情况。