Рассчитать траекторию снаряда с гравитацией от дисковых планет в 2D?

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

Я придумал способ приблизиться к этому:

  1. Рассчитать положение ракеты в следующем кадре на основе угла и скорости
  2. Из этого положения вычислите положение точки, притянутой к планете, где чем больше планета, тем дальше эта точка от указанной планеты.
  3. Сделайте это для каждой планеты, затем усредните каждую из этих точек, чтобы найти новое местоположение ракеты в этом кадре.
  4. Вращение в моем случае не имеет значения, но я бы вычислил его, сравнив положение этой точки и положение предыдущей точки.
  5. Повторяйте для каждого кадра.

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

Похоже, на этот вопрос уже был дан ответ на physics.stackexchange.com/q/20077 .
Кажется, это 3D, что слишком усложнило бы для меня.
Он действителен в любом количестве измерений, включая 2.

Ответы (1)

Формула гравитации Ф г "=" г м 1 м 2 р 2 . Так что храните переменные для вашего Икс и у скорости (или массив или любой другой метод, который вы хотите) и меняйте свое положение на скорость в каждом кадре. Кроме того, в каждом кадре используйте цикл (я не знаю, какой язык вы используете, поэтому я не могу дать точный код), чтобы посмотреть на каждую планету и подставить все в формулу и изменить скорость на величину, которую она возвращает, в направление планеты. Умножьте / разделите его на все, что вы хотите, чтобы сделать его разумным, если вы не используете фактические единицы, и в этом случае разделите число на массу корабля. Сделайте это для каждой планеты в системе.

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