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

时间:2019-12-21 14:24:00

标签: java computational-geometry rectangles

对于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)下方,因此它们不能相交。

这是我的错误还是错误?

2 个答案:

答案 0 :(得分:3)

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

  

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

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

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

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

答案 1 :(得分: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)开始的直线相交,该直线形成在矩形下方( 视觉上