Rectangles

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 29464    Accepted Submission(s): 9573


 

Problem Description

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 .

 

Input

Input The first line of input is 8 positive numbers which indicate the coordinates of four points that must be on each diagonal.The 8 numbers are x1,y1,x2,y2,x3,y3,x4,y4.That means the two points on the first rectangle are(x1,y1),(x2,y2);the other two points on the second rectangle are (x3,y3),(x4,y4).

 

Output

Output For each case output the area of their intersected part in a single line.accurate up to 2 decimal places.

 

Sample Input

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

 

Sample Output

1.00

56.25

题意:

       给出两个矩形的对角线两点的坐标,求两矩形相交的面积。

思路:

      用矩形的对角线坐标可以求出相交部分的长和宽。

      对角线上两点的坐标大小不一定按顺序给出需要先排下序,还要判断一下没有相交面积的情况。

代码:

#include<stdio.h>
double min(double x,double y)
{
	if(x<=y)
		return x;
	else
		return y;
}
double max(double x,double y)
{
	if(x>=y)
		return x;
	else
		return y;
}
int main()
{
	double x1,y1,x2,y2,x3,y3,x4,y4;
	double h,l,s,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;
		}
		s=l=h=0;
		h=min(x2,x4)-max(x1,x3);   //求相交部分的宽
		l=min(y2,y4)-max(y1,y3);   //求相交部分的长
		s=l*h;
		if(h<=0||l<=0)             //判断是否相交
			printf("0.00\n");
		else
		printf("%.2f\n",s);
	}
	return 0;
}