Physique-chimie · 2de · Enseignement commun · Fiche n°5

Une trajectoire 2D
et ses vecteurs vitesse.

Change de terrain : cette fois, c'est le mouvement d'une balle de golf qui est étudié à partir d'une chronophotographie, avec des positions relevées toutes les 0,066 s. Les mêmes outils que dans les fiches précédentes (boucle for, plt.arrow) donnent ici un résultat bien plus lisible, car le mouvement se déploie dans le plan.

trajectoire.py — aperçut = 0.00 s

Objectif de la fiche : représenter les vecteurs vitesse d'un système modélisé par un point lors d'un mouvement à deux dimensions, à l'aide du langage Python.

Cette fiche est autonome : tu n'as besoin d'aucun autre document, tout ce qu'il faut est ci-dessous, y compris les nouvelles données de la balle de golf. Chaque étape contient un script incomplet à compléter, puis à copier-coller dans Thonny (ou dans la console Basthon tout en bas de la page si tu n'as pas Thonny sous la main).

00

Les données de la balle de golf

À savoir
  • Cette fiche change de terrain d'étude : on ne reprend pas les mesures de la bille en chute libre des fiches précédentes, mais celles d'une balle de golf, pointée sur une chronophotographie toutes les 0,066 s.
  • Le mouvement est maintenant à deux dimensions : chaque position est repérée par une abscisse x ET une ordonnée y, toutes deux positives ici.
  • Le script ci-dessous est déjà complet : copie-le tel quel dans Thonny (ou dans Basthon) pour commencer.

Tableau des positions pointées

11 positions ont été relevées, à intervalles de temps égaux de 0,066 s. Le point n°0 est proche de l'origine.

point n° 012345678910
x (m) 0,010,250,570,911,221,541,872,162,492,813,15
y (m) 0,0150,3400,6811,0101,2971,5591,7681,952,082,1582,193

L'ordonnée y augmente d'abord vite, puis de moins en moins : la balle monte, ralentit, et va bientôt redescendre (on retrouve la forme d'une trajectoire de projectile).

etape0_donnees.py
import numpy as np
import matplotlib.pyplot as plt

# 11 instants séparés de 0,066 s
t = 0.066 * np.arange(11)

# Positions successives de la balle de golf (en mètres)
x = np.array([0.01, 0.25, 0.57, 0.91, 1.22, 1.54, 1.87, 2.16, 2.49, 2.81, 3.15])
y = np.array([0.01549, 0.3404, 0.6812, 1.010, 1.297, 1.559, 1.768, 1.95, 2.08, 2.158, 2.193])
01

Représenter la trajectoire

Consigne
  • À la différence des fiches précédentes, l'abscisse n'est plus constante : trace directement y en fonction de x, en ronds rouges ('ro'), avec la légende "y=f(x)".
  • Complète les étiquettes des axes ("xreelle" / "yreelle"), la grille, la légende et le titre "Trajectoire de la balle".
etape1_trajectoire.py
# TODO : trace y en fonction de x, en ronds rouges, avec une légende
plt.plot(____, ____, '__', label="____")
plt.xlabel("____")
plt.ylabel("____")
plt.grid()
plt.legend()
plt.title("____")
plt.show()
Résultat attendu

Un nuage de points rouges qui dessine une courbe montante puis qui s'aplatit progressivement : le début de la trajectoire en cloche caractéristique d'un projectile.

02

Vecteurs « déplacement » en 2D

Consigne
  • Comme dans les fiches précédentes, engendre n = np.arange(len(t)-1) pour disposer des 10 indices utilisables (il n'y a que 10 déplacements possibles pour 11 points).
  • Dans une boucle for i in n :, trace la flèche plt.arrow(x[i], y[i], x[i+1]-x[i], y[i+1]-y[i], head_width=0.05) : elle part du point i et pointe vers le point i+1, dans les deux directions x et y à la fois.
  • Fixe les limites des axes avec plt.xlim(0, 4) et plt.ylim(0, 3), ajoute plt.grid() et le titre "Vecteurs déplacement".
etape2_vecteurs_deplacement.py
# TODO : indices utilisables pour les déplacements
n = np.arange(len(____) - __)

# TODO : boucle qui trace un vecteur déplacement (x et y) par tour de boucle
for i in ____ :
    plt.arrow(x[__], y[__], x[____]-x[__], y[____]-y[__], head_width=0.05)

plt.xlim(__, __)
plt.ylim(__, __)
plt.grid()
plt.title("____")
plt.show()
Indice

La différence avec la fiche n°3 tient uniquement au fait que la flèche a maintenant une longueur horizontale non nulle (x[i+1]-x[i]) en plus de sa longueur verticale (y[i+1]-y[i]) : c'est ce qui lui permet de suivre vraiment la trajectoire.

Résultat attendu

Une suite de 10 petites flèches noires qui suivent fidèlement la courbe de la trajectoire : contrairement aux fiches précédentes (mouvement 1D), le résultat est ici parfaitement lisible.

03

Vecteurs « vitesse » en 2D

Consigne
  • Cette fois, le vecteur vitesse à la position i+1 est obtenu en calculant le déplacement entre les positions i et i+2, divisé par l'intervalle de temps correspondant t[i+2]-t[i].
  • Comme on a besoin de i+2, la liste des indices doit être redimensionnée à nouveau : utilise m = np.arange(len(t)-2) (10 devient 9 valeurs possibles).
  • Dans une boucle for i in m :, la flèche part du point x[i+1], y[i+1] avec pour longueurs 0.1*(x[i+2]-x[i])/(t[i+2]-t[i]) et 0.1*(y[i+2]-y[i])/(t[i+2]-t[i]).
  • Le facteur 0.1 est un facteur d'échelle : sans lui, les flèches (qui représentent une vitesse en m/s) seraient bien trop longues pour tenir sur le graphe à côté de la trajectoire (en mètres).
etape3_vecteurs_vitesse.py
# TODO : indices utilisables pour les vitesses (une valeur de moins que n)
m = np.arange(len(____) - __)

# TODO : boucle qui trace un vecteur vitesse (mis à l'échelle) par tour de boucle
for i in ____ :
    plt.arrow(x[____], y[____], ___*(x[____]-x[__])/(t[____]-t[__]), ___*(y[____]-y[__])/(t[____]-t[__]), head_width=0.05)

plt.xlim(__, __)
plt.ylim(__, __)
plt.grid()
plt.show()
Indice

Repère bien les trois indices différents utilisés dans une même ligne : i+1 pour le point de départ de la flèche, i et i+2 pour calculer le déplacement encadrant ce point. Le facteur 0.1 se place directement devant chacune des deux longueurs, avant le signe *.

Résultat attendu

Des flèches globalement tangentes à la trajectoire, plus longues au début (la balle va vite) puis de plus en plus courtes vers la fin du tracé (la balle ralentit en montant) : c'est bien le comportement attendu du vecteur vitesse.

Pense-bête — passer de 1D à 2D

nindices 0 à len(t)-2 : pour les déplacements
mindices 0 à len(t)-3 : pour les vitesses (besoin de i+2)
x[i+1]abscisse au point suivant
arg 1, 2x, y de départ de la flèche
arg 3, 4longueur horizontale et verticale
0.1 *facteur d'échelle pour rester lisible

Pas de Thonny sous la main ? Utilise Basthon

Ouvrir dans un nouvel onglet ↗
Basthon est une console Python qui tourne directement dans le navigateur, sans rien installer. Colle ici (avec Ctrl+V ou Cmd+V) le code copié avec les boutons « Copier le code » ci-dessus, puis appuie sur Entrée pour l'exécuter.