私はミサイルのような様々なオブジェクトに重力を作用させる惑星を持つ物理学ベースのゲームを書いています。 (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))
私の質問: が、別の時間ステップでを使用して、メインのシミュレータの結果を再現することが可能です並列シミュレータ?
私の数学はあまり良くありません。そのため、問題解決のために問題を考えています。私は関係式の非線形のタイプのためにそれが可能ではないと推測しています。
そのような場合、近い結果を得るには合理的に正確な方法がありますか?
私はそれを恐れていました、ありがとう! –