我有两个三维点数组,我需要一个函数来告诉我一个数组到下一个数组之间的最小距离。
我尝试使用np.linalg.norm来计算曲线上一个点与另一个曲线上每个点之间的距离,然后取最小值,但运行时间非常长,而且&# 39;不是很优雅。
结果,我试图将n次多项式拟合到两个数组并将它们转换为多项式函数。
此处the link to the polynomial fit
这里[指向rawdata的链接](
https://storage.googleapis.com/pythonstackflowquestion/TestData.csv)
列WB标记单独的数组。
我希望得到这样的功能
def间距(WB1,WB2) return(间距)
其中WB1是n乘3阵列,WB2是z乘3阵列,间距是n乘1阵列。
如果我要说间距(WB2,WB1)
然后我希望将间距作为m乘1的数组。
答案 0 :(得分:0)
根据你所说的我推断你是拟合三次多项式(在3D中)并且想要最小化两个立方弧之间的距离。
如果参数方程分别为P(u)
和Q(v)
,您希望最小化|P(u)-Q(u)|²
,这是u
和v
中度数为6的多项式。要在单位平方中最小化它,您需要考虑角点(离散值),沿边缘(1D最小化)和域内(2D最小化)的值。
2D最小化问题是最难的。它需要确定系统的解决方案
P'(u).(P(u) - Q(v) = 0
Q'(v).(P(u) - Q(v) = 0
(其中.
是点积)。
这是一个令人不安的数值问题,与直接解决两个点集上的初始问题相比,我认为没有真正的好处。
我建议使用最近邻搜索加速器(如kD树)组织一条曲线的点,并计算到第二条曲线的所有点的最短距离。通过使用加速设备,可以将复杂度从O(N²)降低到大约O(N Log N)。
在计算几何中,在点集中找到最近邻居对的问题是众所周知的,并且在时间O(N Log N)中的最坏情况最优解是经典的。
在你的情况下,你正在寻找最接近的一对,成员在两个不同的子集中。在计算几何中,这可能被称为“最接近的红黑点对”问题或类似问题。我找不到它的痕迹。