
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots(figsize=(5, 2))
ax.set(xlim=(-0, 10), ylim=(-2, 2))
ax.set_xlabel('position ( m )')
ax.set_ylabel('amplitude')

# contient les valeurs
x_pos = []
amplitude = []

# paramètres de l'onde sinusoidale
freq = 0.1
celerite = 0.20

# calcul de la nouvelle onde à la date t
def onde(t):
    x_pos.clear()
    amplitude.clear()
    x = 0.0
    while x < 10:
        x_pos.append(x)
        if t - x / celerite > 0:
            amplitude.append(np.sin(2 * np.pi * freq *(t - x / celerite)))
        else:
            amplitude.append(0.0)   
        x = x + 0.1

# calcul du premier tracé de l'onde à t=0 secondes
onde(0)

# dessin du graphe
line = ax.plot(x_pos, amplitude, color='b', lw=1)[0]

# mise à jour du graphe lors de l'animation
def animate(i):
    onde(i) 
    line.set_ydata(amplitude)

# appel régulier de l'animation
anim = FuncAnimation(
    fig, animate, interval=100, frames=100)

fig.tight_layout()
plt.draw()
# sauvegarde d'une vidéo de l'animation
anim.save('onde_sinusoidale.mp4')
plt.show()



