我想计算一个权重作为inverse distance weighting interpolation之类的距离的倒数。
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]
只有一个距离0
,我希望其对应的值values[i]
为显性。如果有多个距离为0
,我希望其值对结果做出同等贡献。即使dist[i]
不是零但非常小,我也希望有一个合理的标准来检查并处理它。知道如何实现它?
答案 0 :(得分:5)
如果存在零距离,则无需插值,因为您有完美的匹配!
在for循环中:
if(dist[i] == 0.) return values[i];
答案 1 :(得分:4)
除了分段之外我没有看到任何方法 - 你需要一个不同的功能,而不是小距离的倒数距离。最简单的事情就是砍掉顶部:
modified_dist[i] = dist[i] < MIN_DIST ? MIN_DIST : dist[i]
但是如果你愿意的话,可以将其替换为仍在减少的内容,例如(MIN_DIST + dist[i])/2
。
答案 2 :(得分:3)
提出“主导”,“非常小”和“处理它”的定义。然后,将它们翻译成代码。