題目鏈接:矩形面積交
時間限制: 1 Sec 記憶體限制: 256 MB
題目描述:
平面上有兩個矩形,它們的邊平行于直角坐標系的X軸或Y軸,
對于每個矩形,我們給出它的一對相對頂點的坐標,請你編程算出兩個矩形的交的面積,
輸入:
輸入僅包含兩行,每行描述一個矩形,
在每行中,給出矩形的一對相對頂點的坐標,每個點的坐標都用兩個絕對值不超過10^7的實數表示,
輸出:
輸出僅包含一個實數,為交的面積,保留到小數后兩位,
樣例輸入
1 1 3 3
2 2 4 4
樣例輸出
1.00
題意:就是求相交矩形的面積
思路,我們就先假設相交了,然后我們找到相交的兩個對角點,判斷如果不相交就輸出0.00,相交就根據這兩個點算出相交矩形的面積即可,
題中說給出一對相對頂點的坐標,但是沒說是主對角線頂點還是次對角線頂點(不知道這?看下圖),一看就知道了吧,不過這并不重要,不影響做題,因為,我們肯定都知道矩形右上角的坐標點,x值是最大,y值也是最大吧,同理,矩形左下角的坐標點,x值是最小,y值也是最小吧,這就ok了,

我們先假設先輸入的一對相對頂點坐標分別為 x1,y1,x2,y2
我們假設這個矩形右上角的坐標點為 x,y
我們假設這個矩形左下角的坐標點為 xx,yy
那么矩形右上角的坐標點:
x = max(x1,x2)
y = max(y1,y2)
同理矩形左下角的坐標點
xx = min(x1,x2)
yy = min(y1,y2)

根據這思路我們可以求出兩個矩形的右上角的坐標點和左下角的坐標點了吧,接下來我們就可以求相交矩形的對角點坐標了,
看圖:

假設相交矩形的左下角坐標點為(a1,b1),右上角坐標點為(a2,b2),同時我們再結合上圖明白一點:
相交矩形的左下角坐標點 = 兩矩形左下角坐標點最大的那個
相交矩形的右上角坐標點 = 兩矩形右上角坐標點最小的那個
結合上面我們就可以求出相交矩形的相對坐標點了
a1=max(min(x1,x2),min(x3,x4)); //相交矩形的左下角x坐標
b1=max(min(y1,y2),min(y3,y4)); //相交矩形的左下角y坐標
a2=min(max(x1,x2),max(x3,x4)); //相交矩形的右上角x坐標
b2=min(max(y1,y2),max(y3,y4)); //相交矩形的右上角y坐標
到這基本就完事了,最后,我們需要判斷下,萬一兩矩形沒有相交呢
結合上圖看,只有(a1<a2&&b1<b2)這樣才相交,否者兩矩形就是沒有相交,輸出0.00即可,
完整代碼:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iomanip>
using namespace std;
int main()
{
double x1,y1,x2,y2;
double x3,y3,x4,y4;
double a1,b1,a2,b2; //相交矩形的對角坐標點
while(cin>>x1>>y1>>x2>>y2)
{
cin>>x3>>y3>>x4>>y4;
a1=max(min(x1,x2),min(x3,x4)); //相交矩形的左下角x坐標
b1=max(min(y1,y2),min(y3,y4)); //相交矩形的左下角x坐標
a2=min(max(x1,x2),max(x3,x4)); //相交矩形的右上角x坐標
b2=min(max(y1,y2),max(y3,y4)); //相交矩形的右上角x坐標
double area=0;
area=(a2-a1)*(b2-b1);
if(a1<a2&&b1<b2)
cout<<fixed<<setprecision(2)<<area<<endl;
else
cout<<"0.00"<<endl;
}
return 0;
}
小可愛們看完別忘了點贊喲,謝謝支持!
如果你是電腦端,還可以看到右下角的 “一鍵三連” ,沒錯點它[哈哈]

加油!
共同努力!
Keafmd
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/159354.html
標籤:java
