A1042. 矩形面积交

问题描述

  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
  输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
  输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00
package www.tsinsen.com;

import java.math.BigDecimal;
import java.util.Scanner;

public class A10422 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan=new Scanner(System.in);
        //输入四个点的横纵坐标
        Point a1=new Point();
        a1.x=scan.nextDouble();
        a1.y=scan.nextDouble();
        Point a2=new Point();
        a2.x=scan.nextDouble();
        a2.y=scan.nextDouble();
        Point b1=new Point();
        b1.x=scan.nextDouble();
        b1.y=scan.nextDouble();
        Point b2=new Point();
        b2.x=scan.nextDouble();
        b2.y=scan.nextDouble();
        //找出相交的部分
        double ax=Math.min(Math.max(a1.x, a2.x),Math.max(b1.x, b2.x));
        double ay=Math.min(Math.max(a1.y, a2.y),Math.max(b1.y, b2.y));
        double bx=Math.max(Math.min(a1.x, a2.x),Math.min(b1.x, b2.x));
        double by=Math.max(Math.min(a1.y, a2.y),Math.min(b1.y, b2.y));
        //没相交部分输出0
        if(bx>ax||by>ay) {
            BigDecimal bd=new BigDecimal(0.00);
            System.out.println(bd.setScale(2, BigDecimal.ROUND_HALF_UP));
        }
        else{
            //求相交的面积
            double x1=Math.max(ax, bx);
            double y1=Math.max(ay, by);
            double x2=Math.min(ax, bx);
            double y2=Math.min(ay, by);
            double area=(x1-x2)*(y1-y2);
            BigDecimal bd=new BigDecimal(area);
            System.out.println(bd.setScale(2, BigDecimal.ROUND_HALF_UP));
        }
    }
    public static class Point{
        double x;
        double y;
    }
}

 

posted @ 2018-02-07 19:15  henu小白  阅读(155)  评论(0编辑  收藏  举报