所以我試圖寫一個三線性插值函數,但我有一些麻煩提出來。三線性插值
所以首先我們有一個一維插值:
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)'? –
但我覺得我需要爲「立方體」的6個邊進行插值,然後我會有6個值,s,t,u,w,x,y讓它們調用它們。然後從那裏我仍然失去了... – user1855952
我有點困惑你的方法。如果插入兩個二維矢量,難道你不期待一個二維矢量作爲結果嗎?在3D中,你會期望一個3D矢量作爲結果? –