为什么 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 的左侧部分)。
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 的左侧部分)。