1. 程式人生 > >杭電OJ2056(求倆矩形相交的面積)

杭電OJ2056(求倆矩形相交的面積)

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

思路

這題題意是給你兩個矩形的分別兩個點,(x1,y1),(x2,y2)和(x3,y3),(x4,y4),讓你求出其兩者重疊的面積。

我們乍一想,肯定覺得很簡單,但仔細一想就覺的,情況會特別多了
按大類分為:相離,相交和包含 三種情況。
細分就更多了,因為其給我們的點不是非常規範的,不是左下和右上。
然後當我們通過比較後,規範後,又有問題出現了,就是如何去找重疊面積矩陣的 長和寬。
通過解決好長和寬就可以求出重疊的面積了,別忘了儲存兩位小數。

基本步驟:

1.處理同一矩形中的左下點和右上點的座標。
兩個橫座標 相比 和 兩個縱座標 相比 , 從中進行交換。
2.找出的 長和寬 。
a.如果兩個矩形是相離的話,那麼直接輸出 0.00
b.如果兩個矩形是相交或包含,從中去找出重疊矩形的左下點和右上點的座標
(1)a = x1
(2)b = x2
(3)c = y1
(4)d = y2
左下點 (a,c) 右上點 (b,d)
3.求重疊矩形的面積
S=(b-a)*(d-b)

#include<stdio.h>
#include<string.h>
int main()
{
    double k,a1,b1,
a2,b2,c1,d1,c2,d2,a,b,c,d; while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a1,&b1,&a2,&b2,&c1,&d1,&c2,&d2)!=EOF) { if(a1>a2)k=a1,a1=a2,a2=k; if(b1>b2)k=b1,b1=b2,b2=k; if(c1>c2)k=c1,c1=c2,c2=k; if(d1>d2)k=d1,d1=d2,d2=k; if(a1>c2||a2<c1||b1>d2||b2<d1)//判斷是否相離 printf("0.00\n"); else { if(a1<=c1)a=c1; else a=a1; if(a2<=c2)b=a2; else b=c2; if(b1<=d1)c=d1; else c=b1; if(b2<=d2)d=b2; else d=d2; printf("%.2lf\n",(b-a)*(d-c)); } } return 0; }