2011-07-18 13 views
1

私は知られていない "ベロシティ"を持っています。私はトラバースするピクセル数を持っています。私はその距離を "moveto"に送り、画面上のグラフィックスはジャンプします。素晴らしい滑らかなオブジェクトは、画面上でスライドします。現在、私は "慣性"効果を生み出すために、ゼロに近づくまでに私のインクリメント値を0.1ずつ減らしていますが、着陸したい点に着陸しません。私はオーバーシュートの取り扱いについて、スタックオーバーフローにanother questionを持っているが、私はこれを見つけた:時間の代わりに遠隔ドメインの四次緩和?

///////////// QUARTIC EASING: t^4 /////////////////////

// quartic easing in - accelerating from zero velocity 
// t: current time, b: beginning value, c: change in value, d: duration 
// t and d can be frames or seconds/milliseconds 
Math.easeInQuart = function (t, b, c, d) { 
    return c*(t/=d)*t*t*t + b; 
}; 

私は私が事前に定義された時点での着地と同様の効果を得るように周りにこれを切り替えたいが、入力環境によって現在の場所と目的地の場所。

フーリエ解析では、時間領域を周波数領域に変換することができます。時間ドメインを距離ドメインに変換するにはどうすればよいですか?

さらに、時間ベースの方程式またはアルゴリズムを使用して距離ベースのアルゴリズムに変換できる簡単な変換はありますか?

私がしようとしているのは、オブジェクトを正確な位置に置くか、または「インターティアル」減速効果に非常に近いものです。上にリンクされた四次緩和デモは、私が望む効果があったものです。

+0

開始位置、終了位置、現在位置を指定して、次のフレームの移動先を指定しますか? –

+0

それが動作すれば、はい! – alphablender

答えて

0

ちょうど方程式を解く。

時刻t以降の位置は、c * (t/d)^4 + bと思われます。これを所定のポイントpにしたい場合は、t = d*((p - b)/c)^(1/4)

それはあなたが欲しいものではありませんか?

+0

私は方程式から時間を離れることを望んでいたので、減速は目的地からの距離に比例するでしょう:x = getnextposition(currentpos、destinationpos) – alphablender

+0

あなたはそれをすることができません - 速度は時間の関数です。あなたの関数getnextpositionが時間に依存しないなら、何もあなたはcurrentposに永遠に留まり、決して目的地に到達しないと言ってしまうのを防ぎます。 –

+0

関数を呼び出すループで反復以外の時間はありません。これらの反復は、システムの負荷に応じて時間が変化する可能性があります。 – alphablender

関連する問題