【发布时间】:2021-08-18 08:47:14
【问题描述】:
我正在处理一项任务(使用 python3),该任务需要检查 2 个线段是否重叠并可以返回 2 个端点。线段的坐标为(x1,y1,x2,y2)形式,其中(x1,y1)和(x2,y2)是其端点的坐标。 两条线彼此非常接近,但可能不平行。可以看图了解哪种情况称为重叠。我认为重叠定义可以说是“如果一个点的投影位于另一条线的两个端点之间” 示例:
overlap1 = numpy.array([[1,4,5,5], [7,7,3,5]])
overlap2 = numpy.array([[8,1,12,2], [9,2,11,3]])
non_overlap = numpy.array([[1,2,5,3], [6,3,9,4]])
我的目标是找到 4 个点中最远的 2 个点(如果它们重叠),如图中的红色圆圈所示。目前我的想法是:
- 计算到所有点的距离(AB、AC、AD、BC、BD、CD)和 检查以找到最大距离,称为 max_len
- 计算:test = len_AB + len_CD - max_len
- 如果 test > 0,它们是重叠的,否则它们不是
这个算法可以很好地检查重叠情况,但很难返回 2 个最多的端点。
你怎么看这个问题?谢谢。
【问题讨论】:
-
从该图中看起来,“不重叠”部分中的第二个示例也是重叠(如果您扩展 B,它将位于 C 和 D 之间)。
-
你能显示这些线的实际点吗?而不是 x1、y1 等,IOW,输入为有效元组,输出为有效元组
-
我认为这听起来像是一道数学题,而不是 Python 编码程序。
-
@Selcuk 这是完整的线,我正在工作的是线段,受其两端的限制。因此,如果一个点的投影位于另一条线的 2 个点之间,则可以看到重叠。
-
@python_user 我已经包含了行示例。
标签: python geometry language-agnostic line