Java Симуляция реалистичной гравитации

1

Как я буду программировать симулятор гравитации? Я делаю своего рода 2-й космический симулятор, и я хочу, чтобы планета (центр тяжести) тянула объекты к ней. Объект - это космический корабль (в основном только x и y-координаты).

  • 1
    Разместите некоторый код и покажите нам, как далеко вы продвинулись и где застряли.
Теги:
gravity

2 ответа

1
Лучший ответ

Проверьте назначение Принстона N-Body. Он описывает, что вы хотите.

Однако в интересах кратких сводок вы можете получить уравнения из основной тригонометрии и Закона Ньютона о всеобщей гравитации:

F = GMm/(r^2)

где F = сила между двумя объектами, G = гравитационная постоянная, M и m - соответствующие массы, а r - расстояние между ними.

Немного математики, и вы получите следующие результаты:

F_x = F(x_2 - x_1)/r
F_y = F(y_2 - y_1)/r

где F_x - гравитационная сила в направлении x (то же самое для F_y, но в направлении y), x_2 и y_2 - это положение одного из ваших объектов, x_1 и y_1 - положение другого, F такое, как определено выше, и r это расстояние между ними.

  • 0
    Это то, что я искал, работает отлично. Спасибо!
2

Используйте законы Ньютона - силы, которые чувствуют два объекта, являются привлекательными (от одного объекта центра масс до другого), равными друг другу, и имеют значение, равное g * m1 * m2/(d * d) (где g - постоянная, m1 и m2 - массы, d - расстояние от центральных точек.

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

Имейте в виду, что F = m * a, где F - приведенная выше сила, m - масса космического корабля, a - ускорение объекта. На основе ускорения вы вычисляете скорость и на основе скорости позиции.

  • 0
    С учетом того, что есть и координаты x и y, скорость нужно будет разделить так, чтобы она могла применяться к обеим координатам. Как мне разделить скорость?
  • 0
    @ user3808362: PhysicsClassroom.com/class/vectors

Ещё вопросы

Сообщество Overcoder
Наверх
Меню