我正在尝试编写三线性插值函数,但是在实现时遇到了一些麻烦。
首先我们有一个一维插值:
float interpolate1D(float v1, float v2, float x){
return v1*(1-x) + v2*x;
}
然后是2D插值:
float interpolate2D(float v1, float v2, float v3, float v4, float x, float y){
float s = interpolate1D(v1, v2, x);
float t = interpolate1D(v3, v4, x);
return interpolate1D(s, t, y);
}
但是,一旦涉及到3D,事情就变得棘手了。我无法完全弄清楚如何使用2D插值函数实现3D插值器。我不知道为什么会有这种心理障碍,因为它应该只是一个简单的扩展,但我想所有不同的变量都在干扰我。因此,我已经开始编写下面的函数,但它还不完整,我需要帮助完成它。
float interpolate3D(v1, v2, v3, v4, v5, v6, v7, v8, float x, float y, float z){
float s = interpolate2D(v1, v2, v3, v4, x, y);
float t = interpolate2D(v5, v6, v7, v7, x, z);
//What do I do next?
}
xy
和xz
平面上有投影,因此这些平面的交点只留下一个自由度:在x
方向上。所以我猜你应该使用interpolate1D(s, t, x)
? - Vincent van der Weele