2017-12-10 28 views
0

最大速度を設定した2次元の物体をシミュレートしようとしていますが、速度が最大であるにもかかわらず物体の挙動の数学モデルを構築するのが難しい両方とも正しい方向に移動していません。さらに加速度が最大速度制限によって部分的にブロックされています。最大加速度で一定加速度下で物体をシミュレート

など。最大速度は√2で、現在は(1,1)に向かい、実際には(√2,0)に向かうはずです。 x軸に沿って直接加速するだけでは、速度制限が破られてしまいます。

代わりに、時間の経過とともに速度方向を正しい方向に「滑らせる」必要があります。私はそれがあまりにも高くなれば新しい速度を計算すると最大で、それをスケーリングされてやっているやっている:仕事を(一種の)んが、私はスムーズになるためにそれをリファクタリングする必要てる

newVelocity = oldVelocity + acceleration * dt; 
if(newVelocity.getLength() > maxSpeed){ 
    newVelocity = newVelocity.scale(maxSpeed); 
} 

- シミュレーションの粒度に依存しない - 現時点では、dtの値の半分で2回のパスと反対の1回のパスを実行すると、私は異なる結果になります。

私は何をしようとしていることはスピードが円上の点であるとしてモデルもあり、その後、円

Diagram of what I mean

しかし(の接線として印加された加速度の量を計算します私のメカニックと計算が失敗するところです)は、現在の速度角と時間ベースの式に適用された加速度から導出された瞬時角速度の計算をどのように回して、実際の速度の変化を単一のシミュレーションティック。

私はほとんどこの問題にかなり簡単な解決策があることを確信しています。私は、Googleにどんな用語のセットを試すことができません。

+0

速度ベクトルをリスケールすることで、速度が限界を超えたときに速度をクランプするのはなぜですか? – meowgoesthedog

答えて

0

現在v =(1,1)で、v =(√2、0)に加速したい場合は、2つのオプションがあります。

  1. は、一定期間(√2-1,1)に一定の加速度に比例を適用することにより、V =(1,1)からV =(√2,0)に直線に従っ。この間、オブジェクトは最大速度よりも遅く移動しますが、できるだけ早く希望の速度に到達します。

  2. 現在の速度に垂直方向で最大加速度を適用することによって、最大速度の曲線に従います。この例では、右に曲げようとしています。したがって、あなたの速度が(1,1)の場合、加速度は(1、-1)に比例し、あなたの速度が(√2,0)の直前にあなたの速度はほぼ(0、-√2)に比例する。これはあなたがやりたいことですが、必ずしも最適ではないことに留意してください。

ここでいくつかの簡単な計算。あなたの速度円は、半径がmaxSpeedであり、円周が2*π*maxSpeedであり、2つの最高速度点の間のこの円に沿った距離はθ*maxSpeedに等しく、ここでθはそれらの速度間の角度です。 maxAccelerationで加速でき、ステップがdt秒の長さであれば、円に沿った距離がmaxAcceleration*dt、または角度がmaxAcceleration*dt/maxSpeedになります。したがって、現在のベロシティの角度がθの場合、ステップの最後には、角度はθ +/- maxAcceleration*dt/maxSpeedになります。

関連する問題