Python中的3D网格插值

时间:2010-11-07 09:32:17

标签: python grid interpolation

我有一个定期采样的网格,x,y,z和变量v。我想根据给定的x,y和z值进行插值。我不想使用numpy或scipy,因为它们没有安装在我将运行的平台上。

如果我可以找到周围的8个网格节点,我可以用什么数学进行插值?

由于

1 个答案:

答案 0 :(得分:2)

这实际上似乎是一个数学问题,但你也提到了Python,所以我尝试给出一些代码。您通常会使用trilinear interpolation

因此,我们假设您的网格有角(0.0, 0.0, 0.0)(max_x, max_y, max_z),并与坐标系对齐。我们分别用(n_x, n_y, n_z)表示每个轴的单元格数,用(x, y, z)表示要评估的点(所有类型float)。那么你的逻辑可能类似于

a_x = x * n_x / max_x
a_y = y * n_y / max_y
a_z = z * n_z / max_z
i_x = math.floor(a_x)
i_y = math.floor(a_y)
i_z = math.floor(a_z)
l_x = a_x - i_x
l_y = a_y - i_y
l_z = a_z - i_z

现在,8个相邻网格顶点的索引为(i_x, i_y, i_z)(i_x+1, i_y, i_z)(i_x, i_y+1, i_z),...,(i_x+1, i_y+1, i_z+1)。网格单元格中您的点的本地坐标为(l_x, l_y, l_z)。与链接的维基百科文章一起,这应该让你去(注意那里的符号不同)。