Моделирование гравитации в 3D-игре?

Хорошо, я пишу космический симулятор для 3D-игры, и я хотел бы реализовать в нем гравитацию объектов.

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

Кроме того, как мне найти скорости, необходимые для вывода объекта А на орбиту вокруг объекта В на определенном расстоянии?

Объекты того же размера, что и ваш космический корабль, или ваш космический корабль значительно меньше? Во втором случае можно многое упростить.
Либо вам нужна настоящая физика, и в этом случае, я считаю, что ответы на ваши вопросы уже есть на сайте, либо вам нужна какая-то игровая физика, и в этом случае вам может быть лучше на GameDev.SE .
Разве вы не можете использовать готовые физические движки?

Ответы (1)

Что ж, нужно либо решать дифференциальные уравнения (наверное, здесь не лучший способ), либо моделировать численно.

Невозможно определить скорость произвольного созвездия, не зная его прошлого. Так что вам нужно следить за скоростью всего, а также.

В основном вам нужны эти уравнения/назначения:

Суммируйте все гравитационные силы любой другой массы в вашем мире.

а я есть ускорение рассматриваемой массы по направлению к я -ая масса. г гравитационная постоянная Ньютона, 6,67 10 11 .

а я "=" г М я р я 2 р ^ я "=" г М я р я 3 р я

Полное ускорение на объекте суммируется с ускорением на объекте. Вы должны добавить векторно здесь. Если, например, у вас есть две противодействующие силы, масса вообще не будет ускоряться.

а "=" я а я

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

Δ в "=" а Δ т
в "=" в + Δ в

И используйте эту обновленную скорость для расчета изменения положения.

Δ Икс "=" в Δ т
Икс "=" Икс + Δ в

а , в и Икс являются векторами в трехмерном пространстве.

Основная идея а г т "=" в + в 0 , в г т "=" г + г 0 , где в 0 и г 0 являются + С константы интегрирования. В этом контексте они представляют собой скорость и расстояние, которые объект уже имеет или прошел соответственно.

Стационарная орбита

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

Так что либо начните с

м в 2 р "=" г м М р 2

или

м в 2 р + г м М р 2 "=" 0

м масса спутника, М масса большого объекта, т.е. планеты. г гравитационная постоянная и р это расстояние между двумя объектами.

В любом случае, вы получите

в "=" г М р

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

Мой мозг, возможно, только что взорвался, но это имеет смысл. Эх, я математик, а не физик.
По сути, ai — это ускорение по отношению к i, a — это ускорение по отношению ко всему? G - напряженность гравитационного поля?
Многострочные комментарии действительно помогли бы прямо сейчас ... В вашем примере с орбитой я предполагаю, что v - это скорость, необходимая для противодействия ускорению силы тяжести и, следовательно, для сохранения стабильной орбиты?
Интересно, что дельта t составляет 3 секунды. Мой движок действительно не предназначен для моделирования космоса.
Ваши предположения верны. скорость в это тот, который вам нужно, чтобы упасть вокруг планеты, а не на планету. Вы падаете на планету, но вы настолько быстры, что двигались вокруг планеты, поэтому не задели ее.
@queueoverflow Итак, нужно решить, должна ли вся система быть стационарной (вокруг одного тяжелого центра для всех планет) или свободно, чтобы каждая «Планета» притягивала друг друга?
@philipp Если ваши планеты достаточно легкие и достаточно далеко друг от друга, этим межпланетным притяжением можно пренебречь. Эти эффекты вызывают приливные эффекты, и на самом деле Юпитер и Сатурн вызвали эти приливные эффекты на Уране и Нептуне. Они так далеко из-за них, но масштаб времени для этих эффектов действительно велик.