Python中两条线段的交点



不同的文章已经讨论过Python中两条线段的相交,例如

如何计算两条直线的交点?

Numpy和line的交点,

如何检查两个段是否相交?

但是,没有人使它完美,因为,他们没有涵盖一个特殊的情况。给定以下两个线段:

a = [(0, 2), (2, 4)]
b = [(-2, 0), (0, 2)]

这两条线段斜率相同。事实上,它们相交于(0, 2)。怎样才能得到这样的交点呢?

我的问题的第二部分,如果两个线段重叠(部分/完全)怎么办?也就是说,

a = [(0, 2), (2, 4)]
b = [(-2, 0), (1, 3)]

在您的最后一个参考中,如果A1 == A2由于线是平行的事实,第一个答案返回False。你给出了一个合理的边缘情况,所以如果这两条线是平行的,你所需要做的就是检查它们是否在同一条线上。这是通过检查b1 == b2是否。只有当此条件为False时,返回False,因为线段是平行的,但不位于同一超平面上。否则,按照答案所指定的继续,这是通过检查两个片段是否有一个共同点来实现的。

规范" 2D中两条线段的交点";作为一个计算问题是相当不完整的。

主要缺少的是输入情况的说明,以及您希望它们在结果中如何报告:

  1. 一个退化的LineSeg作为输入

  2. 无交点

  3. 无限个交点

    a) LS1和LS2是相同的(见下文)

    b) LS1和LS2重叠大于1点

  4. LS1和LS2共享一个共同的endPt

  5. 单一交点i不同于任何endPt

此外,您需要定义在计算两个近似点p1和p2时可以容忍多少有限精度算术误差(epsilon),这是完全指定情况0,2,3和4所需的关键细节。