您的位置:首页 > 其它

XTU1178 Rectangle--判断矩形是否相交

2017-12-17 15:36 239 查看
题目描述

给你两个平行于坐标轴的矩形,请判断两者是不是相交(面积有重合的部分)? 

input:第一行是一个整数K,表示样例数。每个样例占两行,每行是4个整数,表示一个矩形的对角线点的坐标,坐标值为0到1,000之间。

output:每个样例输出一个结果,相交输出Yes,否则输出No。
样例输入

2

0 0 1 1

1 1 2 2

0 0 2 2

1 1 3 3
样例输出

No

Yes

解题思路

方法1:

分别找到2个矩形右下角的坐标中最小的x(minx)和最小的y(miny),再找到2个矩形左上角坐标中最大的x(maxx)和最大的y(maxy)。最后,相交的矩形即对角线[minx,miny]--[maxx,maxy]所构成的矩形。

如果minx>maxx或miny>maxy则矩形不相交。

方法2:

 设2个矩形a,b的中心分别为oa 和ob,通过作图很容易发现 如果2个矩形要有交集必须满足2个条件:

oa ob横坐标距离<两矩形横边和/2  且 oaob纵坐标距离<两矩形纵边和/2 。

AC代码:

#include<cstdio>
#include<cmath>
int main(){
int k;
double x[5],y[5];
double x1,x2,y1,y2,s1,s2,x3,y3;
scanf("%d",&k);
while(k--){
for(int i=0;i<4;i++)
scanf("%lf%lf",x+i,y+i);
x1=(x[1]+x[0])/2;
x2=(x[3]+x[2])/2;
y1=(y[1]+y[0])/2;
y2=(y[3]+y[2])/2;
s1=abs(x[1]-x[0])+abs(x[3]-x[2]);
s2=abs(y[1]-y[0])+abs(y[3]-y[2]);
if (abs(x1-x2)<s1/2&&abs(y1-y2)<s2/2)
printf("Yes\n");
else printf("No\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: