c++ - 检查两个正方形是否相交

标签 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 不旋转就可以使用。

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

相关文章:

c++ - SDL_RWread 返回带有段错误的字符串

c++ - CUDA 中的全局内存与共享内存

c++ - cin 会将键盘输入的\n 识别为换行符吗?

c++ - 路径字符串串联问题

c++ - Qt5:QPushButon大小设置

c++ - 重载逗号运算符*真的*会影响其操作数的评估顺序吗?

c++ - 牛顿法调用函数 C++

c++ - 如何在创建字符串之前测量字符串的长度形成一个整数

python - 从 C++ 发出运行 python 脚本

C++错误:undefined reference to `EnumProcesses@12