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....
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é.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Cordialement,
Partager