2D Planet Gravity

15

Estou tentando fazer um jogo simples, onde uma nave espacial é lançada e seu caminho é efetuado pela gravidade dos planetas.

Semelhante a este jogo: http://sciencenetlinks.com/interactives/gravity.html

Eu gostaria de saber como replicar o efeito que os planetas têm sobre a nave espacial neste jogo, para que uma nave espacial possa "girar" em torno de um planeta para mudar de direção.

Eu consegui alcançar alguns resultados falsos, onde a nave espacial faz um loop em uma enorme elipse ao redor do planeta ou é apenas levemente afetada pela gravidade de um planeta usando Vetores.

Desde já, obrigado.

ps Tenho muita experiência em codificação, que não tem nada a ver com o desenvolvedor de jogos.

cozido
fonte

Respostas:

15

No seu caso, há uma nave espacial, que se move afetada pela gravidade de todos os planetas. Cada planeta aplica força igual a 'm1 * m2 / r ^ 2', na qual m1 e m2 representam massas de nave espacial e planeta, e r é igual à distância euclidiana do planeta e da nave espacial. você só precisa calcular a soma de todas as forças aplicadas ao navio. pelas regras de newton, sabemos 'f = m * a' onde f é a força total aplicada a um objeto, m é sua massa e a é sua aceleração. a partir deste ponto, você pode ler esta página para aprender como usar a aceleração para calcular velocidade e posição ao longo do tempo.

Ali1S232
fonte
+1 Bom recurso que você vinculou, explicando o método de integração Runge-Kutta de 4ª ordem e tudo mais.
David Gouveia
Meu problema no momento é o caminho que a nave espacial toma. Eu preciso que seja mais parecido com um jogo. Fiz uma imagem simples para mostrar o que quero dizer. i44.tinypic.com/2w2kdo4.jpg A é o que eu tenho agora, B é o que eu quero.
cozido
@ cozido: e aumentar a massa do planeta não funcionaria?
perfil completo de Jesse Emond
5
Além do artigo Gaffer on Games, você precisa absolutamente ler este artigo do Codeflow ! Runge-Kutta não parece sua melhor aposta aqui.
Sam Hocevar
Se você tem A e quer B, que tal reduzir a velocidade inicial da sua nave espacial?
Ben
4

Cada planeta deve ter um campo gravitacional que puxe qualquer objeto em sua vizinhança em direção ao seu centro. Em outras palavras, você deve aplicar uma força da posição da nave espacial ao centro do planeta a cada passo da simulação.

Essa força depende da massa de ambos os objetos, mas neste caso, como a massa da nave espacial é provavelmente insignificante em comparação com a do planeta, você pode apenas experimentar constantes diferentes, dependendo do tamanho do planeta, até obter a sensação certa.

Mais importante, essa força se enfraquece quanto maior a distância entre os dois objetos. Você fará isso dividindo pela distância ao quadrado entre ambos. Após uma certa distância, você pode querer cortar manualmente e parar de aplicar a força.

Apenas traduza essa força em uma aceleração, e as equações físicas básicas devem cuidar do resto.

No pseudocódigo

force=0
for each planet
    if distance < constant
        force += mass * (planet.xy - ship.xy) / distance^2
apply force to ship
David Gouveia
fonte
Isso é bem parecido com o que eu tenho feito atualmente. Talvez seja apenas uma questão de brincar com as constantes?
cozido
2
Não tenho certeza, mas eu diria que provavelmente está apenas aprimorando agora. E acho que também depende da força inicial que você aplica à nave espacial para colocá-la em órbita.
David Gouveia