問題描述
平面上有兩個矩形,它們的邊平行於直角座標系的X軸或Y軸。對於每個矩形,我們給出它的一對相對頂點的座標,請你編程算出兩個矩形的交的面積。
輸入格式
輸入僅包含兩行,每行描述一個矩形。
在每行中,給出矩形的一對相對頂點的座標,每個點的座標都用兩個絕對值不超過10^7的實數表示。
輸出格式
輸出僅包含一個實數,爲交的面積,保留到小數後兩位。
樣例輸入
1 1 3 3
2 2 4 4
樣例輸出
1.00
錦囊1
判斷。
錦囊2
公共部分爲兩個矩形左邊界較大值到右邊界較小值,從下邊界較大值到上邊界較小值。
舉個栗子😀:
根據上圖有以下代碼:
public class Main
{
public static void main(String[] args)throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
double[][] arr = new double[2][4];
String tag1[] = br.readLine().split(" ");
String tag2[] = br.readLine().split(" ");
/*將輸入的矩陣添加進二維數組*/
for(int b=0;b<4;b++)
{
arr[0][b] = Double.valueOf(tag1[b]);
}
for(int b=0;b<4;b++)
{
arr[1][b] = Double.valueOf(tag2[b]);
}
double a,b,c,d,e,f,g,h;
a = Math.max(arr[0][0],arr[0][2]);//得到矩形A右邊界x值
b = Math.min(arr[0][0],arr[0][2]);//得到矩形A左邊界x值
c = Math.max(arr[0][1],arr[0][3]);//得到矩形A上邊界y值
d = Math.min(arr[0][1],arr[0][3]);//得到矩形A下邊界y值
e = Math.max(arr[1][0],arr[1][2]);//得到矩形B右邊界x值
f = Math.min(arr[1][0],arr[1][2]);//得到矩形B左邊界x值
g = Math.max(arr[1][1],arr[1][3]);//得到矩形B上邊界y值
h = Math.min(arr[1][1],arr[1][3]);//得到矩形B下邊界y值
/*判斷兩個矩形是否相交*/
if(a<f || e<b || c<h || g<d)
{
System.out.println("0.00");//不相交,則重疊面積爲0
}
else
{
double i = (Math.min(a,e)-Math.max(b,f));//得到重疊矩形的長
double j = (Math.min(c,g)-Math.max(d,h));//得到重疊矩形的寬
String s = String.format("%.2f",i*j);//計算面積
System.out.println(s);
}
}
}