6

全て、

Trilinear補間の関数を探していると思います。

詳細は次のとおりです。

私は3次元データセットを持っています:

  • 次元 1 は 5 刻みで 0 から 100 まで変化します
  • 次元 2 は 5 刻みで 0 から 100 まで変化します
  • 次元 3 は 0 から 1 まで 0.1 刻みで変化します

したがって、合計値は 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 は比率です。つまり、「ターゲット」の最初の次元の値と、私が持っている最も近い 2 つの値からの距離、y は 2 番目の次元の比率、z は 3 番目の次元の比率です。

もちろん、何を言っているのかよくわからないので、これが正しいか間違っているかはわかりません。

したがって、理想的には、これを実現する方法を正確に示す Javascript または擬似コードが必要です。

よろしくお願いします!

4

1 に答える 1

6

あなたが見ているコードは、データセット内にある頂点を持つ立方体の 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
// ...
于 2009-10-29T03:53:50.477 に答える