You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中矩形交集的高度与面积计算错误问题排查

问题原因分析

你的核心错误是对Java的Rectangle构造函数参数理解有误,导致矩形的垂直位置和范围完全偏离需求,进而造成交集高度计算错误。

Java的Rectangle(int x, int y, int width, int height)参数定义明确:

  • x:矩形左上角的x坐标
  • y:矩形左上角的y坐标
  • width:矩形向右延伸的宽度(允许负数值,会自动调整为正并修正x位置)
  • height:矩形向下延伸的高度(允许负数值,会自动调整为正并修正y位置)

而你的输入坐标是数学坐标系的左下角(x1,y1)和右上角(x2,y2)(y轴向上),直接用y2作为左上角y、y2 - y1作为高度,会导致矩形的垂直范围完全错误:

  • 你构造的矩形y范围是从y2向下延伸y2 - y1长度,覆盖区间为[y2, y2 + (y2 - y1)]
  • 但题目中实际需要的矩形y范围是[y1, y2](y轴向上)

这就解释了为什么board的面积计算正确(getWidth()和getHeight()返回绝对值),但交集计算错误——因为两个矩形的垂直位置完全不匹配。

修复方案

将所有矩形的构造参数统一调整为符合Java Rectangle的坐标逻辑,同时匹配题目中的矩形范围,两种可行方式如下:

方式1:反转y轴统一坐标体系

通过反转y值,将题目中y轴向上的坐标转换为Java默认的y轴向下体系:

// 题目中(x1,y1)=左下,(x2,y2)=右上,反转y轴后构造矩形
Rectangle board1 = new Rectangle(b1x1, -b1y2, b1x2 - b1x1, b1y2 - b1y1);
Rectangle board2 = new Rectangle(b2x1, -b2y2, b2x2 - b2x1, b2y2 - b2y1);
Rectangle truck = new Rectangle(tx1, -ty2, tx2 - tx1, ty2 - ty1);

方式2:直接匹配矩形覆盖范围

忽略坐标系方向,确保所有矩形的构造逻辑一致,让Rectangle的覆盖范围与题目完全对应:

// 直接用题目中的左下(x1,y1)作为Java矩形的左上,高度取题目中矩形的垂直长度
Rectangle board1 = new Rectangle(b1x1, b1y1, b1x2 - b1x1, b2y2 - b1y1);
Rectangle board2 = new Rectangle(b2x1, b2y1, b2x2 - b2x1, b2y2 - b2y1);
Rectangle truck = new Rectangle(tx1, ty1, tx2 - tx1, ty2 - ty1);

关键注意点:所有矩形(board1、board2、truck)必须使用相同的构造方式,否则intersection方法无法正确计算交集。

验证方法

修复后可以打印矩形参数确认范围是否正确:

System.out.println("board1: x=" + board1.x + ", y=" + board1.y + ", 宽=" + board1.width + ", 高=" + board1.height);
System.out.println("交集tb1: x=" + tb1.x + ", y=" + tb1.y + ", 宽=" + tb1.width + ", 高=" + tb1.height);

内容的提问来源于stack exchange,提问作者Dolfinwu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:12:08