3
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;
}
4

3 に答える 3

5

長方形が塗りつぶされている場合です(つまり、一方が他方の内側にある場合を衝突としてカウントします)。

于 2012-12-17T17:50:48.227 に答える
4

うん。これは、この問題の一般的なバージョンである超平面分離定理の特殊なケースと見なすことができます。これらの長方形を X 軸と Y 軸に投影し、結果の線分がそれらの間にある程度の分離があることを確認します。

于 2012-12-17T17:57:42.227 に答える
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) )

実際、これは任意の次元に一般化できます。

于 2012-12-18T07:36:50.410 に答える