algorithm - 在网格上插值的最佳算法

标签 algorithm interpolation

我有一个设定点,其坐标由数组 xyz 以及每个中的密度场值给出点存储在数组 d 中。 我想在均匀的网格上重建密度场。最好的算法是什么? 我知道在 python 中,scipy 模块与 griddata 函数一起派上用场,但我想编写自己的代码,我只需要一个提示。

最佳答案

如果您有某种标量场,并且这些点是场的原点,您可以通过遍历所有格点并计算给定源的场强来实现强力方法。有两种递归方法允许在场或多或少恒定的情况下“消隐”宽体积,以及通过计算从一个点到下一个点的变化来节省一些 CPU 时间的技术。

如果您拥有的点是一个值的采样,那么您将不得不分解体积空间并插入这些值。您可以使用简单的 Voronoi 分解 - 这通常在 2D 中完成以进行降水测量 - 或者 Delaunay 四面体化(您可以查看 TetGen 的文档)。第一种方法假设函数在每个 Voronoi 体积中是恒定的;最后一个允许渲染 trilinear interpolation .

如果您需要平滑 3D 网格,三线插值看起来是最好的方法。

还有其他用于快速可视化的方法,包括维护一个 3D 点列表,按照与常规网格中任何给定点的距离顺序排列。在网格中移动时,您使用二次增量重新计算距离。然后,根据所选基数点的子集执行简单插值(即,如果考虑距离为 d1..d4 的四个最近点,您将通过按比例加权值 v1..v4 来计算 P 中的值) .这种方法快速且易于自己实现,但请注意,只要点之间的最小距离小于晶格步长,它就会表现不佳(您可以通过考虑发生这种情况的更多点来补偿;如果采样,则效果不太明显函数在相同尺度下是平滑的)。

关于algorithm - 在网格上插值的最佳算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989706/

相关文章:

java - 如何在 Java 中执行分组依据(sql)

algorithm - 找到非冲突子集的确定性最佳选择

java - 从三点定义曲线

python - 如何 "stretch"我的数据帧并在现有值之间进行插值

python - Pandas 中的 Groupby 和插值

python - xarray的interp nearest方法如何选择最近的中心?

c++ - "Search words/strings in Matrix of Char"算法的复杂度

java - 在 Java 中使用字符串数组作为 Vector 的元素

javascript - 我们如何在 Javascript 游戏中实现人工智能?

java - 在java中插入字符串