私は、ミサイルなどのさまざまなオブジェクトに重力が作用する惑星を持つ物理ベースのゲームを書いています。(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))
私の質問:並列シミュレーターで異なるタイムステップを使用してメインシミュレーターの結果を複製することは可能ですか?
私の数学はあまり良くないので、考えられる解決策を見つけるのに問題を考えるのに苦労しています。非線形タイプの方程式が関係しているため、それは不可能だと思います。
その場合、近い結果を得るのに合理的に正確な方法はありますか?