题目描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入
输入描述:
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输入样例:
1 1 3 3
2 2 4 4
输出
输出描述:
输出仅包含一个实数,为交的面积,保留到小数后两位。
输出样例:
1.00
HINT:时间限制:1.0s 内存限制:512.0MB
解题思路
因为要计算相交的面积,所以要得到相交的长度和宽度,而长度和宽度都有四种情况,一个矩形的长度或者宽度含与另一个矩阵,如矩1含于矩2,或者是矩2含于矩1.宽度还可以分是左边截取还是右边截取,长度可以分为上截取和下截取。最后计算就行了,注意最后要保留两位小数。
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//接收坐标点
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
double x2=scanner.nextDouble();
double y2=scanner.nextDouble();
double x3=scanner.nextDouble();
double y3=scanner.nextDouble();
double x4=scanner.nextDouble();
double y4=scanner.nextDouble();
//先判断平行X轴的长度
double max1,min1,max2,min2,x=0.0,maxy1,miny1,maxy2,miny2,y=0.0;
//先判断第一个矩形
if (x1>x2){
max1=x1;
min1=x2;
}else {
max1=x2;
min1=x1;
}
//第二个矩形
if (x3>x4){
max2=x3;
min2=x4;
}else {
max2=x4;
min2=x3;
}
if (max1<=max2 && min1>=min2){
x=max1-min1;//第一个在第二个内
}else if (max2<=max1 && min2>=min1){
x=max2-min2;//第二个在第一个内
}else if (max2>min1 && max2<max1){
x=max2-min1;//包含左边
}else if (min2>min1 && min2<max1){
x=max1-min2;//包含右边
}
//判断平行Y轴的长度
//判断第一个矩形
if (y1>y2){
maxy1=y1;
miny1=y2;
}else {
maxy1=y2;
miny1=y1;
}
//第二个矩形
if (y3>y4){
maxy2=y3;
miny2=y4;
}else {
maxy2=y4;
miny2=y3;
}
if (maxy1<=maxy2 && miny1>=miny2){
y=maxy1-miny1;//第一个在第二个内
}else if (maxy2<=maxy1 && miny2>=miny1){
y=maxy2-miny2;//第二个在第一个内
}else if (maxy2>miny1 && maxy2<maxy1){
y=maxy2-miny1;//包含下边
}else if (miny2>miny1 && miny2<maxy1){
y=maxy1-miny2;//包含上边
}
double num=x*y;//计算面积
System.out.println(String.format("%.2f",num));
}
}