问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
代码
#include<stdio.h>
int main(){
double A1x,A1y; //矩形A的第一个顶点
double A2x,A2y; //矩形A的第二个顶点
double B1x,B1y; //矩形B的第一个顶点
double B2x,B2y; //矩形B的第二个顶点
scanf("%lf%lf%lf%lf",&A1x,&A1y,&A2x,&A2y);
scanf("%lf%lf%lf%lf",&B1x,&B1y,&B2x,&B2y);
double x1=0,x2=0; //重合矩形平行于x轴的两条边
if((A1x-B1x)*(A1x-B2x)<=0){
x1=A1x;
if((A2x-B1x)*(A2x-B2x)<=0){
x2=A2x;
}
else if((B1x-A1x)*(B1x-A2x)<=0)
x2=B1x;
else if((B2x-A1x)*(B2x-A2x)<=0)
x2=B2x;
}
else if((A2x-B1x)*(A2x-B2x)<=0){
x1=A2x;
if((B1x-A1x)*(B1x-A2x)<=0)
x2=B1x;
else if((B2x-A1x)*(B2x-A2x)<=0)
x2=B2x;
}
else if((B1x-A1x)*(B1x-A2x)<=0){
x1=B1x;
if((B2x-A1x)*(B2x-A2x)<=0)
x2=B2x;
}
double y1=0,y2=0; //重合矩形平行于y轴的两条边
if((A1y-B1y)*(A1y-B2y)<=0){
y1=A1y;
if((A2y-B1y)*(A2y-B2y)<=0)
y2=A2y;
else if((B1y-A1y)*(B1y-A2y)<=0)
y2=B1y;
else if((B2y-A1y)*(B2y-A2y)<=0)
y2=B2y;
}
else if((A2y-B1y)*(A2y-B2y)<=0){
y1=A2y;
if((B1y-A1y)*(B1y-A2y)<=0)
y2=B1y;
else if((B2y-A1y)*(B2y-A2y)<=0)
y2=B2y;
}
else if((B1y-A1y)*(B1y-A2y)<=0){
y1=B1y;
if((B2y-A1y)*(B2y-A2y)<=0)
y2=B2y;
}
double l,w; //重合矩形的长和宽
l=x1>x2?(x1-x2):(x2-x1);
w=y1>y2?(y1-y2):(y2-y1);
printf("%.2lf",l*w);
return 0;
}