题目描述
用具有x,y两个整型变量成员的结构类型SPoint来表示坐标点。用SRect结构类型来描述矩形,其中包含p1和p2两个SPoint成员分别表示矩形对角线上的两个点。
编写判断两个矩形是否重叠的函数bool isoverlap(const SRect &rect1, const SRect &rect2)。
主函数输入两个矩形,调用isoverlap函数判断是否重叠。
输入
判断次数
矩形1的对角线顶点坐标x1、y1、x2、y2
矩形2的对角线顶点坐标x1、y1、x2、y2
…
输出
是否重叠
输入样例1
3
1 5 2 9
1 3 2 4
5 6 7 8
5 7 7 9
2 5 1 0
9 4 2 9
输出样例1
not overlapped
overlapped
overlapped
#include<iostream>
#include<algorithm>
using namespace std;
struct SPoint
{
int x;
int y;
};
struct SRect
{
SPoint p1;
SPoint p2;
};
bool isoverlap(SRect &rect1,SRect &rect2) //只要rect2出现的情况在rect1的四周时,就不重叠
{
if(rect1.p2.x < rect1.p1.x) //找到rect1的最小x:p1.x(大的x:p2.x)
swap(rect1.p2.x,rect1.p1.x);
if(rect1.p2.y < rect1.p1.y) //找到rect1的最小y:p1.y(大的y:p2.y)
swap(rect1.p2.y,rect1.p1.y);
if(rect2.p2.x < rect2.p1.x) //找到rect2的最小x:p1.x(大的x:p2.x)
swap(rect2.p2.x,rect2.p1.x);
if(rect2.p2.y < rect2.p1.y) //找到rect2的最小y:p1.y(大的y:p2.y)
swap(rect2.p2.y,rect2.p1.y);
if(rect2.p1.x > rect1.p2.x||rect2.p2.x < rect1.p1.x||rect2.p1.y>rect1.p2.y||rect2.p2.y<rect1.p1.y){ //画图四种情况:Xmin>x2 || Xmax<x1 || Ymin>y2 || Ymax<y1
cout << "not overlapped"<<endl;
return true;
}
else{
cout << "overlapped"<<endl;
return false;
}
}
int main()
{
int t;
cin >> t;
while(t--)
{
SRect r1,r2;
cin >> r1.p1.x >> r1.p1.y >> r1.p2.x >> r1.p2.y;
cin >> r2.p1.x >> r2.p1.y >> r2.p2.x >> r2.p2.y;
isoverlap(r1,r2);
}
return 0;
}