/*问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
输入仅包含两行,每行描述一个矩形。
在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00
*/
public class Demo05 {
public static void main(String[] args) {
Rect r1 = new Rect(new Point(1,1), new Point(3,3));
Rect r2 = new Rect(new Point(1,1), new Point(5,5));
r1.getS(r2);
}
public static class Point{
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Point() { }
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
public static class Rect extends Point{
Point p1;
Point p2;
public Point getP1() {
return p1;
}
public void setP1(Point p1) {
this.p1 = p1;
}
public Point getP2() {
return p2;
}
public void setP2(Point p2) {
this.p2 = p2;
}
public Rect(Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
}
public void getS(/*this*/ Rect r1){
//先找出每个矩形的最小x,然后再取两个最小x值中的较大值
int minX = Math.max(Math.min(this.getP1().getX(), this.getP2().getX()),
Math.min(r1.getP1().getX(), r1.getP2().getX()));
//先找出每个矩形的最小y,然后再取两个最小y值中的较大值
int minY = Math.max(Math.min(this.getP1().getY(), this.getP2().getY()),
Math.min(r1.getP1().getY(), r1.getP2().getY()));
//先找出每个矩形的最大x,然后再取两个最大x值中的较小值
int maxX = Math.min(Math.max(this.getP1().getX(), this.getP2().getX()),
Math.max(r1.getP1().getX(), r1.getP2().getX()));
//先找出每个矩形的最大y,然后再取两个最大y值中的较小值
int maxY = Math.min(Math.max(this.getP1().getY(), this.getP2().getY()),
Math.max(r1.getP1().getY(), r1.getP2().getY()));
if (minX < maxX && minY < maxY){
System.out.println(Math.round((maxX - minX) * (maxY - minY)*100)/100.00);
}else{
System.out.println(0.00);
}
}
}
}