3

逆距離加重補間のようなものの場合、距離の逆数として重みを計算したいと思います。

double wgt = 0, wgt_tmp, result = 0;
for (int i = 0; i < num; i++) {
   wgt_tmp = 1.0/dist[i];
   wgt += wgt_tmp;
   result += wgt_tmp * values[i];
}
results /= wgt;

ただし、距離は可能で0あり、重みを計算に適したものにする必要があります。dist[i]距離が1つしかない場合は、対応する値を支配的0にしたいと思います。距離が複数ある場合は、それらの値が結果に等しく寄与するようにしたいです。また、ゼロではなく非常に小さい場合でも、それをチェックして対処するための合理的な基準が必要です。それを実装する方法はありますか?values[i]0dist[i]

4

3 に答える 3

6

距離がゼロの場合は、完全に一致するため、補間は必要ありません。

forループ内:

if(dist[i] == 0.) return values[i];
于 2011-06-08T13:05:33.183 に答える
5

区分的以外に方法はありません-短い距離の場合、逆距離とは異なる関数が必要です。最も簡単なことは、上部を切り落とすことです。

modified_dist[i] = dist[i] < MIN_DIST ? MIN_DIST : dist[i]

のように、必要に応じて、まだ減少しているものに置き換えることができます(MIN_DIST + dist[i])/2

于 2010-02-02T17:51:02.977 に答える
4

「支配的」、「非常に小さい」、「それに対処する」の定義を考えてください。次に、それらをコードに変換します。

于 2010-02-02T17:50:43.277 に答える