Given two rectangles and the coordinates of two points on the diagonals of each rectangle,you have to calculate the area of the intersected part of two rectangles. its sides are parallel to OX and OY .
1.00 1.00 3.00 3.00 2.00 2.00 4.00 4.00 5.00 5.00 13.00 13.00 4.00 4.00 12.50 12.50
1.0056.25
题解:大意
给定两个矩形和两点对每个矩形的对角线的坐标,你必须计算相交的部分,两个矩形的面积。
输入的第一行是8个正数,表明四点必须在每个对角坐标。8个数分别为是X1,Y1,Y2,X2,X3,Y3,X4,y4,意味着第一个矩形的两个点(x1,y1),(x2,y2)一条对角线;第二矩形的两个点(X3,Y3)、(X4,Y4)一条对角线。
输出重叠的矩形面积,并保留两位小数。
首先明确的是,这样所给的对角线确定的矩形是唯一的,但对角线可能有两种方向,为方便廷议讨论,我们要做的是把对角线的方向统一为从左下到右上,然后判断有重叠矩形的条件:
1.从画图可知,如果x4>x1&&y4>y1&&x3<x2&&y3<y2,则有重叠矩形,且矩形的点也能确定出来,(x3,y1)(x2,y4)确定重叠矩形的从左到右的对角线,面积为:(y4-y2)*(x2-x3)
2.如不满足上述情况则为无重叠矩形,面积为0.00;
代码如下:
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
double max(double a,double b)
{
if(a>b)
return a;
else
return b;
}
double min(double a,double b)
{
if(a<b)
return a;
else
return b;
}
int main()
{
double x1,y1,x2,y2,x3,y3,x4,y4,t;
while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)!=EOF)
{
//把对角线方向换成从左到右
if (x1>x2) t=x1,x1=x2,x2=t;
if (y1>y2) t=y1,y1=y2,y2=t;
if (x3>x4) t=x3,x3=x4,x4=t;
if (y3>y4) t=y3,y3=y4,y4=t;
x1=max(x1,x3);
y1=max(y1,y3);
x2=min(x2,x4);
y2=min(y2,y4);
//计算重叠矩形面积
if(x4>x1&&y4>y1&&x3<x2&&y3<y2) printf("%.2lf\n",(x2-x1)*(y2-y1));
else printf("0.00\n");
}
return 0;
}