<分区>
我想检查两个正方形是否相交。我的想法是这样的
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;
}
有优化此代码的想法吗?
标签 c++
<分区>
我想检查两个正方形是否相交。我的想法是这样的
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;
}
有优化此代码的想法吗?
最佳答案
您不必遍历所有坐标来检查两个正方形是否相交。
这是一个简单的解决方案,只要方 block 不旋转就可以使用。
假设您用左上角坐标和边长表示一个正方形。让aX
和 aY
代表坐标和aLen
正方形的边长A
, 正方形反之亦然 B
.
然后检查是否正方形B
与正方形相交 A
评价一下:
(aX < (bX + bLen) && (aX + aLen) > bX)
&& (aY < (bY - bLen) && (aY - aLen) > bY)
换句话说,有四种可能的情况,你检查是否有一个方格 B
的角在正方形的 X 范围内 A
和 B
中的任何一个的角在正方形 A
的 Y 范围内.
(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/