So I'm trying to write a trilinear interpolation function but am having some trouble coming up with it.
So first we have a 1D interpolation:
float interpolate1D(float v1, float v2, float x){
return v1*(1-x) + v2*x;
}
And then 2D interpolation:
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);
}
But then things get tricky once it gets to 3D. I can't quite figure out how to implement a 3D interpolator using the 2D interpolation function. I don't know why I'm having this mental bock since it should just be a straightforward extension but I guess all of the different variables at play are throwing me off. So I've started off a function below but it's incomplete and I need help finishing it.
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?
}
You have 2 problems with your code - v7
appears twice.
Let me spell it out for you:
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, v8, x, y);
return interpolate1D(s, t, z);
}
Compare this to interpolate2D()
:
Also note - we don't know how you place your v1 through v8. But if you do it correctly, this function will work.