我想检查两个正方形是否相互交叉。我的想法是这样的
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;
}
有什么想法可以优化这段代码吗?
我想检查两个正方形是否相互交叉。我的想法是这样的
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
。
然后检查 square 是否B
与 square 相交A
评估这个:
(aX < (bX + bLen) && (aX + aLen) > bX)
&& (aY < (bY - bLen) && (aY - aLen) > bY)
换句话说,有四种可能的情况,您检查 squareB
的任一角是否在 square 的 X 范围内,A
以及square 的任B
一角是否在 square 的 Y 范围内A
。
(Y)
^
| 1: 2:
| +--------+ +--------+
| | | | |
| | A +--|-----+ +-----+--+ A |
| | | | | | | | |
| +-----+--+ B | | B +--+-----+
| | | | |
| +--------+ +--------+
|
| 3: 4:
| +--------+ +--------+
| | | | |
| | B +--|-----+ +-----+--+ B |
| | | | | | | | |
| +-----+--+ A | | A +--+-----+
| | | | |
| +--------+ +--------+
|
+-------------------------------------------------> (X)
有关更多信息,请参阅类似问题的答案:确定两个矩形是否相互重叠?