c++ 判断矩形是否有重叠,相邻不算做重叠
时间: 2024-03-27 16:40:07 浏览: 20
可以通过判断两个矩形的位置关系来判断它们是否重叠。若两个矩形不相交,则它们必定不重叠;若它们相交,则需要进一步判断它们是否有重叠。
具体实现可以通过以下步骤:
1. 判断两个矩形的位置关系,若它们不相交则返回 false。
2. 分别计算两个矩形在 x 轴和 y 轴上的投影长度,若任意一个轴的投影长度不重叠,则它们不重叠,返回 false。
3. 若两个矩形在 x 轴和 y 轴上的投影长度都有重叠,则它们重叠,返回 true。
需要注意的是,若两个矩形相邻,则它们不算重叠,需要特殊处理。
以下是 C++ 的代码实现:
```c++
struct Rectangle {
int x1, y1; // 左上角坐标
int x2, y2; // 右下角坐标
};
bool isOverlap(Rectangle r1, Rectangle r2) {
if (r1.x1 >= r2.x2 || r1.x2 <= r2.x1 || r1.y1 >= r2.y2 || r1.y2 <= r2.y1) {
// 两个矩形不相交
return false;
} else if ((r1.x2 > r2.x1 && r1.y2 > r2.y1) || (r2.x2 > r1.x1 && r2.y2 > r1.y1)) {
// 两个矩形相交,且不相邻
return true;
} else {
// 两个矩形相邻
return false;
}
}
```