This question already has answers here:
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;
   }


任何想法来优化此代码?

最佳答案

您不必遍历所有坐标即可检查两个正方形是否相交。

这是一个简单的解决方案,只要不旋转正方形即可使用。

假设您用正方形的左上角坐标和边长来表示一个正方形。假设aXaY表示坐标,并且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/

10-11 23:16
查看更多