不同的文章已经讨论过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中两条线段的交点";作为一个计算问题是相当不完整的。
主要缺少的是输入情况的说明,以及您希望它们在结果中如何报告:
-
一个退化的LineSeg作为输入
-
无交点
-
无限个交点
a) LS1和LS2是相同的(见下文)
b) LS1和LS2重叠大于1点
-
LS1和LS2共享一个共同的endPt
-
单一交点i不同于任何endPt
此外,您需要定义在计算两个近似点p1和p2时可以容忍多少有限精度算术误差(epsilon),这是完全指定情况0,2,3和4所需的关键细节。