我有一个设定点,其坐标由数组 x
、y
和 z
以及每个中的密度场值给出点存储在数组 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/