Présentation de l'activité et objectif
Vous disposez de votre fichier de pointage au format csv contenant les positions du ballon au cours du temps.
Le programme en Python va permettre :
d'ouvrir ce fichier de pointage ;
de créer les grandeurs nécessaires au calcul de l'énergie cinétique, de l'énergie potentielle de pesanteur et de l'énergie mécanique ;
de calculer les valeurs de ces énergies au cours du mouvement ;
de tracer la représentation graphique de leurs variations au cours du temps.
Rappel : Expressions utiles au calcul des énergies
Expressions des énergies
On rappelle la définition du vecteur vitesse et les éléments nécessaires à la détermination de la valeur de la vitesse :
avec
d'où la valeur de la vitesse :
Programme à compléter
Question⚓
Le programme complété doit permettre :
d'obtenir les valeurs de l'énergie cinétique Ec, potentielle de pesanteur Ep et mécanique EM à tout instant ;
la représentation graphique des variations de chaque énergie au cours du temps.
Quelques éléments de syntaxe Python :
len(nom_liste) renvoie le nombre de termes d'une liste ;
le premier terme d'une liste a pour indice 0 et le dernier len(liste)-1.
x[ : :2] extrait un terme sur 2 d'une liste ;
x[1 :-1 :] ne prend pas en compte le deuxième et le dernier terme d'une liste.
en Python, la syntaxe de la puissance est le double astérisque ** : \(b^2\) s'écrit dans un programme b**2. La racine carrée peut s'écrire b**0.5.
On donne ci-dessous le programme commenté à compléter pour obtenir le tracé des vecteurs vitesse et variation de vitesse.
Vous pourrez en faire un copier-coller dans votre éditeur Python en activant d'abord l'affichage en texte brut :
# Ce programme permet d'obtenir les variations des énergies potentielle, cinétique
# et mécanique au cours du temps à partir d'un fichier csv contenant les positions
# x et y au cours du temps (obtenu par un pointage sur une vidéo)
# Les zones marquées À COMPLÉTER attendent que vous entriez les valeurs ou expressions correctes.
from tkinter.filedialog import askopenfilename
import matplotlib.pyplot as plt
from numpy import loadtxt
# Ouverture en mode graphique d'un fichier de pointage au format CSV
# Ne pas modifier les lignes 7 à 17
# on peut donner le chemin d'accès vers le fichier ou la fonction askopenfilename
name = askopenfilename(filetypes=(("Fichier CSV", "*.csv"), ("Fichier Texte",
"*.txt"), ("Tous les fichiers", "*.*")), title="Choisir un fichier")
# name contient le chemin et le nom du fichier à traiter.
# On importe les valeurs de la date t, de l'abscisse x et de l'ordonnée y dans trois listes.
t, x, y = loadtxt(name, skiprows=1, delimiter=";",
unpack=True, usecols=(0, 1, 2))
# On dispose à ce stade des trois listes contenant les coordonnées du ballon.
dt = t[1] - t[0] # Détermination de l'intervalle de temps entre deux pointages
# FIN D'IMPORTATION DES DONNÉES DE POSITION
# Saisie au clavier de la masse de la balle
m = float(input("Entrez la masse de l'objet en kg : "))
g = 9.8 # intensité de la pesanteur
dt = t[1] - t[0] # Calcul de l'intervalle de temps entre deux pointages
"""Calcul des coordonnées des vecteurs vitesse
Compléter les zones indiquées en adaptant en Python les relatins données dons
la description de l'activité"""
# la vitesse n'est pas calculable à la première et à la dernière position
vx = [À COMPLÉTER for i in range(1, len(t)-1)]
vy = [À COMPLÉTER for i in range(1, len(t)-1)] # même remarque
v = [À COMPLÉTER for i in range(len(vx))]
"""Calcul des énergies
Compléter les zones indiquées en adaptant en Python les relatiosn données dans
la description de l'activité"""
# y[1:-1:] : on ne calcule pas pour la première et la dernière position
Ep = [À COMPLÉTER for val in y[1:-1:]]
Ec = [À COMPLÉTER for val in v]
Em = [À COMPLÉTER for i in range(len(Ep))]
# Calcul des coordonnées des vecteurs variation de vitesse
"""Les listes en abscisses et ordonnées doivent avoir les mêmes dimensions :
on supprime la première et la dernière date de la liste t"""
plt.close()
plt.plot(t[1:-1:], Ep, "b+", label="Énergie potentielle")
plt.plot(t[1:-1:], Ec, "r+", label="Énergie cinétique")
plt.plot(t[1:-1:], Em, "g+", label="Énergie mécanique")
plt.title("Évolution des énergies au cours du temps")
plt.xlabel("t (s)")
plt.ylabel("Énergies en J")
plt.grid()
plt.legend()
plt.show()
Questions :
Dans une boucle for, range(50) permet de faire varier l'indice de 0 à 49 : la valeur 50 n'est pas atteinte.
Pourquoi choisit-on range(1, len(t) - 1) aux lignes 38 et 39 du programme ?
Compléter le programme (lignes 38 à 40) de façon à obtenir les coordonnées du vecteur vitesse au point n°i (listes vx et vy) et la valeur de la vitesse (liste v).
Compléter les lignes 47 à 49 de façon à calculer les énergies Ep, Ec et Em.
Une fois votre programme complété, utilisez-le avec votre fichier de pointage sur le ballon de basket. On prendra la masse du ballon \(m = 0{,}6\ \mathrm{kg}\)
En cas de problème avec le programme à compléter, vous pouvez récupérer la version complète dans la Solution.
Solution⚓
Si vous n'avez pas réussi à compléter correctement votre programme, vous pouvez utiliser celui qui vous est proposé ci-dessous.
# Ce programme permet d'obtenir les variations des énergies potentielle, cinétique
# et mécanique au cours du temps à partir d'un fichier csv contenant les positions
# x et y au cours du temps (obtenu par un pointage sur une vidéo)
# Les zones marquées À COMPLÉTER attendent que vous entriez les valeurs ou expressions correctes.
from tkinter.filedialog import askopenfilename
import matplotlib.pyplot as plt
from numpy import loadtxt
# Ouverture en mode graphique d'un fichier de pointage au format CSV
# Ne pas modifier les lignes 7 à 17
# on peut donner le chemin d'accès vers le fichier ou la fonction askopenfilename
name = askopenfilename(filetypes=(("Fichier CSV", "*.csv"), ("Fichier Texte",
"*.txt"), ("Tous les fichiers", "*.*")), title="Choisir un fichier")
# name contient le chemin et le nom du fichier à traiter.
# On importe les valeurs de la date t, de l'abscisse x et de l'ordonnée y dans trois listes.
t, x, y = loadtxt(name, skiprows=1, delimiter=";",
unpack=True, usecols=(0, 1, 2))
# On dispose à ce stade des trois listes contenant les coordonnées du ballon.
dt = t[1] - t[0] # Détermination de l'intervalle de temps entre deux pointages
# FIN D'IMPORTATION DES DONNÉES DE POSITION
# Saisie au clavier de la masse de la balle
m = float(input("Entrez la masse de l'objet en kg : "))
g = 9.8 # intensité de la pesanteur
dt = t[1] - t[0] # Calcul de l'intervalle de temps entre deux pointages
"""Calcul des coordonnées des vecteurs vitesse
Compléter les zones indiquées en adaptant en Python les relatins données dons
la description de l'activité"""
# la vitesse n'est pas calculable à la première et à la dernière position
vx = [(x[i+1] - x[i-1]) / (2 * dt) for i in range(1, len(t)-1)]
vy = [(y[i+1] - y[i-1]) / (2 * dt)
for i in range(1, len(t)-1)] # même remarque
v = [(vx[i]**2 + vy[i]**2)**0.5 for i in range(len(vx))]
"""Calcul des énergies
Compléter les zones indiquées en adaptant en Python les relatiosn données dans
la description de l'activité"""
# y[1:-1:] : on ne calcule pas pour la première et la dernière position
Ep = [m * g * val for val in y[1:-1:]]
Ec = [0.5 * m * val**2 for val in v]
Em = [Ep[i] + Ec[i] for i in range(len(Ep))]
# Calcul des coordonnées des vecteurs variation de vitesse
"""Les listes en abscisses et ordonnées doivent avoir les mêmes dimensions :
on supprime la première et la dernière date de la liste t"""
plt.close()
plt.plot(t[1:-1:], Ep, "b+", label="Énergie potentielle")
plt.plot(t[1:-1:], Ec, "r+", label="Énergie cinétique")
plt.plot(t[1:-1:], Em, "g+", label="Énergie mécanique")
plt.title("Évolution des énergies au cours du temps")
plt.xlabel("t (s)")
plt.ylabel("Énergies en J")
plt.grid()
plt.legend()
plt.show()
Avec la méthode choisie pour estimer la valeur de la vitesse (points qui encadrent le point étudié), le premier et le dernier point enregistrés ne sont pas exploitables. On ne parcourt donc pas toutes les valeurs pour estimer la vitesse.
Lignes 38 à 40 complétées :
Lignes 47 à 49 complétées :
Exemple de résultat.