我试图将一条线段拟合到一组点上,但我很难找到它的算法。我有一个二维线段L
和一组二维点C
L
可以用任何合适的方式表示(我不在乎),比如支持向量和定义向量,两点,一个左右边界的线性方程。。。唯一重要的是直线有起点和终点,所以它不是无限的
我想将L
拟合到C
,这样c
到L
(其中c
是C
中的一个点)的所有距离之和都会最小化。这是一个最小二乘问题,但我(认为)不能使用多项式拟合,因为L
只是一段。我在这方面的数学知识有点缺乏,因此如果有任何进一步阅读的提示,我也将不胜感激
以下是我的问题的一个例子:
橙色线应适合于蓝色点,以便每个点到该线的距离平方和最小。我不介意解决方案是否使用不同的语言或根本不使用代码,只要我可以从中提取算法
因为这更多的是一个数学问题,我不确定它是否适合SO,或者应该转移到交叉验证或数学交换
这里是python中的一个命题。点与线之间的距离根据此处提出的方法计算:Fit a line segment to a set of points
由于线段长度有限,因此必须使用
min
和max
函数,或者if
测试以确定我们是否必须使用垂直距离或到其中一个端点的距离,因此很难(不可能)得到解析解因此,建议的解决方案将使用优化算法来接近最佳解决方案。它使用scipy.optimize.minimize,请参见:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html
因为线段长度是固定的,所以我们只有三个自由度。在建议的解决方案中,我使用起始段点的x和y坐标以及段坡度作为自由参数。我使用
getCoordinates
函数从这3个参数和长度中获取段的起点和终点这个解决方案与已经发布在这里的解决方案相对类似,但我认为它更高效、更优雅、更容易理解,这就是为什么尽管有相似之处,我还是发布了它
如前所述,min(max(…)公式很难解析地解决此问题,这就是为什么scipy.optimize很适合
该解决方案基于https://math.stackexchange.com/questions/330269/the-distance-from-a-point-to-a-line-segment中概述的点与有限线段之间距离的数学公式
示例结果:
相关问题 更多 >
编程相关推荐