测试2个矩形是否相交的快速方法是什么?
在Internet上进行了搜索,找到了这种单行代码(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的方式。请注意,正如注释所建议的那样,您的代码和本文的代码中都有一个错字。该功能r2->right left应该r2->right < r1->left并且r2->bottom top应该具体r2->bottom < r1->top起作用。
r2->right left
r2->right < r1->left
r2->bottom top
r2->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