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

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 06:59:06
JAVA 相交矩形面积  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积.输入格式  输入仅包含

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

JAVA 相交矩形面积  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积.输入格式  输入仅包含
100%符合你的要求,其中inputstr1/2随便你怎么弄,可以通过args传入,或者System.in传入,甚至通过文件传入.

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {
        String inputStr1 = "1 1 3 3";
        String inputStr2 = "2 2 4 4";

        String[] r1String = inputStr1.split(" ");
        Point p1 = new Point(new BigDecimal(r1String[0]),new BigDecimal(r1String[1]));
        Point p2 = new Point(new BigDecimal(r1String[2]),new BigDecimal(r1String[3]));

        String[] r2String = inputStr2.split(" ");
        Point p3 = new Point(new BigDecimal(r2String[0]),new BigDecimal(r2String[1]));
        Point p4 = new Point(new BigDecimal(r2String[2]),new BigDecimal(r2String[3]));

        Rectangle r1 = new Rectangle(p1, p2);
        Rectangle r2 = new Rectangle(p3, p4);
        System.out.println("Rectangle 1: " + r1);
        System.out.println("Rectangle 2: " + r2);
        System.out.println("The crossing area is " + getCrossArea(r1, r2).setScale(2, RoundingMode.HALF_UP));
    }

    public static BigDecimal getCrossArea(Rectangle r1, Rectangle r2) {
        if (r1.contains(r2)) {
            return r2.getArea();
        }
        if (r2.contains(r1)) {
            return r1.getArea();
        }

        Point crossLeftBottom, crossRightTop;

        if (r1.contains(r2.leftBottom)) {
            crossLeftBottom = r2.leftBottom;
            if (r1.contains(r2.leftTop)) {
                crossRightTop = new Point(r1.rightTop.x, r2.rightTop.y);
            }
            else if (r1.contains(r2.rightBottom)) {
                crossRightTop = new Point(r2.rightTop.x, r1.rightTop.y);
            }
            else {
                crossRightTop = r1.rightTop;
            }
            Rectangle crossingRectangle = new Rectangle(crossLeftBottom, crossRightTop);
            System.out.println("Crossing rectangle is " + crossingRectangle);
            return crossingRectangle.getArea();
        }
        else if (r1.contains(r2.rightTop)) {
            crossRightTop = r2.rightTop;
            if (r1.contains(r2.leftTop)) {
                crossLeftBottom = new Point(r2.leftBottom.x, r1.leftBottom.y);
            }
            else if (r1.contains(r2.rightBottom)) {
                crossLeftBottom = new Point(r1.leftBottom.x, r2.leftBottom.y);
            }
            else {
                crossLeftBottom = r1.leftBottom;
            }
            Rectangle crossingRectangle = new Rectangle(crossLeftBottom, crossRightTop);
            System.out.println("Crossing rectangle is " + crossingRectangle);
            return crossingRectangle.getArea();
        }
        else {
            // no crossing
            System.out.println("No crossing area");
            return BigDecimal.ZERO;
        }
    }

    public static class Point {
        Point(BigDecimal x, BigDecimal y) {
            this.x = x;
            this.y = y;
        }

        BigDecimal x;
        BigDecimal y;

        @Override
        public String toString() {
            return "(" + x + "," + y + ")";
        }
    }

    public static class Rectangle {
        Rectangle (Point p1, Point p2) {
            if (p1.x.compareTo(p2.x) == 0 || p1.y.compareTo(p2.y) == 0) {
                throw new RuntimeException("Invalid rectangle." +
                        " p1.x=" + p1.x + ",p1.y=" + p1.y +
                        ",p2.x=" + p2.x + ",p2.y=" + p2.y);
            }
            if (p1.x.compareTo(p2.x) < 0 && p1.y.compareTo(p2.y) < 0) {
                leftBottom = p1;
                rightTop = p2;
                leftTop = new Point(p1.x, p2.y);
                rightBottom = new Point(p2.x, p1.y);
            }
            if (p1.x.compareTo(p2.x) < 0 && p1.y.compareTo(p2.y) > 0) {
                leftTop = p1;
                rightBottom = p2;
                leftBottom = new Point(p1.x, p2.y);
                rightTop = new Point(p2.x, p1.y);
            }
            if (p1.x.compareTo(p2.x) > 0 && p1.y.compareTo(p2.y) < 0) {
                rightBottom = p1;
                leftTop = p2;
                rightTop = new Point(p1.x, p2.y);
                leftBottom = new Point(p2.x, p1.y);
            }
            if (p1.x.compareTo(p2.x) > 0 && p1.y.compareTo(p2.y) > 0) {
                rightTop = p1;
                leftBottom = p2;
                rightBottom = new Point(p1.x, p2.y);
                leftTop = new Point(p2.x, p1.y);
            }
        }

        Point leftBottom;
        Point rightBottom;
        Point rightTop;
        Point leftTop;

        /**
         * Check if the point is within this rectangle
         * @param p the point
         * @return <code>true</code> if it's in the rectangle, <code>false</code> otherwise
         */
        public boolean contains(Point p) {
            return p.x.compareTo(leftBottom.x) >= 0 &&
                    p.x.compareTo(rightTop.x) <= 0 &&
                    p.y.compareTo(rightTop.y) <= 0 &&
                    p.y.compareTo(leftBottom.y) >= 0;
        }

        /**
         * Check if the target rectangle is within this rectangle, which means all the points is within this rectangle
         * @param r the target rectangle
         * @return <code>true</code> if it's in the rectangle, <code>false</code> otherwise
         */
        public boolean contains(Rectangle r) {
            // it's enough to check leftBottom & rightTop only
            return contains(r.leftBottom) && contains(r.rightTop);
        }

        /**
         * Calculate the area it covers
         * @return the area
         */
        public BigDecimal getArea() {
            BigDecimal yGap = rightTop.y.subtract(leftBottom.y);
            BigDecimal xGap = rightTop.x.subtract(leftBottom.x);
            return yGap.multiply(xGap);
        }

        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append("LeftBottom=");
            sb.append(leftBottom);
            sb.append(",RightBottom=");
            sb.append(rightBottom);
            sb.append(",RightTop=");
            sb.append(rightTop);
            sb.append(",LeftTop=");
            sb.append(leftTop);
            return sb.toString();
        }
    }

}

JAVA 相交矩形面积  平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积.输入格式  输入仅包含 怎样求坐标系中两个相交矩形的相交面积啊?【问题描述】平面上有两个矩形A和B,其位置是任意的.编程求出其相交部分(如图中阴影部分)的面积【输入形式】从标准输入读取两行以空格分 求矩形相交的面积c语言(急)求平面上两个正方形相交的面积.给出两个正方形的各个顶点的坐标,计算出相交部分的面积.输入为8对整数,分别依次为第一个正方形的4个顶点坐标和第二个正方 用JAVA计算一个矩形的面积? java 定义一个矩形类,有长、宽2个属性,有成员函数计算矩形的面积. 在一个图中,在平面直角坐标系中,圆A与y轴相切于原点O两个边长均为2:1的矩形彼此相邻,大矩形内接于圆A,小矩形有两个顶点在圆上,若小矩形的面积为8,则点A的坐标是—— 感激不尽,敬请包涵 平面上有n个圆,每两个圆就相交于两点,每三个圆都不相交于一点,这n个圆把平面分成多少部分? 判断两个矩形是否相交 判断两个矩形是否相交 两个平面相交时,能有多少个公共点? java编程.类. 常见平面图形(如三角形、圆、矩形和正方形等)的面积.利用抽象类,编写程序实现该java编程.类.常见平面图形(如三角形、圆、矩形和正方形等)的面积.利用抽象类,编写程序 如何判断两个矩形是否相交 如何判断两个矩形是否相交 有一个公共点的两个平面一定是相交平面对吗为什么 这个用 “java条件语句”该怎么写?平面上的两矩形物体左上角坐标分别为(x,y)和(x1,y1),两物体的宽高分别为(w,h)和(w1,h1),写出两物体在平面有重叠(部分重叠也算)的判定条件. 平面上有n个圆,其中每两个圆都相交于两点,并且每三个圆都不相交于同一点,则这n个圆将平面分成___部分. 有一个矩形abcd,连接db,e为ab上一点,连接ec,ec与db相交于o点,三角形ebo面积为2三角形boc面积为3,求阴影部分adoe的面积, 有下列说法:①平面上的线都是直线;②曲面上的线都是曲线;③两条线相交只能得到一交交点;④两个面相交只能得到一条交线.其中不正确的个数有