对于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)下方,因此它们不能相交。
这是我的错误还是错误?
答案 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)
开始的直线相交,该直线形成在矩形下方( 视觉上 )