2013-02-20 39 views
0

我有一个计数器计数选票。但是,我只从服务器拉出数字30秒。我希望它在前端看起来相当一致,所以我写了一个小脚本来跟踪增长情况,并以每秒多次的方式让投票线性增加。然而,我似乎无法在不同的利率之间转换 - 我的大脑锁定了线性关系。查找javascript中两行之间的曲线

例如: 可以说我们是100票。

预计投票在接下来的30秒内增加60,或者以每2秒2票的方式投票(2/1)。我已经可以做到这一点。

我们在30秒后以160票赞成我们的线性增益。

现在,下一部分预计会在30秒内增加20,或每3秒2(2/3)。

我不想突然降低投票率,我希望在30秒后平稳过渡,我会得到正确的(180)总票数,柜台减速(或相应地加速),而不是只是突然改变线性增益。

var t = 0; 
function upCount(){ 
    $("#votecount").text(Math.floor(current + nextInc*(t/60)); 
    t++; 
} 

current是从服务器报告票的当前数量,并且nextInc是在接下来的30秒到发生票的预测数目。

t是“时间”,从服务器的每个ajax拉回到零。这是在500毫秒的时间间隔内。

也许我一直在说这一切都是错误的。疯狂的想法欢迎。如果有帮助,我可以在这里使用jQuery。

谢谢!

+0

使用[样条](http://en.wikipedia.org/wiki/Spline_(数学))! – Bergi 2013-02-20 22:38:21

+0

太棒了....在JS中如何工作? – 2013-02-21 02:11:03

回答

0

如何将指数滤波器应用于您的费率?那就是

smoothed_rate = (current_rate + c*smoothed_rate)/(1+c) 

这给你一个参数c来调整平滑。 c = 0 - >根本不平滑。更大的c - >更平滑。

如果你想平滑利率变化,那么引入更多的点。您不需要额外的服务器往返。只是复制你得到的。例如。如果你计算一个30秒的速率x,那么假设3个速率为x的插值为10秒,并对它们进行平滑处理。这给你更高的顺序平滑,几乎没有额外的努力。