我正在进行一项任务(使用python3),该任务需要检查两条线段是否重叠,并可以返回两个端点。线段具有(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个点(如果它们重叠),如图中红色圆圈所示。目前我的想法是:
这个alg可以很好地检查重叠情况,但很难返回最接近的两个端点
你对这个问题怎么看?多谢各位
考虑下一个计算点{^}投影到^ {CD2>}线段相对位置的代码。它使用点(标量)积
当段实际上是一个点时返回
None
当投影位于段内时返回参数
0..1
如果投影位于线段以外的直线上,则返回此间隔以外的值。所以负值和
> 1
表示红色圆圈点(带有其他点名称的图片)
看起来您只是在使用x坐标,因此如果A<;C<;B<;D或A<;C<;D<;B ir重叠,否则不会重叠(例如A<;B<;C<;D)
谢谢你阅读我的问题。我认为这更像是一个数学问题而不是编程问题,但过了一段时间,我找到了一个很好的简单算法来处理它。我的解决方案在很大程度上基于python中的numpy数组,以实现高效的计算。我不确定是否有更好的方法使用更多的数学方法,但希望这个解决方案在将来仍然有用
其思想是从所有点组合中找出距离(从4个点中找出6个距离)。我创建了一个组合的numpy数组,找到欧几里德距离,找到与它的最大距离,然后按条件检查重叠:len_AB+len_CD-max(距离)
相关问题 更多 >
编程相关推荐