gpt4 book ai didi

javascript - 插值 float

转载 作者:行者123 更新时间:2023-11-29 15:40:22 25 4
gpt4 key购买 nike

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

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 是整数时效果很好,当这些值是 float 时就会出现问题。我有预感我需要一些“bresenham 代码”来实现我的目标。希望有人能帮助我。

最佳答案

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

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;
}

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

关于javascript - 插值 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20131416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com