Mouvement d'un point : vecteur vitesse
Programme de seconde générale et technologique 2019.
"Représenter des vecteurs vitesse d’un système modélisé par un point lors d’un mouvement à l’aide d’un langage de programmation".
Principe
Calculer les coordonnées \((v_{x_i}, v_{y_i})\) des composantes des vecteurs vitesse à partir des relations :
Dessiner les vecteurs vitesse correspondant sur la figure.
Exemple : lancé d'un ballon
Les données sont obtenues à partir de l'exploitation d'une chronophotographie du lancé d'un ballon.
Le programme ci-dessous calcule les composantes vx
et vy
des vecteurs vitesse dans un boucle for
puis trace ces vecteurs sur la figure avec la fonction quiver()
.
Calcul et tracé des vecteurs vitesse
import matplotlib.pyplot as plt
# DONNEES
dt = 0.0667
x = [0.003, 0.141, 0.275, 0.410, 0.554, 0.686, 0.820, 0.958, 1.089, 1.227, 1.359, 1.490, 1.599, 1.705, 1.801]
y = [0.746, 0.990, 1.175, 1.336, 1.432, 1.505, 1.528, 1.505, 1.454, 1.355, 1.207, 1.018, 0.797, 0.544, 0.266]
# CALCULS DES COMPONSANTES DES VITESSES
N = len(x) # Nombre de points de mesures
vx = [0]*N # Liste de N éléments à zéro
vy = [0]*N # Liste de N éléments à zéro
for i in range(1, N-1):
vx[i] = (x[i+1]-x[i-1])/(2*dt)
vy[i] = (y[i+1]-y[i-1])/(2*dt)
# COURBES
plt.plot(x, y, ".") # Affichage des points
for i in range(N):
plt.quiver(x[i], y[i], vx[i], vy[i], angles='xy', scale_units='xy', scale=10, color='red', width=0.005)
plt.title("Trajectoire d'un ballon - Vecteur vitesse") # Titre
plt.xlabel("x (m)") # Légende en x
plt.ylabel("y (m)") # Légende en y
plt.show()

Amélioration et affichage des vitesses
Dans le programme précédent, les listes vx
et vy
ont été initialisées par des zéros. En toute rigueur, les premières valeurs et les dernières valeurs de ces listes ne sont pas définies et ne peuvent pas être nulle. Le langage Python propose la valeur particulière nan
(Not A Number) pour des situations comme celle là.
L'affichage passe par le calcul des vitesses avec la relation :
import matplotlib.pyplot as plt
from math import nan, sqrt
# DONNEES
dt = 0.0667
x = [0.003, 0.141, 0.275, 0.410, 0.554, 0.686, 0.820, 0.958, 1.089, 1.227, 1.359, 1.490, 1.599, 1.705, 1.801]
y = [0.746, 0.990, 1.175, 1.336, 1.432, 1.505, 1.528, 1.505, 1.454, 1.355, 1.207, 1.018, 0.797, 0.544, 0.266]
# CALCULS DES COMPONSANTES DES VITESSES
N = len(x) # Nombre de points de mesures
vx = [nan]*N # Liste de N éléments NAN (Not A Number)
vy = [nan]*N # Liste de N éléments NAN (Not A Number)
for i in range(1, N-1):
vx[i] = (x[i+1]-x[i-1])/(2*dt)
vy[i] = (y[i+1]-y[i-1])/(2*dt)
# CALCULS DES VITESSES
v = [sqrt(vx[i]**2+vy[i]**2) for i in range(N)]
for i in range(N):
print("v_{:2} = {:.2f} m/s".format(i, round(v[i],2)))
# COURBES
plt.plot(x, y, ".") # Affichage des points
for i in range(N):
plt.quiver(x[i], y[i], vx[i], vy[i], angles='xy', scale_units='xy', scale=10, color='red', width=0.005)
plt.text(x[i], y[i]-0.05, i, va="top", ha="center")
plt.title("Trajectoire d'un ballon") # Titre
plt.xlabel("x (m)") # Légende en x
plt.ylabel("y (m)") # Légende en y
plt.xlim(0, 2) # Echelle en x
plt.ylim(0, 2) # Echelle en y
plt.grid()
plt.show()

>>> %Run
v_ 0 = nan m/s
v_ 1 = 3.81 m/s
v_ 2 = 3.29 m/s
v_ 3 = 2.84 m/s
v_ 4 = 2.43 m/s
v_ 5 = 2.12 m/s
v_ 6 = 2.04 m/s
v_ 7 = 2.09 m/s
v_ 8 = 2.31 m/s
v_ 9 = 2.74 m/s
v_10 = 3.20 m/s
v_11 = 3.56 m/s
v_12 = 3.90 m/s
v_13 = 4.26 m/s
v_14 = nan m/s
Dans cet exemple, la valeur
nan
est donnée par le modulemath
. Le paquetnumpy
définit également une valeurnan
. Sinon il faudrait écrirefloat("nan")
.Dans la fonction
print()
la méthodeformat()
est plus pratique pour la mise en forme de l'affichage.