为什么Java中的“ intersectLine”方法给我一个错误的结果?

问题描述 投票:0回答:2

对于Java中的个人项目,我必须确定线段是否与矩形的内部相交。我使用了来自java.awt.geom的Rectangle2D.Double,但显然,“ intersectsLine”方法应能够准确地执行我想要的操作,但不会给出正确的结果。

这里是示例代码:

import java.awt.geom.Rectangle2D;

public class test {

    public static void main(String[] args) {
        Rectangle2D.Double r = new Rectangle2D.Double(2, 7, 5, 1);
        System.out.println(r.intersectsLine(4, 8, 1, 8));
    }

}

这令人惊讶地打印出“ true”。我无法理解这种行为。我检查了文档,然后Rectangle构造函数期望左上角的坐标,然后是宽度和高度。然后,矩形“ r”应位于线(4,8)-(1,8)下方,因此它们不能相交。

这是我的错误还是错误?

java computational-geometry rectangles
2个回答
1
投票

阅读java awt包时会说这些:

The X values increase to the right, and Y coordinate values increase as they go down.

坐标系朝底部增加。 2,7形成upper left点。因此它将与从(4,8) to (1,8)开始的直线相交,该直线形成在矩形(visually


0
投票

java.awt.geom程序包使用的坐标系将原点(0,0)放在左上角,并且Y值向下增加。查看Line2D上的文档:

此类,像所有Java 2D API一样,使用称为用户空间的默认坐标系,其中y轴值向下增加,而x轴值向右侧增加。

您的矩形是使用角坐标构建的:

  • [Line2D-左上方
  • [(2,7)-右上]
  • (7,7)-右下
  • [(7,8)-左下]

这意味着您的线(2,8)与矩形在路径(4,8) -> (1,8)上相交(矩形的底部边缘/线的左侧)。

© www.soinside.com 2019 - 2024. All rights reserved.