Planète Gravité 2D


15

J'essaye de faire un jeu simple où un vaisseau spatial est lancé et ensuite son chemin est affecté par la gravité des planètes.

Similaire à ce jeu: http://sciencenetlinks.com/interactives/gravity.html

Je souhaite savoir comment reproduire l'effet des planètes sur le vaisseau spatial dans ce jeu afin qu'un vaisseau spatial puisse «boucler» autour d'une planète pour changer de direction.

J'ai réussi à obtenir de faux résultats où le vaisseau spatial fait une boucle dans une énorme ellipse autour de la planète ou n'est que légèrement affecté par la gravité d'une planète à l'aide de vecteurs.

Merci d'avance.

ps J'ai beaucoup d'expérience en codage, rien à voir avec le développement de jeux.

Réponses:


15

Dans votre cas, il y a un vaisseau spatial, qui se déplace affecté par la gravité de toutes les planètes. Chaque planète applique une force égale à «m1 * m2 / r ^ 2» dans laquelle m1 et m2 représentent des masses de vaisseau spatial et de planète, et r est égal à la distance euclidienne de la planète et du vaisseau spatial. il vous suffit de calculer la somme de toutes les forces appliquées au navire. d'après les règles de newton, nous savons que 'f = m * a' où f est la force totale appliquée à un objet, m est sa masse et a est sa accélération. à partir de ce point, vous pouvez lire cette page pour apprendre à utiliser l'accélération pour calculer la vitesse et la position dans le temps.


+1 Belle ressource que vous avez liée, expliquant la méthode d'intégration Runge-Kutta de 4ème ordre et tout.
David Gouveia

Mon problème en ce moment est le chemin que prend le vaisseau spatial. J'ai besoin que ça ressemble plus à un jeu. J'ai fait une image simple pour montrer ce que je veux dire. i44.tinypic.com/2w2kdo4.jpg A est ce que j'ai maintenant, B est ce que je veux.
cuit

@baked: et augmenter la masse de la planète ne fonctionnerait pas?
Jesse Emond

5
En plus de l'article Gaffer on Games, vous devez absolument lire cet article Codeflow ! Runge-Kutta ne ressemble pas à votre meilleur pari ici.
sam hocevar

Si vous avez A et voulez B, que diriez-vous de réduire la vitesse initiale de votre vaisseau spatial?
Ben

4

Chaque planète doit avoir un champ gravitationnel qui tire tout objet à proximité vers son centre. En d'autres termes, vous devez appliquer une force de la position du vaisseau spatial au centre de la planète à chaque étape de la simulation.

Cette force dépend de la masse des deux objets, mais dans ce cas, comme la masse du vaisseau spatial est probablement insignifiante par rapport à celle de la planète, vous pouvez simplement essayer différentes constantes en fonction de la taille de la planète jusqu'à ce que vous vous sentiez bien.

Plus important encore, cette force s'affaiblit plus la distance entre les deux objets est grande. Pour ce faire, divisez par la distance au carré entre les deux. Après une certaine distance, vous voudrez peut-être couper "manuellement" et arrêter d'appliquer la force.

Il suffit de traduire cette force en accélération, et les équations physiques de base devraient s'occuper du reste.

En pseudocode

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

C'est en fait assez similaire à la façon dont je le fais actuellement. Peut-être s'agit-il simplement de jouer avec les constantes?
cuit

2
Je ne sais pas vraiment mais je dirais que c'est probablement juste peaufiné maintenant. Et je pense que cela dépend aussi de la force initiale que vous appliquez au vaisseau spatial pour le mettre en orbite.
David Gouveia
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.