题目描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出
输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3 2 2 4 4
样例输出
1.00
思路
对于所给的两对顶点坐标,只需求出四个x坐标中的从小到大排序中第二个和第三个,y坐标同样求出从小到大排序中第二个和第三个。将第二个x坐标和第二个y坐标结合组成新的坐标,将第三个x坐标和第三个y坐标结合组成新的坐标,这两个坐标即是重合区域的对顶点坐标。
但有可能两个区域没有重合,需要特判
代码
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
DecimalFormat df=new DecimalFormat("0.00");
Double s,maxx1,maxy1,minx1,miny1,maxx2,maxy2,minx2,miny2;
int x1=0,y1=0;
int minx=10000000,miny=10000000;
Double[] x=new Double[4];
Double[] y=new Double[4];
for(int i=0;i<2;i++) {
for(int j=0;j<4;j++) {
if(j%2==0) {
x[x1]=sc.nextDouble();
x1++;
}
if(j%2==1) {
y[y1]=sc.nextDouble();
y1++;
}
}
}
if(x[1]>x[0]) {
maxx1=x[1];
minx1=x[0];
}
else {
maxx1=x[0];
minx1=x[1];
}
if(y[1]>y[0]){
maxy1=y[1];
miny1=y[0];
}
else {
maxy1=y[0];
miny1=y[1];
}
if(x[3]>x[2]) {
maxx2=x[3];
minx2=x[2];
}
else {
maxx2=x[2];
minx2=x[3];
}
if(y[3]>y[2]){
maxy2=y[3];
miny2=y[2];
}
else {
maxy2=y[2];
miny2=y[3];
}
if(maxx1<=minx2||maxx2<=minx1||maxy1<=miny2||maxy2<=miny1) {
System.out.print("0.00");
}
else {
Arrays.sort(x);
Arrays.sort(y);
s=(x[2]-x[1])*(y[2]-y[1]);
System.out.print(df.format(s));
}
}
}