2013-02-20 51 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秒,並對它們進行平滑處理。這給你更高的順序平滑,幾乎沒有額外的努力。