全部,
我认为我在寻找用于Trilinear插值的函数。
详细信息如下:
我有一个三维数据集:
因此,我的总值为4851(21 x 21 x 11)。
如果我需要找到(10,25,0.3)的值-这很简单-我可以在3维数组中查找它。
但是,例如,在给定尺寸值(17,48,0.73)的情况下,我需要能够得出最佳近似值。
因此,我认为我正在寻找的是三线性插值法(尽管我一定会感谢任何关于更好方法的建议,或者暗示我完全在错误的话题上...)
快速的Google搜索可以得出以下公式:
Vxyz =
V000(1-x)(1-y)(1-z) +
V100x(1-y)(1-z) +
V010(1-x)y(1-z) +
V001(1-x)(1-y)z +
V101x(1-y)z +
V011(1-x)yz +
V110xy(1-z) +
V111xyz
看起来像我要找的东西,但是我不确定x,y和z代表什么。如果我不得不猜测,x是比率-我的“目标”第一维度值与我拥有的最接近的两个值之间的距离,y是第二维度的比率,z是第三维度的比率。
当然,由于我真的不知道我在说什么,所以我不知道这是对还是错。
因此,理想情况下,我想要一些Javascript或伪代码来确切说明如何实现此目的。
提前谢谢了!
最佳答案
您正在查看的代码正在尝试使用数据集中的顶点对多维数据集的8个点进行加权平均,该顶点将包围您要为其寻找值的点。
对于点p
// Find the x, y and z values of the
// 8 vertices of the cube that surrounds the point
x0 = Math.floor(p.x / 5);
x1 = Math.floor(p.x / 5) + 1;
y0 = Math.floor(p.y / 5);
y1 = Math.floor(p.y / 5) + 1;
z0 = Math.floor(p.z / .1);
z1 = Math.floor(p.z / .1) + 1;
// Look up the values of the 8 points surrounding the cube
p000 = dataset[x0][y0][z0];
p001 = dataset[x0][y0][z1];
// ...
// Find the weights for each dimension
x = (x - x0) / 5;
y = (y - y0) / 5;
z = (z - z0) / .1;
// Compute the guess using the method you found
// ...
关于用于三线性插值的Javascript函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1641497/