检查两个方格是否相互交叉

时间:2013-08-11 14:22:19

标签: 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;
   }

是否有任何想法来优化此代码?

1 个答案:

答案 0 :(得分:3)

您不必循环遍历所有坐标以检查两个方格是否相交。

这是一个简单的解决方案,只要方块不旋转就能正常工作。

假设您通过左上角坐标及其边长表示一个正方形。设aXaY代表坐标,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?