Orbite de Kepler: obtenez une position sur l'orbite au fil du temps

8

Je développe un jeu lié à la simulation spatiale et j'ai du mal à implémenter le mouvement des étoiles binaires, comme ceci:

Étoile binaire

Les deux étoiles tournent autour de leur centroïde et leurs trajectoires sont des ellipses.

Je sais essentiellement comment déterminer la vitesse angulaire à n'importe quelle position, mais pas la vitesse angulaire au fil du temps. Donc, pour un angle donné, je peux très facilement calculer la position des étoiles (cf. http://en.wikipedia.org/wiki/Orbit_equation ).

Je voudrais obtenir la position des étoiles au fil du temps. Les équations paramétriques des œuvres d'ellipse , mais ne donne pas la vitesse correcte: { X(t) = a×cos(t) ; Y(t) = b×sin(t) }.

Est-ce possible et comment le faire?

Artefact2
la source
Cela pourrait être fait en simulant la gravité qui est assez simple (ajoutez une force qui dépend de la masse * sqrt (distance) et faites de la physique simple)
Elva
7
Non, ne fais pas de physique simple! Les orbites sont numériquement instables et tout va imploser ou exploser.
Jonas Bötel

Réponses:

4

En suivant quelques liens de la page Wikipédia à laquelle vous faites référence, vous accédez à Position en fonction du temps .

Peter Taylor
la source
1
Merci. On dirait que je vais devoir utiliser la méthode de Newton pour résoudre la deuxième équation.
Artefact2
0

Vous semblez avoir eu suffisamment de données pour produire l'animation pratique ci-dessus. Votre simulation peut nécessiter plus de précision que celle fournie par ma solution:

Pour chaque image de votre animation ci-dessus, enregistrez les positions en pixels des centres de chaque étoile. Entrez ces valeurs dans deux tableaux dans votre programme. Pour un temps donné t, trouvez les quatre entrées correspondantes consécutives dans chaque tableau et effectuez un filtre bicubique sur celles-ci pour produire la position de chaque étoile.

bmcnett
la source
En fait, l'animation provient de Wikipédia.
Artefact2
0

J'ai trouvé que l'intégration numérique était le moyen le plus simple. La loi du carré inverse (F = GM / r ^ 2) fonctionne plutôt bien. Et Runge Kutta commander quatre souvent appelé RK4 est facile à implémenter et fonctionne bien. Vous commencez par écrire un routinier qui prend une dérivée temporelle de premier ordre, par exemple pour un seul objet dans l'espace 2D, vous avez les coordonnées X et Y, et les vitesses X et Y. La sortie est la dérivée temporelle, la dérivée temporelle de la position est simplement la vitesse, donc la moitié n'est que la copie de valeurs, puis l'accélération n'est que l'attraction gravitationnelle. Ensuite, vous suivez la prescription Runge Kutta. L'erreur d'un seul pas de temps est proportionnelle au pas de temps à la cinquième puissance. Vous ajustez le pas de temps pour rendre le résultat suffisamment précis. Un avantage sur l'intégration numérique est que si vous voulez jouer avec le système pour le rendre plus intéressant,


la source
Eh bien, oui, c'est une solution, mais mon programme n'est pas une simulation physique en temps réel. C'est discret, et je ne peux pas tout mettre à jour partout. C'est pourquoi la position en fonction du temps est agréable: n'a pas besoin de calcul, toujours exacte quelle que soit la fréquence de mise à jour des positions.
Artefact2