矩形面积交

该博客介绍了如何判断两个矩形是否相交并计算它们的相交面积。首先,通过比较矩形对角线顶点的坐标来判断是否相离。接着,如果相交,通过对坐标排序来确定相交部分的边界,进而计算相交面积。最后,强调在计算过程中使用double类型以确保精度。

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

问题描述
  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
  输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
  输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出

1.00


1.判断是否相离,若相离,所求面积为0

可以画图试一下假设第一个长方形的对角线对角顶点按x,y坐标升序排序依次为(x[0],y[0]),(x[1],y[1])。第二个长方形的对角线对角顶点按x,y坐标升序排序依次为(x[2],y[2]),(x[3],y[3]),只要相交或包含必定满足x[0]<x[3]&&x[1]>x[2]&&y[0]<y[3]&&y[1]>y[2],所以判断相离的条件为先找出对应的点if(x[0]>=x[3]||x[1]<=x[2]||y[0]>=y[3]||y[1]<=y[2]

2.求面积,如果相交那么

将所有横纵坐标按照升序排序排序后结果为x[0]<x[1]<x[2]<x[3],y[0]<y[1]<y[2]<y[3],那么相交的面积为(x[2]-x[1])*(y[2]-y[1])

3.注意一定要用double

#include<iostream>
#include<algorithm>
#include<cstdio>

using namespace std;

int main()
{
	double x[5],y[5],S;
	for(int i=0;i<4;i++)
		cin>>x[i]>>y[i];
	sort(x,x+2);
	sort(x+2,x+4);
	sort(y,y+2);
	sort(y+2,y+4);
	if(x[0]>=x[3]||x[1]<=x[2]||y[0]>=y[3]||y[1]<=y[2])//相离条件
		cout<<"0.00";
	else
	{
		sort(x,x+4);
		sort(y,y+4);
		S=(x[2]-x[1])*(y[2]-y[1]);
		printf("%.2lf\n",S);
	}
	return 0;
} 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值