Я работаю над 2D-физическим движком для игры. У меня тяжести и массы работают, используя простой итеративный подход (я знаю, что мне придется в конце концов обновить); Я могу массировать массы вручную и смотреть, как они двигаются, и все работает так, как я ожидал.
Сейчас я пытаюсь заранее настроить игровой мир со спутника на простой круговой орбите вокруг планеты. Для этого мне нужно рассчитать начальный вектор скорости спутника, учитывая массу планеты и желаемое расстояние; это должно быть тривиально, но я не могу для жизни меня заставить его работать правильно.
Стандартные учебники по физике говорят мне, что орбитальная скорость объекта по круговой орбите вокруг массы М равна:
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 раз в секунду. Я знаю, что это скопирует ошибки очень быстро, но это должно по крайней мере начать меня.
(BTW, мне не удалось найти готовый физический движок, который обрабатывает орбитальную механику). Большинство 2D-физических движков, таких как Chipmunk и Box2D, больше ориентированы на жесткие структуры. Может кто-нибудь предложить один, на который я мог бы смотреть?)