Я пишу физическую игру, в которой планеты с гравитацией воздействуют на различные объекты, такие как ракеты.(Используя движок Farseer Physics)
Для основного игрового процесса я использую один физический симулятор с фиксированным временным шагом.Это все хорошо, прекрасно работает.
Вот проблема.Я использую второй физический симулятор с большим временным шагом , чтобы проецировать определенные пути снарядов в будущее.По сути, это параллельная вселенная, содержащая планеты и другие статические, производящие гравитацию сущности (поскольку я запускаю эти симуляции проекции в реальном времени, она должна быть быстрой, а значит, и большим временным шагом).
Она дает немного другие результаты.
Вот базовый код, который выполняется для временного шага:
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))
Мой вопрос : можно ли дублировать результаты основного симулятора, используя другой временной шаг в параллельном симуляторе?
Моя математика не очень хорошая, поэтому у меня проблемы с продумыванием проблемы для возможных решений.Я предполагаю, что это невозможно из-за нелинейных уравнений.
Если это так, есть ли достаточно точный способ получить близкие результаты?