计算两个矩形的交叉面积 (Java实现)

本文提供一个Java程序,计算平面上两个平行于坐标轴的矩形的交叉面积。

问题描述

给定两个矩形,它们的边平行于直角坐标系的 X 轴或 Y 轴。每个矩形由其一对相对顶点的坐标确定。要求计算这两个矩形的交叉面积。

输入格式

输入包含两行,每行描述一个矩形。 每行包含四个以空格分隔的实数,表示矩形一对相对顶点的坐标 (x1, y1) 和 (x2, y2),其中 -10^7 <= x1, y1, x2, y2 <= 10^7。

输出格式

输出一个实数,表示两个矩形的交叉面积,保留两位小数。

样例

输入:

1 1 3 3
2 2 4 4

输出:

1.00

Java代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取第一个矩形的坐标
        double x1 = scanner.nextDouble();
        double y1 = scanner.nextDouble();
        double x2 = scanner.nextDouble();
        double y2 = scanner.nextDouble();

        // 读取第二个矩形的坐标
        double x3 = scanner.nextDouble();
        double y3 = scanner.nextDouble();
        double x4 = scanner.nextDouble();
        double y4 = scanner.nextDouble();

        // 计算交叉面积
        double overlapArea = calculateOverlapArea(x1, y1, x2, y2, x3, y3, x4, y4);

        // 输出结果
        System.out.printf('%.2f', overlapArea);

        scanner.close();
    }

    public static double calculateOverlapArea(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) {
        double overlapWidth = Math.min(x2, x4) - Math.max(x1, x3);
        double overlapHeight = Math.min(y2, y4) - Math.max(y1, y3);
        
        // 相交矩形的宽度和高度必须大于0才存在交叉面积,否则交叉面积为0
        if (overlapWidth <= 0 || overlapHeight <= 0) {
            return 0.0;
        }
        
        return overlapWidth * overlapHeight;
    }
}

解释

  1. 程序首先从标准输入读取两个矩形的坐标信息。
  2. calculateOverlapArea 函数计算两个矩形的交叉面积。
    • 它首先计算交叉矩形的宽度和高度。
    • 如果宽度或高度小于等于0,则说明两个矩形没有交叉,返回0.0。
    • 否则,返回宽度和高度的乘积作为交叉面积。
  3. 主函数调用 calculateOverlapArea 函数计算交叉面积,并将结果保留两位小数输出到标准输出。

总结

本文介绍了一种使用 Java 计算两个平行于坐标轴的矩形交叉面积的方法,并提供了完整的代码实现。该算法简单易懂,可以方便地应用于实际问题中。


原文地址: https://www.cveoy.top/t/topic/cry8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录