这两行是有效的点,但是当我运行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"
答案 0 :(得分:2)
The Oracle Java test uses cross products确定每个分段的端点是否跨越另一个分段所嵌入的无限线。如果这是真的,则说明这些线相交。
问题是,对于重合的终点,交叉产品会退化为零,并且跨越"跨越"跨越"在被测点接触线的情况下,即当叉积为零时,测试全部返回true。
因此,作为输入提供的两个点将始终返回true。
几何解释是"线"由两个重合点定义的始终跨越任何其他点。因此,两条零长度线具有相互跨越的端点。
这可能不直观,但它是一致的。大量的几何算法在degeneracies周围做了一些古怪的事情。如果你不喜欢这种行为,请包装该函数并返回所需内容。