Python 中两条线段的交点

Intersection of two line segments in Python

不同的文章讨论了Python中两条线段的交点,例如

How do I compute the intersection point of two lines?,

Numpy and line intersections,

How can I check if two segments intersect?

但是,没有人做到完美,因为他们没有涵盖特殊情况。给定以下两条线段:

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

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

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

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

在您上次参考中,第一个答案 returns False if A1 == A2 因为线是平行的。你提出了一个合法的边缘案例,所以如果两条线平行,你需要做的就是检查它们是否都位于同一条线上。这是通过检查 b1 == b2。仅当此条件为 False、return 时为假,因为线段平行但不位于同一超平面上。否则,按照答案指定继续,这是通过检查两个段是否有共同点。