我需要一个好的算法来计算最接近python中的一组线的点,最好使用最小二乘法。我在一个不能工作的python实现上找到了这篇文章:
Finding the centre of multiple lines using least squares approach in Python
我在Matlab里找到了大家都喜欢的资源。。。但我不知道如何将其转换为python:
https://www.mathworks.com/matlabcentral/fileexchange/37192-intersection-point-of-lines-in-3d-space
我觉得很难相信有人还没有这么做。。。当然,这是numpy的一部分或是一个标准包,对吧?我可能只是找不到合适的术语,但我还没找到。我可以用两个点或者一个点和一个方向来定义线。任何帮助将不胜感激!在
下面是我正在使用的一组示例点:
第一组直线的初始XYZ点
array([[-7.07107037, 7.07106748, 1. ],
[-7.34818339, 6.78264559, 1. ],
[-7.61352972, 6.48335745, 1. ],
[-7.8667115 , 6.17372055, 1. ],
[-8.1072994 , 5.85420065, 1. ]])
属于第一组直线的角度
^{pr2}$第二组直线的初始XYZ点
array([[ 0., -20. , 1. ],
[ 7.99789129e-01, -19.9839984, 1. ],
[ 1.59830153e+00, -19.9360366, 1. ],
[ 2.39423914e+00, -19.8561769, 1. ],
[ 3.18637019e+00, -19.7445510, 1. ]])
属于第二组线的角度
[89.13244, 92.39087, 94.86425, 98.91849, 99.83488]
解决方案应该是原点或者离原点很近(数据只是有点嘈杂,这就是为什么直线不能在一个点上完全相交)。在
这是我最后使用的代码。感谢kevinkayaks和其他回应的人!非常感谢你的帮助!!!在
此函数的前半部分只是将点和角度的两个集合转换为方向向量。我相信剩下的基本上和埃里克和尤金的提议是一样的。我只是碰巧在Kevin's上取得了成功,并一直坚持到它对我来说是一个端到端的解决方案。在
如果this wikipedia equation有任何重量:
然后您可以使用:
如果你想从第一原理推导/检验这个等式,那么math.stackexchange.com网站会是一个更好的问的地方。在
请注意,numpy已经为您提供了足够的工具来非常简洁地表达这一点
下面是一个使用this link中描述的方法的numpy解决方案
工程
编辑:这里有一个噪声测试数据发生器
^{pr2}$相关问题 更多 >
编程相关推荐