Java Line2D linesIntersect已损坏

时间:2016-06-21 00:18:22

标签: java math geometry line

这两行是有效的点,但是当我运行lineIntersects方法时,我得到" true"作为一个返回值,有谁知道发生了什么或这是一个错误?这是documentation link,这里是source,当这可能失败时,都没有警告特殊情况。

import java.awt.geom.*;
public class Test {
  public static void main(String[] args) {

    //                              x1,  y1,  x2,  y2
    Line2D l1 = new Line2D.Double( 1.0, 1.0, 1.0, 1.0 );
    Line2D l2 = new Line2D.Double( 2.0, 2.0, 2.0, 2.0 );

    System.out.println(l1.intersectsLine(l2)); // true

  }
}

仅供参考我正在运行java版本" 1.8.0_74"

1 个答案:

答案 0 :(得分:2)

The Oracle Java test uses cross products确定每个分段的端点是否跨越另一个分段所嵌入的无限线。如果这是真的,则说明这些线相交。

问题是,对于重合的终点,交叉产品会退化为零,并且跨越"跨越"跨越"在被测点接触线的情况下,即当叉积为零时,测试全部返回true。

因此,作为输入提供的两个点将始终返回true。

几何解释是"线"由两个重合点定义的始终跨越任何其他点。因此,两条零长度线具有相互跨越的端点。

这可能不直观,但它是一致的。大量的几何算法在degeneracies周围做了一些古怪的事情。如果你不喜欢这种行为,请包装该函数并返回所需内容。