1. ホーム
  2. javascript

[解決済み] 矩形と矩形の高速交差

2023-05-16 23:25:36

質問

2つの矩形が交差しているかどうかをテストする速い方法は何ですか?


インターネットで検索すると、このワンライナー(WOOT!)が出てきましたが、Javascriptでそれを書く方法を理解していません、それはC++の古いフォームで書かれているようです。

struct
{
    LONG    left;
    LONG    top;
    LONG    right;
    LONG    bottom;
} RECT; 

bool IntersectRect(const RECT * r1, const RECT * r2)
{
    return ! ( r2->left > r1->right
        || r2->right < r1->left
        || r2->top > r1->bottom
        || r2->bottom < r1->top
        );
}

どのように解決するのですか?

これは、そのコードがJavaScriptに変換される方法です。コメントで示唆されているように、あなたのコードと記事のコードにtypoがあることに注意してください。具体的には r2->right leftr2->right < r1->left そして r2->bottom topr2->bottom < r1->top でなければなりません。

function intersectRect(r1, r2) {
  return !(r2.left > r1.right || 
           r2.right < r1.left || 
           r2.top > r1.bottom ||
           r2.bottom < r1.top);
}

テストケースです。

var rectA = {
  left:   10,
  top:    10,
  right:  30,
  bottom: 30
};

var rectB = {
  left:   20,
  top:    20,
  right:  50,
  bottom: 50
};

var rectC = {
  left:   70,
  top:    70,
  right:  90,
  bottom: 90
};

intersectRect(rectA, rectB);  // returns true
intersectRect(rectA, rectC);  // returns false