1063: 矩形面积交

问题描述

平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形, 我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。

输入格式

输入仅包含两行,每行描述一个矩形。

在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。

输出格式

输出仅包含一个实数,为交的面积,保留到小数后两位。

样例输入

1  1  3  3

2  2  4  4

样例输出

1.00
//oj运行错误,但我觉得是对的
import java.util.Scanner;

public class Main {


    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int []a = new int[4];
        int []b = new int[4];
        while(in.hasNext()) {
            for (int i = 0; i < 4; i++)
                a[i] = in.nextInt();
            for (int i = 0; i < 4; i++)
                b[i] = in.nextInt();

            //求圆心
            double ay[] = new double[2];
            double by[] = new double[2];
            ay[0] = a[0]+(a[2]-a[0])/2;
            ay[1] = a[1]+(a[3]-a[1])/2;
            by[0] = b[0]+(b[2]-b[0])/2;
            by[1] = b[1]+(b[3]-b[1])/2;

            //求半径
            double ra=Math.sqrt(Math.pow(ay[1]-a[1],2 )+Math.pow(ay[0]-a[0], 2));
            double rb=Math.sqrt(Math.pow(by[1]-b[1],2 )+Math.pow(by[0]-b[0], 2));
            //两点距离(勾股定理)
            double l = Math.sqrt(Math.pow((by[1]-ay[1]), 2) + Math.pow((by[0]-ay[0]), 2));
            //判断
            double s=0;
            if (l <= rb-ra) //包含
                s = (a[3]-a[1])*(a[2]-a[0]);

            if(l<ra+rb && l>rb-ra)
                s = (by[1]-ay[1])*(by[0]-ay[0]);

            System.out.printf("%.2f",s);
            System.out.println();
        }
    }
}