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