6

何かを一定の距離だけ動かしたい。ただし、私のシステムでは、慣性/ドラッグ/負の加速があります。私はそれのためにこのような簡単な計算を使用しています:

v = oldV + ((targetV - oldV) * inertia)

これを複数のフレームに適用すると、動きが「ランプアップ」または減衰します。例:

v = 10 + ((0 - 10) * 0.25) = 7.5 // velocity changes from 10 to 7.5 this frame

ですから、私は移動したい距離と加速度を知っていますが、そこに到達するための初速度はわかりません。たぶんもっと良い説明は、ビリヤードボールが特定のポイントで止まるように打つのがどれほど難しいか知りたいということです。

私は運動方程式(http://en.wikipedia.org/wiki/Equations_of_motion)を見てきましたが、私の問題の正しいものが何であるかを理解することができません...

何か案は?ありがとう-私は科学のバックグラウンドではなくデザインの出身です。

更新:Fiirhokには、固定加速度値を使用したソリューションがあります。HTML + jQueryデモ: http:
//pastebin.com/ekDwCYvj
小数値またはイージング関数を使用してこれを行う方法はありますか?私の経験では、固定加速とフレームベースのアニメーションが最終ポイントをオーバーシュートすることがあり、強制する必要があり、わずかなスナップグリッチが発生するという利点があります。

4

3 に答える 3

8

これは単純な運動学の問題です。

ある時間tで、一定の加速度の下での物体の速度(v)は次のように表されます。

v = v0 + at

ここで、v0は初速度、aは加速度です。あなたの場合、最終速度はゼロ(オブジェクトが停止している)なので、tについて解くことができます。

t = -v0/a

移動した合計の差を見つけるために、時間の経過に伴う速度の積分(最初の方程式)を取ります。私は何年も積分をしていませんが、これは次のようにうまくいくと確信しています:

d = v0t + 1/2 * at^2

ealierを開発したtの式を次のように置き換えることができます。

d = v0^2/a + 1/2 * v0^2 / a

そしてv0の解決:

v0 = sqrt(-2ad)

または、よりプログラミング言語の形式で:

initialVelocity = sqrt( -2 * acceleration * distance );

この場合の加速度は負であり(オブジェクトが減速している)、一定であると想定しています。そうでない場合、これはより複雑になります。

有限のステップ数のループ内でこれを使用する場合は、少し注意する必要があります。ループの各反復は、一定期間を表します。オブジェクトは、平均速度に時間の長さを掛けたものに等しい量だけ移動します。反復の時間の長さが1に等しいサンプルループは、次のようになります。

position = 0;
currentVelocity = initialVelocity;
while( currentVelocity > 0 )
{
    averageVelocity = currentVelocity + (acceleration / 2);
    position = position + averageVelocity;
    currentVelocity += acceleration;
}
于 2010-03-21T16:18:00.993 に答える
3

設定した距離を移動したい場合は、以下を使用してください。

代替テキスト

于 2010-03-21T12:42:42.400 に答える
1

移動距離は、時間に対する速度の積分にすぎません。時間に関して式を制限[v、0]で統合する必要があります。これにより、v(初速度)で表した距離の式が得られます。

于 2010-03-21T12:41:09.963 に答える