判断两个矩形是否相交,若相交则输出yes,不然则输出no。
这个代码好像不能判断所有两个矩形不相交的情况,但一直找不到是哪种情况。
#include <stdio.h>
int main(){
int t;
int x1,y1,x2,y2,x3,y3,x4,y4;
int i;
scanf("%d",&t);
for(i=1;i<=t;i++){
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
scanf("%d %d %d %d",&x3,&y3,&x4,&y4);
if(x1==x3&&x2==x4&&y1<y3&&y2<y4||x1==x3&&x2==x4&&y3<y1&&y4<y2){
printf("NO\n");
}else if(y1==y3&&y2==y4&&x1<x3&&x2<x4||y1==y3&&y2==y4&&x3<x1&&x4<x2){
printf("NO\n");
}else if(x2==x3&&y2==y3||x1==x4&&y1==y4||x2==x3&&y1==y4||x1==x4&&y2==y3){
printf("YES\n");
}else if(x1<x3&&x2<x4&&y1<y3&&y2<y4||x3<x1&&x4<x2&&y3<y1&&y4<y2||x2==x3){
printf("NO\n");
}else{
printf("YES\n");
}
}
return 0;
}
其中一组正确判断情况的输出结果:
3
0 0 10 10
11 11 20 20
NO
10 10 15 15
8 13 13 20
YES
4 4 20 20
20 20 30 30
YES
判断所有两个矩形不相交的情况
int x01 , x02 , y01 , y02 ;
int x11 , x12 , y11 , y12 ;
scanf("%d %d %d %d" ,&x01 ,&y01 ,&x02 , &y02) ;
scanf("%d %d %d %d" ,&x11 , &y11 , &x12 , &y12) ;
int zx = ab(x01+x02-x11-x12) ; //两个矩形重心在x轴上的距离的两倍
int x = ab(x01-x02)+ab(x11-x12) ; //两矩形在x方向的边长的和
int zy = ab(y01+y02-y11-y12) ; //重心在y轴上距离的两倍
int y = ab(y01-y02)+ab(y11-y12) ; //y方向边长的和
if(zx <= x && zy <= y)
printf("YES\n") ;
else printf("NO\n") ;