Code : Tout sélectionner
# orbital parameter
self.start_posx = 540
self.start_posy = 180
self.semi_major_axis = 270
self.gravitational_parameter = 4 * 10 ** 6
self.eccentricity = 0.8
self.average_pos = math.sqrt(self.gravitational_parameter / (self.semi_major_axis ** 3))
# self.period = 2 * math.pi * math.sqrt((self.semi_major_axis ** 3) / self.gravitational_parameter)
self.start_time = time.get_ticks()
def getPos(self):
mean_anomaly = self.average_pos * (time.get_ticks() / 1000 - self.start_time / 1000)
true_anomaly = mean_anomaly + 2 * self.eccentricity * math.sin(mean_anomaly) + 1.25 * (
self.eccentricity ** 2) * math.sin(2 * mean_anomaly)
dist = (self.semi_major_axis * (1 - self.eccentricity)) / (1 + self.eccentricity * math.cos(true_anomaly))
print(true_anomaly)
return math.cos(true_anomaly) * dist + 540, math.sin(true_anomaly) * dist + 360
Le programme calcule en premier la vitesse angulaire moyenne puis l'anomalie moyenne en fonction du temps puis la vraie anomaly avec la formule:
v = M + 2esin(M) + 1.25 * e²sin(2M)
Pour avoir la position qui en découle je récupère la distance puis applique le cosinus en fonction de la vraie anomaly
Quand je compile getPos la position me dessine une belle ellipse en fonction du temps mais la true anomaly va à 180° puis 70° puis 230° puis 180° puis elle termine l'ellipse et je n'arrive pas à comprendre pourquoi la true anomaly ne fait pas le tour sans s’arrêter.
J'ai essayé de vérifier si la formule était correcte sur wikipedia mais il n'y a pas de problème avec ce que j'ai vérifié. J'ai essayé de vérifier si l'erreur provenait de la transformation de ma distance angulaire en coordonnées mais ce n'est pas le cas.
Merci pour votre aide