题目 求两矩形面积交
题目描述
在平面直角坐标系中有两个矩形,给你两个矩形的对角坐标,
请计算两矩形的面积之交。
输入描述
输入
第1行是一个整数T,代表测试样例组数。
后面有T行,每行有4对共8个实数,前4个数代表第一个矩形的对角两横纵坐标,后4个数代表第二个矩形的对角两横纵坐标。
输出描述
输出
对于每组输入,输出一个实数,表示两矩形的面积交。
样例输入
1
1 1 3 3 2 2 4 4
样例输出
1.00
分析
1. 没说明是否是左上角和右下角坐标还是右上角和左下角的坐标
2. 所以我们可以通过对同一个矩形的坐标分别去最大值 最小值的方式,使得其最终全部变为右上角和左下角的坐标
3. 通过对两个右上角的坐标取最小值和两个左下角坐标取最大值的方式得到“相交矩形的右上角和左下角坐标”(因为你需要判断这个矩形是否真实存在,这是个很坑的点)
4. 判断是否存在,不存在的话就输出0
5. 还有一个小坑,就是如果你用printf输出的话 要有换行符,否则也不AC!!
代码
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
double x1,y1,x2,y2,x3,y3,x4,y4;
int n;
cin>>n;
while(n--)
{
cin>>x1>>y1>>x2>>y2;
cin>>x3>>y3>>x4>>y4;
double a,b,c,d,a2,b2,c2,d2;
a=max(x1,x2);//第一个矩形右上角x坐标
b=max(y1,y2);//第一个矩形右上角y坐标
c=min(x1,x2);//第一个矩形左下角x坐标
d=min(y1,y2);//第一个矩形左下角y坐标
a2=max(x3,x4);//第二个矩形右上角x坐标
b2=max(y3,y4);//第二个矩形右上角y坐标
c2=min(x3,x4);第二个矩形左下角x坐标
d2=min(y3,y4);第二个矩形左下角y坐标
double ans1x,ans1y,ans2x,ans2y;
ans1x=min(a,a2);
ans1y=min(b,b2);//相交矩形右上角坐标
ans2x=max(c,c2);
ans2y=max(d,d2);//相交矩形左下角坐标
double area=abs(ans1x-ans2x)*abs(ans1y-ans2y);
if(ans1x>ans2x&&ans1y>ans2y)
printf("%.2f\n",area);
else
printf("0.00\n");
}
return 0;
}