【发布时间】:2018-03-02 02:13:04
【问题描述】:
我正在尝试将二次平面拟合到 python 中的数据点云。我的平面函数的形式是
f(x,y,z) = a*x**2 + b*y**2 + c*x*y + d*x + e*y + f - z
目前,我的数据点没有与之相关的错误,但是,如有必要,可以假设一些错误。根据here 的建议,我计算出从点 p0=(x0,y0,z0) (对应于我的数据点)到平面上点 p=(x,y,z) 的垂直距离987654322@。然后我结束了
def vertical_distance(params,p0):
*** snip ***
nominator = f + a*x**2 + b*y**2 + c*x*y - x0*(2*a*x-c*y-d) - y0*(2*b*y-c*x-e) + z0
denominator = sqrt((2*a*x+c*y+d)**2 + (2*b*y+c*x+e)**2 + (-1)**2)
return nominator/denominator
最终,我认为我需要最小化的是 vertical_distance 函数。我可以很高兴地提供一个起始参数列表(参数)和二维数据指向它的数组,但是,我不确定如何在 3D 中实现这一点。 ODR 包似乎只允许包含 x、y 或二维的数据。此外,如何将平面 (p) 上的点实现到最小化例程中?我猜在拟合操作期间,点会根据参数优化而变化,因此此时平面的精确方程也会有所不同。
【问题讨论】:
-
这些链接用于线性平面。
标签: python python-2.7 math 3d data-fitting