Воспроизведение результатов физики гравитации с различными временными шагами - PullRequest
2 голосов
/ 01 марта 2012

Я пишу физическую игру, в которой планеты с гравитацией воздействуют на различные объекты, такие как ракеты.(Используя движок 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))

Мой вопрос : можно ли дублировать результаты основного симулятора, используя другой временной шаг в параллельном симуляторе?

Моя математика не очень хорошая, поэтому у меня проблемы с продумыванием проблемы для возможных решений.Я предполагаю, что это невозможно из-за нелинейных уравнений.
Если это так, есть ли достаточно точный способ получить близкие результаты?

1 Ответ

1 голос
/ 01 марта 2012

Это математическая, а не физическая проблема, но ответ - нет.Моделирование (любое моделирование) является приближенным и будет сильно зависеть от нескольких переменных.

В этом случае оно выглядит как базовый метод Эйлера моделирование.То, что вы видите, это различия в глобальной ошибке усечения для двух симуляций - иными словами, каждое моделирование имеет присущие, расходящиеся характеристики ошибок.более дивергентное моделирование в случаях «близкого приближения» (когда два тела значительно отклоняются, ошибка будет больше).Вы не сможете исправить это, потому что исправление будет более сложным (то есть требуется вычислительная мощность), чем две модели вместе взятые.

...