问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double x1,y1,x2,y2,x3,y3,x4,y4;
x1 = sc.nextDouble();
y1 = sc.nextDouble();
x2 = sc.nextDouble();
y2 = sc.nextDouble();
x3 = sc.nextDouble();
y3 = sc.nextDouble();
x4 = sc.nextDouble();
y4 = sc.nextDouble();
double a1,a2,b1,b2;
a1 = Math.min(Math.max(x1,x2), Math.max(x3, x4)); //相交矩形较大点的x位置
a2 = Math.min(Math.max(y1,y2), Math.max(y3, y4)); //相交矩形较大点的y位置
b1 = Math.max(Math.min(x1,x2), Math.min(x3, x4)); //相交矩形较小点的x位置
b2 = Math.max(Math.min(y1,y2), Math.min(y3, y4)); //相交矩形较小点的y位置
double s;
if(a1 > b1 && a2 > b2) {
s = (a1 - b1) * (a2 - b2);
}else {
s = 0;
}
System.out.println(String.format("%.2f", s));
}
}
新建了一个类写,看着清楚多了
import java.util.Scanner;
class Juzhen{
double x1,y1;
double x2,y2;
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Juzhen p1 = new Juzhen();
p1.x1 = sc.nextDouble();
p1.y1 = sc.nextDouble();
p1.x2 = sc.nextDouble();
p1.y2 = sc.nextDouble();
Juzhen p2 = new Juzhen();
p2.x1 = sc.nextDouble();
p2.y1 = sc.nextDouble();
p2.x2 = sc.nextDouble();
p2.y2 = sc.nextDouble();
Juzhen p3 = new Juzhen();
p3.x1 = Math.max(Math.min(p1.x1, p1.x2), Math.min(p2.x1, p2.x2));
p3.y1 = Math.max(Math.min(p1.y1, p1.y2), Math.min(p2.y1, p2.y2));
p3.x2 = Math.min(Math.max(p1.x1, p1.x2), Math.max(p2.x1, p2.x2));
p3.y2 = Math.min(Math.max(p1.y1, p1.y2), Math.max(p2.y1, p2.y2));
double sum = 0;
if(p3.x2 > p3.x1 && p3.y2 > p3.y1) {
sum = (p3.x2 - p3.x1) * (p3.y2 - p3.y1);
}else {
sum = 0;
}
System.out.printf("%.2f",sum);
}
}