2012-03-01 8 views
2

私はミサイルのような様々なオブジェクトに重力を作用させる惑星を持つ物理学ベースのゲームを書いています。 (Farseer Physicsエンジンを使用)重力物理学の結果は異なるタイムステップで再現されます

メインのゲームプレイでは、固定のタイムステップを使用して単一の物理シミュレーションを使用しています。 これはすべてうまくいいです、美しく動作します。

ここに問題があります。 私は、第2の物理シミュレータを使用して、より大きなタイムステップを使用して、将来的に特定の発射経路を投影します。基本的には、惑星や他の静的重力生成物を含む平行な宇宙 (私はこれらの投影シミュレーションをリアルタイムで実行しているので、速くなければならないので、より大きなタイムステップが必要です)。

少し異なる結果が出ています。ここで

はタイムステップごとに実行される基本的なコードは次のとおりです。

Vector2 force = GravityStrength/centerToCenterDist.LengthSquared()/Math.Sqrt(centerToCenterDist.LengthSquared()) * body1.Mass * body2.Mass * centerToCenterDist; 

//GravityStrength is in addition to the Mass calculations 

マイ並行宇宙のタイムステップは、現在(5.0 *タイムステップ)です。

は、私は、このような結果を変えることによって、結果の異なるを修正しようとする試みをした:

force = (force * (timestep+1)) 

私の質問: が、別の時間ステップでを使用して、メインのシミュレータの結果を再現することが可能です並列シミュレータ?

私の数学はあまり良くありません。そのため、問題解決のために問題を考えています。私は関係式の非線形のタイプのためにそれが可能ではないと推測しています。
そのような場合、近い結果を得るには合理的に正確な方法がありますか?

答えて

1

これは物理問題ではなく数学ですが、答えはいいえです。シミュレーション(任意のシミュレーション)は近似値であり、いくつかの変数に大きく依存します。

この場合、基本的なEuler methodのように見えます。あなたが見ているのは、2つのシミュレーションの違いです。言い換えれば、各シミュレーションには固有の発散誤差特性があります。global truncation error

「近くにアプローチする」ケースでは、たとえば、2つのボディが大きく偏向すると、誤差が大きくなります。 2つのモデルを組み合わせた場合よりも補正が複雑(計算能力が必要)なので、修正することはできません。

+0

私はそれを恐れていました、ありがとう! –

関連する問題