0

私は投票を数えるカウンターを持っています。ただし、サーバーから 30 秒ごとに数値を取得しているだけです。フロントエンドでかなり一貫して見えるようにしたいので、増加を追跡し、1 秒あたり複数回、投票を直線的に増加させる小さなスクリプトを作成しました。

しかし、異なるレート間をうまく移行できないようです。私の脳は、線形を超えると固まってしまいます。

例: 100 票になったとしましょう。

投票は、次の 30 秒間で 60 ずつ、または 1 秒あたり 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 がプルされるたびにゼロにリセットされます。これは 500ms の間隔内です。

多分私はそれについてすべて間違っています。クレイジーなアイデアを歓迎します。役立つ場合は、ここで jQuery を使用することが許可されています。

ありがとう!

4

1 に答える 1

0

レートに指数フィルタを適用するのはどうですか? あれは

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

これにより、平滑化を調整するパラメーター c が得られます。c=0 --> スムージングは​​まったくありません。より大きい c --> よりスムージング。

レートの変化も滑らかにしたい場合は、より多くのポイントを導入します。追加のサーバー ラウンドトリップは必要ありません。入手したものを複製するだけです。たとえば、レート x を 30 秒間計算する場合、レート x を 10 秒間使用する 3 つのインターバルを想定し、それらに平滑化を適用します。これにより、追加の労力をほとんど必要とせずに、高次の平滑化が可能になります。

于 2013-02-20T21:37:59.087 に答える