我想检查两个方格是否相互交叉。我的想法是这个
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;
}
是否有任何想法来优化此代码?
答案 0 :(得分:3)
您不必循环遍历所有坐标以检查两个方格是否相交。
这是一个简单的解决方案,只要方块不旋转就能正常工作。
假设您通过左上角坐标及其边长表示一个正方形。设aX
和aY
代表坐标,aLen
代表方A
的边长,反之亦然B
。
然后检查方格B
是否与方格A
相交评估:
(aX < (bX + bLen) && (aX + aLen) > bX)
&& (aY < (bY - bLen) && (aY - aLen) > bY)
换句话说,有四种可能的情况,您可以检查方括号B
的任何一个角是否在方形A
和的X范围内方B
个角的范围在方形A
的Y范围内。
(Y)
^
| 1: 2:
| +--------+ +--------+
| | | | |
| | A +--|-----+ +-----+--+ A |
| | | | | | | | |
| +-----+--+ B | | B +--+-----+
| | | | |
| +--------+ +--------+
|
| 3: 4:
| +--------+ +--------+
| | | | |
| | B +--|-----+ +-----+--+ B |
| | | | | | | | |
| +-----+--+ A | | A +--+-----+
| | | | |
| +--------+ +--------+
|
+-------------------------------------------------> (X)
有关详细信息,请参阅类似问题的答案:Determine if two rectangles overlap each other?