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

该博客探讨了如何判断两个平行于坐标轴的矩形是否相交的问题,提供了两种解题思路:通过比较对角线坐标和矩形中心之间的距离来确定相交情况。并给出了相应的AC代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

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








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值