问题描述
如果有两个矩形相交,什么是快速测试?
What's a fast way to test if 2 rectangles are intersecting?
一个线程(WOOT!),但我不明白如何写在Javascript中,它似乎是以古代形式的C ++写的。
A search on the internet came up with this one-liner (WOOT!), but I don't understand how to write it in Javascript, it seems to be written in an ancient form of 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->右侧
应该是 r2-> r1-> left
和 r2-> bottom top
应为 r2-> bottom< r1> top
函数的工作。
This is how that code can be translated to JavaScript. Note that there is a typo in your code, and in that of the article, as the comments have suggested. Specifically r2->right left
should be r2->right < r1->left
and r2->bottom top
should be r2->bottom < r1->top
for the function to work.
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
这篇关于快速矩形交叉的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!