Math 在三维空间中的点之间插值以形成平滑曲面的简单方法

Math 在三维空间中的点之间插值以形成平滑曲面的简单方法,math,3d,geometry,Math,3d,Geometry,我试图想出一个简单有效的方法来创建一个光滑的曲面,它与许多给定的“样本”点相交 对于曲面上的任何X、Y点,我在4个方向的每个方向上识别最多4个采样点(X上的下一个较高点和较低点,然后是Y轴)。给定这一点,我想要一种方法来计算在4个采样点之间插值的Z值 当然,给定4个采样点中任意一个的X,Y位置,算法应该输出该点的Z值。还请注意,采样点可能少于4个 我猜4个采样点的Z值的函数,与到采样点的距离成反比,但我不知道怎么做 有没有人想到一个简单的方法来实现这一点?使用catmull rom补丁您可以使用

我试图想出一个简单有效的方法来创建一个光滑的曲面,它与许多给定的“样本”点相交

对于曲面上的任何X、Y点,我在4个方向的每个方向上识别最多4个采样点(X上的下一个较高点和较低点,然后是Y轴)。给定这一点,我想要一种方法来计算在4个采样点之间插值的Z值

当然,给定4个采样点中任意一个的X,Y位置,算法应该输出该点的Z值。还请注意,采样点可能少于4个

我猜4个采样点的Z值的函数,与到采样点的距离成反比,但我不知道怎么做


有没有人想到一个简单的方法来实现这一点?

使用catmull rom补丁

您可以使用双线性/双三次插值,但可以在三个方向上使用(分别为三线性/三次)。如果您了解这些插值形式是如何工作的,那么这是非常简单的。有关更多信息,请参见。

如果要对该点进行简单的线性插值,则中心点的Z值仅为4个相邻Z值的平均值,因为距离在Y和X上都是对称的

如果距离不是对称的,但中心点始终位于相同的X和Y线上,则可以计算Y和X插值,最终值是这些插值的平均值


所以Zc是:Zc=(Zx1+x*(Zx2-Zx1)/(x2-x1)+Zy1+y*(Zy2-Zy1)/(y2-y1))/2,其中x和y是距离x1和y1的距离。

您是在寻找曲面插值还是网格足够

对于曲面插值,我看到其他人建议使用三角剖分(例如,使用此:)


创建网格:我的一位同事使用热方程()计算给定采样点以外像素的值。这产生了非常逼真的地形表面,并行化非常简单。

您可以通过从Catmull Rom样条线构造面片来实现这一点。这些样条线将击中每个控制点,并且它们在一阶导数中是连续的(尽管不是二阶导数)。我也发现他们非常容易相处。数学很简单,它们的行为直观,控制点略有变化

                 | 0   1   0    0 | | p[i−2] |
                 |−τ   0   τ    0 | | p[i−1] |
p(u) = 1 u u2 u3 | 2τ τ−3 3−2τ −τ | | p[i]   |
                 |−τ  2−τ τ−2   τ | | p[i+1] |
在最高级别,每个面片需要16个点(在数据集的边缘,可以在同一条样条曲线中使用角点和边点两次)

首先,需要对4x4矩阵中每行的点p[i][j]进行插值,以创建一组四个中间控制点q[i]。这是我的意思的一个粗略的ASCII草图

p00 p01 q0 p02 p03
p10 p11 q1 p12 p13
p20 p21 q2 p22 p23
p30 p31 q3 p32 p33
现在,您可以在这四个中间控制点之间进行插值,以在曲面上找到最终的花键点

跨越四个点。在本例中,使用p[i-2]和p[i+1]两侧的控制点在点p[i-1]和p[i]之间插值。u是介于0到1之间的插值因子。τ定义为样条曲线上的张力,它将影响样条曲线曲面与控制点的吻合程度

                 | 0   1   0    0 | | p[i−2] |
                 |−τ   0   τ    0 | | p[i−1] |
p(u) = 1 u u2 u3 | 2τ τ−3 3−2τ −τ | | p[i]   |
                 |−τ  2−τ τ−2   τ | | p[i+1] |

注意:如何在Stackoverflow的gui中显示这一点并不明显,但u2和u3应该分别表示u平方和u立方。

使用问题中建议的方案进行插值时存在一个问题,其中最近邻的一些子集是从分散的集合中选择的,结果不一定是连续的

想想看。假设我在(x,y)平面上沿着一条平滑、连续的路径移动。只要4个最近邻不变,插值将是平滑的,无论您选择如何定义。然而,在某个时刻,最近邻的子集会突然改变。此时,必须使插值在边界上保持一致。最好是使用自变量集的三角剖分。这确保了数据凸包内的连续(线性)插值。通过更多的工作,也可以通过三角剖分实现高阶插值


如果您碰巧对地质统计学感兴趣,径向基函数也通常用于插值或克里格。由于你正在研究基于距离的方法,考虑径向基函数。例如,搜索“反向多重二次插值”。

这称为三线性插值。热方程的事情是伟大的!