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 :

\[v_{x_i} = \dfrac{x_{i+1}-x_{i-1}}{t_{i+1}-t_{i-1}} = \dfrac{x_{i+1}-x_{i-1}}{2\Delta t} \hspace{1cm}\text{et}\hspace{1cm} y_{x_i} = \dfrac{y_{i+1}-y_{i-1}}{t_{i+1}-t_{i-1}} = \dfrac{y_{i+1}-y_{i-1}}{2\Delta t}\]
  • 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()
alternate text

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 :

\[v_i = \sqrt{v_{x_i}^2 + v_{y_i}^2}\]
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()
alternate text
>>> %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 module math. Le paquet numpy définit également une valeur nan. Sinon il faudrait écrire float("nan").

  • Dans la fonction print() la méthode format() est plus pratique pour la mise en forme de l'affichage.