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

Why does the "intersectLine" method in Java give me a false result?

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 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) 开始的一条线相交,该线形成在矩形下方(视觉上

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

上的文档

This class, like all of the Java 2D API, uses a default coordinate system called user space in which the y-axis values increase downward and x-axis values increase to the right.

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

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

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