【问题标题】:Interpolating a scalar field in a 3D space在 3D 空间中插值标量场
【发布时间】:2010-12-30 15:21:25
【问题描述】:

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

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

空间网格具有恒定的间距,完全围绕等能面,但不占据立方空间(网格占据大致圆柱空间)

速度并不重要,我可以暂时搁置这个数字。尽管我使用 Python 和 NumPy 进行编码,但我可以在 FORTRAN 中编写部分代码。如果存在这样的库,我还可以包装现有的 C/C++/FORTRAN 库以在脚本中使用。

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

【问题讨论】:

  • 顺便说一句 - 数字收据在最新版本中有涵盖这一点的算法 - 您仍然只处理 3D 数据,即:存储在单个 3D 位置的数据。 Numerical Receipes 中的所有径向基函数插值器都适用于此,并在 3D 中进行讨论(大多数扩展到 nD)。
  • 是的,你是对的。我的版本是 1992 年,但它确实提供了 nD 插值的方法(或 2D 类比),前提是网格具有“列表函数值......在矩形阵列的顶点”。我的印象是,由于网格(诚然,在精细级别上,以矩形周期性均匀分布)填充了一个大致圆柱形的空间,而这些技术将不适用。

标签: python algorithm interpolation


【解决方案1】:

这里有很多选择...

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

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

有一些库可以让这变得简单。最值得注意的是,VTK 包括 python 包装器,并拥有执行这两个步骤所需的所有工具。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      将三线性插值扩展到另一个维度。只要线性插值模型适合您的数据,它就可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多