2D Планета Гравитация


15

Я пытаюсь сделать простую игру, в которой запускается космический корабль, а затем на его путь влияет гравитация планет.

Аналогично этой игре: http://sciencenetlinks.com/interactives/gravity.html

Я хотел бы знать, как повторить эффект, который планеты оказывают на космический корабль в этой игре, чтобы космический корабль мог «зацикливаться» на планете, чтобы изменить направление.

Мне удалось достичь некоторых фиктивных результатов, когда космический корабль зацикливается в огромном эллипсе вокруг планеты или лишь незначительно зависит от силы тяжести планеты с использованием Векторов.

Заранее спасибо.

PS У меня большой опыт программирования, но я не имею никакого отношения к разработке игр.

Ответы:


15

В вашем случае есть космический корабль, который движется под влиянием гравитации всех планет. Каждая планета прикладывает силу, равную 'm1 * m2 / r ^ 2', в которой m1 и m2 представляют массы космического корабля и планеты, а r равно евклидову расстоянию от планеты до космического корабля. вам просто нужно рассчитать сумму всех сил, приложенных к кораблю. из правил ньютона мы знаем «f = m * a», где f - общая сила, приложенная к объекту, m - его масса, а - его ускорение. с этого момента вы можете прочитать эту страницу, чтобы узнать, как использовать ускорение для вычисления скорости и положения во времени.


+1 Хороший ресурс, который вы связали, объясняющий метод интеграции Рунге-Кутта 4-го порядка и все остальное.
Дэвид Гувейя

Моя проблема на данный момент - путь, по которому идет космический корабль. Мне нужно, чтобы он был более "игровым". Я сделал простую картину, чтобы показать, что я имею в виду. i44.tinypic.com/2w2kdo4.jpg A - это то, что у меня есть сейчас, B - это то, что я хочу.
испек

@baked: а увеличение массы планеты не сработает?
Джесси Эмонд

5
В дополнение к статье Gaffer on Games вам обязательно нужно прочитать эту статью Codeflow ! Рунге-Кутта не выглядит как ваш лучший выбор здесь.
Сэм Хочевар

Если у вас есть A и вы хотите B, как насчет уменьшения начальной скорости вашего космического корабля?
Бен

4

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

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

Самое главное, что эта сила становится слабее, чем больше расстояние между обоими объектами. Вы сделаете это, разделив квадратное расстояние между ними. После определенного расстояния вы можете «вручную» отсечь и прекратить применять силу.

Просто переведите эту силу в ускорение, и основные физические уравнения должны позаботиться об остальном.

В псевдокоде

force=0
for each planet
    if distance < constant
        force += mass * (planet.xy - ship.xy) / distance^2
apply force to ship

На самом деле это очень похоже на то, как я это делал в настоящее время. Может быть, это просто вопрос игры с константами?
испек

2
Не уверен, правда, но я бы сказал, что, возможно, это просто сейчас. И я думаю, что это также зависит от начальной силы, которую вы прикладываете к космическому кораблю, чтобы вывести его на орбиту.
Дэвид Гувейя
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.