插值3D空间中的标量场

时间:2009-12-28 23:46:15

标签: python algorithm interpolation

我有一个3D空间(x,y,z),每个点都有一个附加参数(能量),总共给出了4个数据维度。

我想找到一组x,y,z点,这些点对应于通过在已知点之间插值找到的等能量表面。

空间网格具有恒定的间距并完全包围等能量表面,但是,它不占据立方体空间(网格占据大致圆柱形的空间)

速度并不重要,我可以让这个数字嘎吱嘎吱一会儿。虽然我用Python和NumPy进行编码,但我可以在FORTRAN中编写部分代码。如果存在这样的库,我还可以包装现有的C / C ++ / FORTRAN库以供脚本使用。

到目前为止,我在网上(以及数字食谱中)找到的所有示例和算法都没有4D数据。

3 个答案:

答案 0 :(得分:8)

这里有很多选择...

为了让你的能量进入你的网格,你需要使用某种形式的插值。 Shepard's method是一种常见且相当简单的实施方法,如果您的数据分布合理,则可以很好地运作。

完成后,您需要进行某种形式的isosurface代。

有一些图书馆可以让这很容易。最值得注意的是,VTK包含python包装器,并具有执行这两个步骤所需的所有工具。

有关如何在VTK中完成此操作的详细信息,您可以查看vtkShepardMethodvtkContourFilter

答案 1 :(得分:2)

由于您的空间网格具有恒定间距,因此您可以识别等值面相对两侧的所有邻居。选择某种形式的插值(q.v. Reed Copsey的答案)并沿着每个这样的邻居之间的线进行寻根。

答案 2 :(得分:1)

为什么不尝试四线性插值?

通过另一个维度扩展三线性插值。只要线性插值模型适合您的数据,它就应该有效。