2D гравітація планети


15

Я намагаюся скласти просту гру, де запускається космічний корабель, і тоді його шлях впливає сила тяжіння планет.

Подібно до цієї гри: http://sciencenetlinks.com/interactives/gravity.html

Я хотів би знати, як повторити вплив планети на космічний корабель у цій грі, щоб космічний корабель міг «кружляти» навколо планети, щоб змінити напрямок.

Мені вдалося домогтися деяких хибних результатів, коли космічний корабель замикається у величезному еліпсі навколо планети або лише незначно впливає гравітація планети за допомогою векторів.

Заздалегідь спасибі.

ps У мене є багато досвіду кодування, просто нічого спільного з ігровим розробником.

Відповіді:


15

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


+1 Приємний ресурс, який ви зв'язали, пояснивши метод інтеграції Runge-Kutta четвертого порядку та все.
Девід Гувейя

Моя проблема на даний момент - шлях, який проходить космічний корабель. Мені потрібно, щоб він був більш «ігровим». Я створив просту картину, щоб показати, що я маю на увазі. i44.tinypic.com/2w2kdo4.jpg A - це те, що я маю зараз, B - те, що я хочу.
запечений

@baked: а збільшення маси планети не буде працювати?
Джессі Емонд

5
Окрім статті Gaffer on Games, вам абсолютно потрібно прочитати цю статтю Codeflow ! Runge-Kutta не виглядає як ваша найкраща ставка тут.
sam hocevar

Якщо у вас є 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.