在3D空间中插值标量场
我有一个三维空间(x, y, z),在每个点上还有一个额外的参数(能量),所以总共有四个维度的数据。
我想找到一组x、y、z的点,这些点对应于通过已知点之间的插值找到的等能量面。
这个空间网格的间距是固定的,完全包围了等能量面,但它并不是一个立方体的空间(这个网格大致占据了一个圆柱形的空间)。
速度不是特别关键,我可以让这个计算过程慢一点。虽然我是在用Python和NumPy编程,但我也可以用FORTRAN写部分代码。如果有现成的C/C++/FORTRAN库,我也可以把它们封装起来在脚本中使用。
到目前为止,我在网上(以及《数值食谱》一书中)找到的所有示例和算法都没有涉及到四维数据。
3 个回答
1
为什么不试试四线性插值呢?
四线性插值就是在三线性插值的基础上再增加一个维度。只要你的数据适合用线性插值模型来处理,这种方法应该就能奏效。
2
因为你有一个间距固定的空间网格,所以你可以找到等值面两边的所有邻居。选择一种插值方法(可以参考Reed Copsey的回答),然后在每对邻居之间的连线上寻找根。
8
这里有很多选择……
为了把你的能量数据放进网格里,你需要用到某种插值方法。谢泼德方法是一种常见且相对简单的实现方式,如果你的数据分布合理,它通常效果不错。
完成这一步后,你还需要进行一些形式的等值面生成。
市面上有一些库可以让这个过程变得简单。其中最著名的就是VTK,它包含了Python的接口,并且有完成这两个步骤所需的所有工具。
如果想了解如何在VTK中实现这些功能,可以查看vtkShepardMethod和vtkContourFilter的详细信息。