插补浮标

时间:2013-11-21 20:40:23

标签: javascript interpolation

我有这个函数用于根据u,vs和vStep值计算u,v点的索引

function getIndex1( u,v, uStep, vStep ) {
    var res = [];

    for( var i = 0; i < 45; i++ ) {
        res[i] = Math.round( v ) * 128 + Math.round( u ); 
        v += vStep;
        u += uStep;
    }
    return res;
}

如果我尝试插入此函数,我会得到这个

function getIndex2( u,v, uStep, vStep ) {
    var res = [];

    v *= 128;
    vStep *= 128;
    for( var i = 0; i < 45; i++ ) {
        res[i] = Math.round( v + u );
        v += vStep;
        u += uStep;
    }
    return res;
}

当u,v,uStep,vStep为整数时,这种方法很有效,当这些值为浮点数时会出现问题。 我有预感,我需要一些“bresenham代码”来实现我的目标。 希望有些人可以帮助我。

1 个答案:

答案 0 :(得分:1)

我认为问题在于,当您的步长值是浮点时,数学误差会累积循环的每次迭代。解决这个问题的方法是将每个步骤值乘以索引。

function getIndex(u, v, uStep, vStep) {
  var res = [];
  for (var i = 0; i < 45; ++i) {
    var du = uStep * i;
    var dv = vStep * i;
    res[i] = Math.round(v + dv) * 128 + Math.round(u + du);
  }
  return res;
}

这减少了错误,因为浮点计算仅在每个循环中发生一次,并且对下一次迭代没有影响。作为附带好处,这应该会略微提高算法的性能。