矩形碰撞检测

时间:2012-12-17 17:47:33

标签: c++ algorithm collision-detection

class Rectangle{
public:
   float x, y, width, height;
   // (x,y) is the lower left corner of the rectangle
};

这个算法是否正确?

bool Rectangle::colidesWith(Rectangle other) {
   if (x+width < other.x) return false; // "other" is on the far right
   if (other.x+other.width < x) return false; //"other" is on the far left
   if (y+height < other.y) return false // "other" is up
   if (other.y+other.height < y) return false // "other" is down
   return true;
}

3 个答案:

答案 0 :(得分:5)

如果填充了矩形(即你将其中一个放在另一个内部的情况下算作碰撞)。

答案 1 :(得分:4)

是的。您可以将其视为超平面分离定理的特例,这是该问题的一般版本。您将这些矩形投影到X和Y轴上,然后检查生成的线段之间是否有一些分隔。

答案 2 :(得分:0)

对我来说,更直观的写这种情况的方法是:

( max(r1.x, r2.x) < min(r1.x+r1.w, r2.x+r2.w) ) &&
( max(r1.y, r2.y) < min(r1.y+r1.h, r2.y+r2.h) )

实际上,这可以推广到任何维度。