Physique-chimie · 2de · Enseignement commun

De la chute d'une bille
au premier graphe.

Tu as pointé les positions successives d'une bille en chute libre sur une chronophotographie. Il est temps de faire parler ces mesures avec Python : construire des tableaux, une base de temps, et tracer les tout premiers graphes de ta scolarité de programmeur.

chronophotographie.py — aperçut = 0.00 s

Objectif de la fiche : représenter les positions successives d'un système modélisé par un point (ici, une bille) lors d'une évolution unidimensionnelle, à l'aide du langage Python.

Tu vas travailler avec deux bibliothèques : numpy pour manipuler des tableaux de nombres, et matplotlib.pyplot pour tracer des graphiques. Chaque étape ci-dessous contient un script incomplet : à toi de le compléter, puis de le copier-coller dans Thonny (ou dans la console Basthon tout en bas de la page si tu n'as pas Thonny sous la main).

01

Premiers tableaux

Consigne
  • Complète les deux lignes import pour charger numpy sous le nom np et la fonction pyplot de matplotlib sous le nom plt.
  • Reporte dans ymes les 16 valeurs du tableau de mesures ci-dessous. La première vaut 0.
  • Vérifie ta saisie avec print avant de passer à l'étape suivante.

D'où viennent ces mesures ?

Sur une chronophotographie (photo imprimée, ou vidéo ouverte dans un logiciel de pointage), les positions successives de la balle ont été pointées à intervalles de temps égaux, puis relevées dans un tableau : c'est ce tableau que tu vas maintenant saisir et exploiter avec Python. Le point n°0, en haut de la chute, est pris comme origine (y = 0) ; les valeurs suivantes sont négatives car l'axe des ordonnées est orienté vers le haut alors que la bille descend.

point n° 01234567 89101112131415
y mesuré 0−0,7−1,5−2,3−3,5−4,5−5,9−7,7 −8,8−10,6−12,3−14,2−16,4−18,5−21−23,5

Remarque : les valeurs sont de plus en plus négatives, et l'écart entre deux points consécutifs augmente d'un point au suivant — la bille accélère au cours de sa chute.

etape1_tableaux.py
# TODO : importe numpy sous le nom np
import ____ as ____

# TODO : importe la fonction pyplot du module matplotlib sous le nom plt
import ____.____ as ____

# Ordonnées pointées sur la chronophotographie
# Reporte ici les valeurs lues dans le tableau de mesures ci-dessus
ymes = np.array([-0, ____, ____, ____, ____, ____, ____, ____,
        ____, ____, ____, ____, ____, ____, ____, ____])

print('ymes :', ymes)
Indice

En Python, les virgules séparent les éléments d'un tableau et le point sert de séparateur décimal (2.5 et non 2,5, et -0.7 pour −0,7). N'oublie pas les guillemets autour du texte passé à print.

02

Construire la base de temps

Consigne
  • L'expérience dure 0,25 s et compte 16 points de mesure.
  • Utilise np.linspace(début, fin, nombre_de_points) pour engendrer les 16 instants correspondants.
  • Ajoute une ligne print pour vérifier que le tableau t contient bien 16 valeurs entre 0 et 0,25.
etape2_temps.py
# (reprends les imports et le tableau ymes de l'étape 1 au-dessus de ce script)

# TODO : complète np.linspace avec le début, la fin, et le nombre de points
t = np.linspace(____, ____, ____)

print('t :', t)
Indice

16 points de mesure ne veut pas dire 16 intervalles : np.linspace prend directement le nombre de points à engendrer, du début à la fin inclus.

03

Premier graphe

Consigne
  • Utilise plt.figure() pour ouvrir une nouvelle fenêtre graphique, puis plt.plot(x, y) pour tracer les positions mesurées ymes en fonction du temps t.
  • N'oublie pas plt.show() à la fin, sinon le graphe ne s'affichera pas dans Thonny.
etape3_graphe.py
# TODO : ouvre une nouvelle figure, puis trace ymes en fonction de t
plt.figure()
plt.plot(____, ____)
plt.show()
Résultat attendu

Une courbe qui descend de plus en plus vite, avec des valeurs de plus en plus négatives : c'est le signe d'une vitesse qui augmente au cours de la chute. Si la courbe est plate ou remonte, relis les valeurs de ymes.

04

Passer à l'échelle réelle et personnaliser le graphe

Consigne
  • L'échelle de la photo est de 2/100. Calcule yreelle en multipliant ymes par ce facteur.
  • Trace yreelle en fonction de t avec des ronds rouges (indice : 'ro') et une légende "y=f(t)".
  • Complète les étiquettes des axes, la grille, la légende et le titre "chute libre".
etape4_echelle_reelle.py
# TODO : calcule le tableau des ordonnées réelles (facteur d'échelle 2/100)
yreelle = ymes * (____ / ____)

# TODO : trace yreelle en fonction de t, en ronds rouges, avec une légende
plt.plot(____, ____, '__', label="____")

# TODO : personnalise le graphe
plt.xlabel("____")
plt.ylabel("____")
plt.grid()
plt.legend()
plt.title("____")
plt.show()
Indice

Le marqueur 'ro' se lit lettre par lettre : red (couleur) et o (gros point). Le pense-bête juste en dessous liste les autres combinaisons possibles.

Pense-bête — plt.plot(x, y, 'couleur+marqueur')

'r'red — rouge
'k'black — noir
'b'blue — bleu
'y'yellow — jaune
'g'green — vert
'o'gros point (rond)
'-'ligne continue
'.'pointillé
'x'croix
's'carré (square)
'v'triangle
05

Pour aller plus loin (facultatif)

Défi
  • La fonction np.diff(tableau) calcule la différence entre chaque valeur successive d'un tableau.
  • La vitesse moyenne entre deux instants s'écrit v = Δy / Δt. Utilise np.diff sur yreelle et sur t pour construire un tableau v.
  • v contient un point de moins que t : on le trace donc en fonction de t[1:] (le tableau t privé de son premier élément).
etape5_vitesse_bonus.py
# TODO : calcule la vitesse moyenne entre deux points successifs
v = np.diff(____) / np.diff(____)

# TODO : trace v en fonction de t[1:], en croix noires par exemple
plt.plot(____, v, '__')
plt.xlabel("temps (s)")
plt.ylabel("vitesse (m/s)")
plt.title("____")
plt.show()
Indice

Si la bille tombe bien en chute libre, les points de ce graphe devraient s'aligner à peu près sur une droite : une piste pour une prochaine fiche.

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.