Vitesse de déplacement d'une planète avec Matplotlib
Bonjour,
le code ci-dessous est fonctionnel et simule le mouvement d'une planète autour du Soleil. La trajectoire elliptique est volontairement exagérée car je souhaite montrer que plus une planète est proche du Soleil, plus elle se déplace vite (2ème loi de Kepler). Volontairement aussi, j'ai choisi de ne pas utiliser la fonction "FunctionAnimation" dans le programme. Le passage d'une image à une autre se fait donc, par le biais d'une courte pause entre 2 positions consécutives de la planète.
Mon problème est le suivant:
Pour des angles compris entre 0 et 180°, la planète se rapproche de l'étoile : je diminue donc la pause entre 2 images, au fur et à mesure que la planète se rapproche du Soleil. La vitesse de la planète est donc maximale sur le point nommé "Périgé" sur la figure (angle de 180°)
Au-delà de 180°, la planète s'éloigne du Soleil, sa vitesse doit diminuer. J'augmente donc progressivement la pause entre 2 images.
L'animation fonctionne, la planète se déplace bien sur l'ellipse, mais je n'observe pas visuellement une augmentation de la vitesse lorsque la planète se rapproche du Soleil surtout à partir du 2ème tour....
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
import matplotlib.pyplot as plt
import numpy as np
from math import pi
fig=plt.figure(figsize=(7,7), facecolor="skyblue")
ax=plt.axes(xlim=(-5,5), ylim=(-5,5), facecolor="aliceblue")
terre=plt.Circle((0,0),0.2,color='b')
Soleil=plt.Circle((-2.5,0),0.5,color="orange")
ax.add_artist(Soleil)
terre.center=(4,0)
ax.add_artist(terre)
t=np.linspace(-5,5,100)
x1=4*np.cos(t)
y1=3*np.sin(t)
plt.plot(x1,y1)
plt.text(4,0,'Apogee')
plt.text(-4.5,0,'Perigée')
for i in range(0,3):
vitesse=0
for angle in range(0,180):
angle_radians=angle*2*pi/360
x=4*np.cos(angle_radians)
y=3*np.sin(angle_radians)
vitesse=vitesse+0.0003
plt.pause(0.07-vitesse)
terre.center=(x,y)
ax.add_artist(terre)
vitesse=0.016
for angle in range(180,360):
angle_radians=angle*2*pi/360
x=4*np.cos(angle_radians)
y=3*np.sin(angle_radians)
vitesse=vitesse+0.0003
plt.pause(vitesse)
terre.center=(x,y)
ax.add_artist(terre) |
N'hésitez pas à me faire part de vos idées, si vous avez des suggestions pour améliorer ce code et obtenir l'effet souhaité.
Cordialement,