2D-орбитальная физика

Я работаю над 2D физическим движком для игры. У меня работают гравитация и массы, используя простой итеративный подход (я знаю, что в конце концов мне придется обновить); Я могу толкать массы вручную и наблюдать, как они движутся, и все работает так, как я ожидал.

Прямо сейчас я пытаюсь заранее настроить игровой мир со спутником на простой круговой орбите вокруг планеты. Для этого мне нужно вычислить вектор начальной скорости спутника, учитывая массу планеты и желаемое расстояние до нее; это должно быть тривиально, но я не могу, хоть убей, заставить это работать правильно.

Стандартные учебники физики говорят мне, что орбитальная скорость объекта на круговой орбите вокруг массы M равна:

v = sqrt( G * M / r )

Однако после применения При подходящем векторе спутник не движется достаточно быстро и попадает на резко эллиптическую орбиту. Случайное вмешательство показывает, что в одном случае он снижается примерно в 3 раза.

В моем коде моделирования гравитации используется традиционный:

F = G M m / r^2

G установлен в 1 в моей вселенной.

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


Обновление: Мой физический движок работает следующим образом:

for each time step of length t:
  reset cumulative forces on each object to 0.
  for each unique pair of objects:
    calculate force between them due to gravity.
    accumulate force to the two objects.
  for each object:
    calculate velocity change dV for this timestep using Ft / m.
    v = v + dV.
    calculate position change dS using v * t.
    s = s + dS.

(Конечно, с использованием векторов, где это необходимо.)

Сейчас я делаю один физический тик каждый кадр, что происходит примерно в 500 -700 раз в секунду. Я знаю, что это очень быстро накапливает ошибки, но это должно, по крайней мере, помочь мне начать.

(Кстати, мне не удалось найти готовый физический движок, который обрабатывает орбитальную механику - большую часть 2D-физики. такие движки, как Chipmunk и Box2D, больше ориентированы на жесткие структуры. Кто-нибудь может предложить одну, на которую я мог бы взглянуть?)

15
задан David Given 28 October 2010 в 13:02
поделиться