This question already has answers here:
Determine if two rectangles overlap each other?
(21个回答)
6年前关闭。
我想检查两个正方形是否相交。我的想法是这样
任何想法来优化此代码?
换句话说,存在四种可能的情况,您检查正方形
有关更多信息,请参见以下类似问题的答案:Determine if two rectangles overlap each other?
(21个回答)
6年前关闭。
我想检查两个正方形是否相交。我的想法是这样
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++) {
bool x = check line(i) of first square intersect with
line (j) of the second square
if (x) return;
}
任何想法来优化此代码?
最佳答案
您不必遍历所有坐标即可检查两个正方形是否相交。
这是一个简单的解决方案,只要不旋转正方形即可使用。
假设您用正方形的左上角坐标和边长来表示一个正方形。假设aX
和aY
表示坐标,并且aLen
表示正方形A
的边长,反之亦然。
然后检查正方形B
是否与正方形B
相交,求值:
(aX < (bX + bLen) && (aX + aLen) > bX)
&& (aY < (bY - bLen) && (aY - aLen) > bY)
换句话说,存在四种可能的情况,您检查正方形
A
的角是否在正方形B
的X范围内以及正方形A
的角是否在Y范围内正方形B
。(Y)
^
| 1: 2:
| +--------+ +--------+
| | | | |
| | A +--|-----+ +-----+--+ A |
| | | | | | | | |
| +-----+--+ B | | B +--+-----+
| | | | |
| +--------+ +--------+
|
| 3: 4:
| +--------+ +--------+
| | | | |
| | B +--|-----+ +-----+--+ B |
| | | | | | | | |
| +-----+--+ A | | A +--+-----+
| | | | |
| +--------+ +--------+
|
+-------------------------------------------------> (X)
有关更多信息,请参见以下类似问题的答案:Determine if two rectangles overlap each other?
关于c++ - 检查两个正方形是否彼此相交,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18172930/