在网格上插值的最佳算法

时间:2012-10-20 15:03:07

标签: algorithm interpolation

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

3 个答案:

答案 0 :(得分:1)

如果您想自己实施数学方法,当然需要学习理论。在这种情况下,它是 3D散乱数据插值

WikipediaMATLAB helpscipy help表示至少有六种不同的方法。 WP对它们有相当好的描述,并且有一个comparison article但我强烈建议你用这种术语密集的主题用你的母语找到一些东西。

答案 1 :(得分:1)

一种方法是形成散乱点[x,y,z]的Delaunay三角剖分(实际上是你的三维情形中的四面体化!),并使用四面体定义的密度场的线性表示在每个元素内执行插值。顶点。

要评估每个结构化网格点的密度,您可以(i)确定该点位于哪个四面体内,以及(ii)评估线性插值。

形成Delaunay三角剖分并非易事,根据您选择的语言,有一些可用于此的好库。一个不错的选择是CGAL

希望这有帮助。

答案 2 :(得分:1)

如果你有某种标量场并且点是场的起源,你可以通过遍历所有格点并计算给定源的场强来实现强力逼近。有两种递归方法允许“消隐”字段或多或少不变的大容量,以及通过计算从一个点到下一个点的变化来节省一些CPU时间的技术。

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

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

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