判断两个长方形是否有重叠,主要涉及到对两个长方形的边界进行比较。假设我们有两个长方形,分别定义为 rect1 和 rect2。每个长方形可以用其左下角和右上角的坐标来表示。
1. 基本思想
两个长方形不重叠的条件是:
rect1 的右边界在 rect2 的左边界的左侧。
rect1 的左边界在 rect2 的右边界的右侧。
rect1 的上边界在 rect2 的下边界的下方。
rect1 的下边界在 rect2 的上边界的上方。
如果上述条件之一成立,则两个长方形不重叠。否则,它们重叠。
2. C++实现代码
#include <iostream>
struct Rectangle {
int x1, y1; // 左下角坐标
int x2, y2; // 右上角坐标
};
bool isOverlap(const Rectangle& rect1, const Rectangle& rect2) {
// 如果一个矩形在另一个矩形的左侧
if (rect1.x2 <= rect2.x1 || rect2.x2 <= rect1.x1)
return false;
// 如果一个矩形在另一个矩形的下方
if (rect1.y2 <= rect2.y1 || rect2.y2 <= rect1.y1)
return false;
// 否则,两个矩形重叠
return true;
}
int main() {
Rectangle rect1 = {0, 0, 2, 2}; // 第一个矩形的左下角(0, 0), 右上角(2, 2)
Rectangle rect2 = {1, 1, 3, 3}; // 第二个矩形的左下角(1, 1), 右上角(3, 3)
if (isOverlap(rect1, rect2)) {
std::cout << "两个长方形重叠。" << std::endl;
} else {
std::cout << "两个长方形不重叠。" << std::endl;
}
return 0;
}