【问题标题】:Why does the "intersectLine" method in Java give me a false result?为什么 Java 中的“intersectLine”方法会给我一个错误的结果?
【发布时间】:2019-12-21 14:24:00
【问题描述】:

对于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));
    }

}

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

这是我的错误还是错误?

【问题讨论】:

  • 说矩形的角是(2,7)(7,7)(7,8)(2,8) 是否正确,或者我在这里遗漏了什么?
  • Y轴是向下->向上还是向上->向下?这是非常重要的。换种方式问:你的坐标系的原点在哪里,在屏幕的底部还是右上角?高度是向上延伸还是向下延伸?如果它向上延伸,你的线是相交的(它正好位于上边界上)
  • 我的意思当然是“左上角”facepalm

标签: java computational-geometry rectangles


【解决方案1】:

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

这个类与所有 Java 2D API 一样,使用称为用户空间的默认坐标系,其中 y 轴值向下增加,x 轴值向右增加。 p>

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

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

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

【讨论】:

    【解决方案2】:

    阅读 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 package ,我相信矩形相交并且没有错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 2013-03-09
    • 2015-03-19
    • 2013-10-01
    相关资源
    最近更新 更多