Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于三线性插值的Javascript函数_Javascript_Algorithm_Interpolation - Fatal编程技术网

用于三线性插值的Javascript函数

用于三线性插值的Javascript函数,javascript,algorithm,interpolation,Javascript,Algorithm,Interpolation,全部, 我想我在寻找一个三线性插值函数 详情如下: 我有一个三维数据集: 尺寸1以5为增量从0到100变化 尺寸2以5为增量从0到100变化 尺寸3的变化范围为0到1,增量为0.1 所以,我有4851个总值(21x21x11) 如果我需要找到(10,25,0.3)的值-这很简单-我可以在三维数组中查找它 但是,我需要能够得出最佳近似值,例如,给定维值(17,48,0.73) 所以,我认为我要找的是一个三线性插值(尽管我肯定会很感激任何关于更好方法的建议,或者暗示我的主题完全错了…) 在谷歌上

全部,

我想我在寻找一个三线性插值函数

详情如下:

我有一个三维数据集:

  • 尺寸1以5为增量从0到100变化
  • 尺寸2以5为增量从0到100变化
  • 尺寸3的变化范围为0到1,增量为0.1
所以,我有4851个总值(21x21x11)

如果我需要找到(10,25,0.3)的值-这很简单-我可以在三维数组中查找它

但是,我需要能够得出最佳近似值,例如,给定维值(17,48,0.73)

所以,我认为我要找的是一个三线性插值(尽管我肯定会很感激任何关于更好方法的建议,或者暗示我的主题完全错了…)

在谷歌上快速搜索可以找到以下公式:

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
// ...

丹尼尔,非常感谢您的回复!看起来正是我需要的。干杯,马特,你用它干什么?只是好奇:)马特-这是一种金融规划应用程序。我客户的投资咨询小组给了我一张桌子。这三个维度是您的年龄、计划退休年龄和投资组合的权益/债券比率;该表列出了您的投资组合将产生的预计退休收入。因此,如果你30岁,计划在65岁退休,你的投资组合中85%是股票,你的投资组合将产生x美元的退休收入。效果很好,只是间隔很大,我需要能够估计间隔之间输入的值。