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

来源:互联网 发布:英文翻译软件哪个最好 编辑:程序博客网 时间:2024/05/16 09:19

题目描述

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

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;}








原创粉丝点击