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 : 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)
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,