三线性插值(Trilinear Interpolation)详解
xd=x−x0x1−x0,yd=y−y0y1−y0,zd=z−z0z1−z0
x_d=\frac{x-x_0}{x_1-x_0},
y_d=\frac{y-y_0}{y_1-y_0},
z_d=\frac{z-z0}{z_1-z_0}
xd=x1−x0x−x0,yd=y1−y0y−y0,zd=z1−z0z−z0
x0表示在x下方一个方格点,x1表示在x上方的一个方格点,对于y0、y1、z0、z1是同样的意思。
xd、yd、zd表示x、y、z在较小相关坐标的差值(这是维基百科中的解释)
首先,我们沿着x轴方向插值
c00=V[x0,y0,z0](1−xd)+V[x1,y0,z0]xd
c_{00}=V[x_0,y_0,z_0](1-x_d) + V[x_1,y_0,z_0]x_d
c00=V[x0,y0,z0](1−xd)+V[x1,y0,z0]xd
c01=V[x0,y0,z1](1−xd)+V[x1,y0,z1]xd
c_{01}=V[x_0,y_0,z_1](1-x_d) + V[x_1,y_0,z_1]x_d
c01=V[x0,y0,z1](1−xd)+V[x1,y0,z1]xd
c10=V[x0,y1,z0](1−xd)+V[x1,y1,z0]xd
c_{10}=V[x_0,y_1,z_0](1-x_d) + V[x_1,y_1,z_0]x_d
c10=V[x0,y1,z0](1−xd)+V[x1,y1,z0]xd
c11=V[x0,y1,z1](1−xd)+V[x1,y1,z1]xd
c_{11}=V[x_0,y_1,z_1](1-x_d) + V[x_1,y_1,z_1]x_d
c11=V[x0,y1,z1](1−xd)+V[x1,y1,z1]xd
V[x0,y0,z0]V[x0,y0,z0]V[x0,y0,z0]表示该函数在(x0,y0,z0)上的值, 然后再沿着y轴插值
c0=c00(1−yd)+c10yd c_0=c_{00}(1-y_d)+c_{10}y_dc0=c00(1−yd)+c10yd
c1=c01(1−yd)+c11yd c_1=c_{01}(1-y_d)+c_{11}y_dc1=c01(1−yd)+c11yd
最后再沿着z轴插值
c=c0(1−zd)+c1zdc=c_0(1-z_d)+c_1z_dc=c0(1−zd)+c1zd
如此我们就得到了一个点的值。三线性插值的结果与沿三个轴的插值步骤的顺序无关:任何其他顺序,例如沿x,然后沿y,最后沿z,产生相同的值。
根据以上推导公式我们可以得到一个完整的公式