在三维空间中插值一个标量场

8

我有一个3D空间(x,y,z),每个点都有一个额外的参数(能量),总共提供了4个维度的数据。

我想找到一组对应于通过已知点之间的插值找到的等能面的x、y、z点。

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

速度不是关键,我可以花一些时间进行计算。虽然我在使用Python和NumPy编码,但我可以用FORTRAN编写部分代码。如果存在这样的库,我也可以包装现有的C/C++/FORTRAN库以供脚本使用。

我目前在网上和Numerical Recipes中找到的所有示例和算法都停留在4D数据之前。


顺便提一句,Numerical Receipes在最新版本中有算法可以处理这个问题。你仍然只需要处理3D数据,即存储在单个3D位置的数据。Numerical Receipes中的所有径向基函数插值器都适用于此,并且在3D中进行了讨论(大多数可扩展到nD)。 - Reed Copsey
是的,你说得对。我的版本是1992年的,但它确实提供了nD插值的配方(或2D类比),前提是网格在“矩形阵列的顶点处具有表格函数值”。我曾经认为,由于网格(尽管在细节层面上是均匀间隔的,具有矩形周期性)填充了一个大致圆柱形的空间,因此这些技术不适用。 - Brendan
3个回答

8

这里有几个选项...

为了将能量输入到您的网格中,您需要使用某种形式的插值。 Shepard方法是一种常见且相对简单的实现方法,如果您的数据分布合理,则往往效果良好。

完成后,您需要进行某种形式的等值面生成。

有一些库可以使此过程变得更加轻松。 最值得注意的是,VTK包括python封装程序,并具有执行这两个步骤所需的所有工具。

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


2

由于您具有等间距的空间网格,因此可以在等值面的相对侧面上识别所有邻居。选择某种形式的插值(参见Reed Copsey的答案),并沿每个这样的邻居之间的线执行根查找。


1

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

通过增加另一个维度来扩展三线性插值。只要线性插值模型适合您的数据,它就应该可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接