题目描述
用CPoint表示点,用两个CPoint对象表示矩形类CRect的对角线两点。分别实现CPoint类和CRect类,并在主函数用输入的坐标定义4个CPoint类对象,每2个CPoint对象再构造1个CRect对象,然后写个友元函数,判断2个矩形是否重叠。
输入
判断次数
矩形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 7
2 5 1 0
9 4 2 9
输出样例1
not overlapped
overlapped
overlapped
代码
#include <iostream>
using namespace std;
class CPoint
{
private:
int x, y;
public:
CPoint(int xx, int yy) {x = xx; y = yy;}
int getX() {return x;}
int getY() {return y;}
};
class CRect
{
private:
CPoint p1, p2;
public:
CRect(int a1, int a2, int b1, int b2) :p1(a1, a2), p2(b1, b2) {}
friend bool check(CRect &a, CRect &b);
};
bool check(CRect &a, CRect &b)
{
if(max(a.p1.getX(), a.p2.getX()) < min(b.p1.getX(),b.p2.getX()) || max(a.p1.getY(),a.p2.getY()) < min(b.p1.getY(),b.p2.getY())
|| min(a.p1.getX(), a.p2.getX()) > max(b.p1.getX(),b.p2.getX()) || min(a.p1.getY(), a.p2.getY()) > max(b.p1.getY(), b.p2.getY()))
{
return true;
}
else return false;
}
int main( )
{
int t;
cin >> t;
while(t --)
{
int a1, a2, b1, b2;
int c1, c2, d1, d2;
cin >> a1 >> a2 >> b1 >> b2;
cin >> c1 >> c2 >> d1 >> d2;
CRect r1(a1, a2, b1, b2), r2(c1, c2, d1, d2);
if(check(r1,r2)) cout << "not overlapped" << endl;
else cout << "overlapped" << endl;
}
return 0;
}