给定(X,Y,Z)坐标中的一组点是表面上的点,我希望能够在任意(X,Y)坐标处插值Z值.我发现使用mlab.griddata在网格上插值可以获得一些成功,但我希望能够为任何(X,Y)坐标调用通用函数.
这组点形成一个大致半球形的表面.为了简化问题,我试图编写一种方法,在下面的x,y和z坐标定义的半球的已知点之间插值.虽然有一个分析解决方案可以找到完美球体的z = f(x,y),这样你就不需要插值,实际的点集将不是一个完美的球体,所以我们应该假设我们需要在未知(X,Y)坐标处插值.使用点数据链接到IPython笔记本
resolution = 10
u = np.linspace(-np.pi / 2, np.pi / 2, resolution)
v = np.linspace(0, np.pi, resolution)
U, V = np.meshgrid(u, v)
xs = np.sin(U) * np.cos(V)
ys = np.sin(U) * np.sin(V)
zs = np.cos(U)
Run Code Online (Sandbox Code Playgroud)
我一直在使用scipy.interpolate.interp2d,它"返回一个函数,其调用方法使用样条插值来查找新点的值."
def polar(xs, ys, zs, resolution=10):
rs = np.sqrt(np.multiply(xs, xs) + np.multiply(ys, ys))
ts = np.arctan2(ys, xs)
func = interp2d(rs, ts, zs, kind='cubic')
vectorized = np.vectorize(func)
# Guesses
ri = np.linspace(0, rs.max(), resolution)
ti = np.linspace(0, np.pi * …Run Code Online (Sandbox Code Playgroud)