我有一个3D空间(x,y,z),每个点都有一个附加参数(能量),总共给出了4个数据维度。
我想找到一组x,y,z点,这些点对应于通过在已知点之间插值找到的等能量表面。
空间网格具有恒定的间距并完全包围等能量表面,但是,它不占据立方体空间(网格占据大致圆柱形的空间)
速度并不重要,我可以让这个数字嘎吱嘎吱一会儿。虽然我用Python和NumPy进行编码,但我可以在FORTRAN中编写部分代码。如果存在这样的库,我还可以包装现有的C / C ++ / FORTRAN库以供脚本使用。
到目前为止,我在网上(以及数字食谱中)找到的所有示例和算法都没有4D数据。
答案 0 :(得分:8)
这里有很多选择...
为了让你的能量进入你的网格,你需要使用某种形式的插值。 Shepard's method是一种常见且相当简单的实施方法,如果您的数据分布合理,则可以很好地运作。
完成后,您需要进行某种形式的isosurface代。
有一些图书馆可以让这很容易。最值得注意的是,VTK包含python包装器,并具有执行这两个步骤所需的所有工具。
有关如何在VTK中完成此操作的详细信息,您可以查看vtkShepardMethod和vtkContourFilter。
答案 1 :(得分:2)
由于您的空间网格具有恒定间距,因此您可以识别等值面相对两侧的所有邻居。选择某种形式的插值(q.v. Reed Copsey的答案)并沿着每个这样的邻居之间的线进行寻根。
答案 2 :(得分:1)
为什么不尝试四线性插值?
通过另一个维度扩展三线性插值。只要线性插值模型适合您的数据,它就应该有效。