TP ASSISTANCE GRAVITATIONELLE
Chapitre 11 livre : Activité 3
Programme permettant de représenter les positions successives du centre de la bille issues d'un pointage vidéo ainsi que les vecteurs vitesse et les vecteurs accélération à partir d'un fichier de données de format .txt.
Ce code source permet de représenter la trajectoire et les vecteurs vitesse et accélération du centre de masse de la bille lors du mouvement.
Fichier fourrni à ne pas modifier
L'éxécution lance deux cadres de dialogue pour choisir la fréquence de représentation des vecteurs. Nous allons tracer un vecteur tous les 2 points.
import matplotlib.pyplot as plt
# A NE PAS MODIFIER ==============================================================
# Extraction des données du fichier texte de pointage
t,x,y=[],[],[] # définition de 3 listes vides pour les 3 variables t, x et y
# ouverture du fichier texte avec la méthode with
with open("pointage3p252.txt", "r") as fichier:
header = [fichier.readline() for i in range(3)]
# Lecture de la première ligne de DONNEES en remplaçant la virgule par le point
line = fichier.readline().replace(',','.')
# Bloc d'instructions à réaliser sur chaque ligne de données
while line:
# Séparation des valeurs d'une ligne selon le séparateur indiqué dans split()
ti,xi,yi=line.split(';')
t.append(float(ti)) # dates (en s)
x.append(float(xi)) # abscisse (en m)
y.append(float(yi)) # ordonnée (en m)
line=fichier.readline().replace(',','.') # Lecture de la ligne de données suivante
# ================================================================================
N=len(t) # Nombre de positions
print("\nLe pointage comporte",N,"positions numérotées de",0,"à",N-1,".")
# Tracé des points de la trajectoire y=f(x)
plt.title('Vecteurs vitesse et accélération') # titre
plt.xlabel('x (en m)') # légende de l'axe des abscisses
plt.ylabel('y (en m)') # légende de l'axe des abscisses
plt.axis('equal') # même échelle sur les axes
# Représentation des points de coordonnées (x(t),y(t)),rouge'r',forme'o',taille 2
plt.plot(x,y,'ro',ms=2)
# Calculs des coordonnées et de la norme des vecteurs vitesse
# rangées dans 3 listes vxi, vyi et vi
vx,vy,v=[''],[''],[''] # La première valeur de chaque liste est remplie par
# un espace pour la position 0 non calculable
for i in range(1,N-1) :
# Calcul de la coordonnée vxi du vecteur vitesse sur l'axe x au point n°i
vxi=(x[i+1]-x[i-1])/(t[i+1]-t[i-1])
vx.append(vxi) # insère la valeur vxi en dernière position de la liste vx
# Calcul de la coordonnée vyi du vecteur vitesse sur l'axe y au point n°i
vyi=(y[i+1]-y[i-1])/(t[i+1]-t[i-1])
vy.append(vyi) # insère la valeur vyi en dernière position de la liste vy
# Calcul de la norme vi du vecteur vitesse au point n°i
vi=(vxi**2+vyi**2)**(1/2)
v.append(vi) # insère la valeur vi en dernière position de la liste v
# Option pour ne représenter qu'un vecteur vitesse tous les n points
print("\nReprésenter :")
n=1
# Représentation des vecteurs vitesse tous les n points
# Affichage des coordonnées vxi, vyi et de la norme vi
print("\nPoint n°"," \t vx (en m.s-1)", " \t vy (en m.s-1)"," \t v (en m.s-1)")
for i in range(1,N-1,n) :
# Représente au point n°i de coordonnées (x[i],y[i])
# un vecteur de coordonnées (vx[i]/20,vy[i]/20)
plt.arrow(x[i], y[i], vx[i]/20, vy[i]/20, width=0.0005,
length_includes_head=True, head_length=0.0025, head_width=0.0025, color='g')
# Affiche les coordonnées (vxi,vyi) et la norme vi avec 2 décimales
print(i," \t\t",'%+.2f'% vx[i]," \t\t",'%+.2f'% vy[i]," \t\t",'%.2f'% v[i])
Partie 1 à compléter
Afin de faciliter les calculs, on définit la variable delta_vxi :
# Calculs des coordonnées des vecteurs variation de vitesse et accélération
# rangées dans 5 listes delta_vxi, axi, delta_vyi, axi et ayi
delta_vx,delta_vy=['',''],['',''] # Les 2 premières valeurs sont remplies par un
ax,ay,a=['',''],['',''],['',''] # espace pour les positions 0 et 1 non calculables
Puis, pour chaque point i, on calcule:
Finalement, on ajoute chacune de ces valeurs à leur liste correspondente
for i in range(2,N-2) :
# Calcul des coordonnées delta_vxi du vecteur variation de vitesse
# sur l'axe x au point n°i, et des coordoonées axi du vecteur accélération
delta_vxi=vx[i+1]-vx[i-1]
axi = delta_vxi/(t[i+1]-t[i-1]) # calcule la valeur axi à partir de delta_vxi
ax.append(axi) # insère la valeur axi en dernière position de la liste ax
# Calcul des coordonnées delta_vyi du vecteur variation de vitesse
# sur l'axe y au point n°i, et des coordoonées ayi du vecteur accélération
delta_vyi = vy[i+1] - vy[i-1] # calcule la valeur delta_vyi
ayi = delta_vyi/(t[i+1]-t[i-1]) # calcule la valeur ayi à partir de delta_vyi
ay.append(ayi) # insère la valeur ayi en dernière position de la liste ay
# Calcul de la norme du vecteur accélération au point n°i
ai = (axi**2+ayi**2)**(1/2) # calcule la norme du vecteur accélération au point n°i
a.append(ai) # insère la valeur ai en dernière position de la liste a
Partie 2 à compléter
## REPRISE DE LA CONFIGURATION DU GRAPHIQUE
plt.title('Vecteurs vitesse et accélération') # titre
plt.xlabel('x (en m)') # légende de l'axe des abscisses
plt.ylabel('y (en m)') # légende de l'axe des abscisses
plt.axis('equal') # même échelle sur les axes
plt.plot(x,y,'ro',ms=2)
for i in range(1,N-1,1) :
# Représente au point n°i de coordonnées (x[i],y[i])
# un vecteur de coordonnées (vx[i]/20,vy[i]/20)
plt.arrow(x[i], y[i], vx[i]/20, vy[i]/20, width=0.0005,
length_includes_head=True, head_length=0.0025, head_width=0.0025, color='g')
# Affiche les coordonnées (vxi,vyi) et la norme vi avec 2 décimales
print(i," \t\t",'%+.2f'% vx[i]," \t\t",'%+.2f'% vy[i]," \t\t",'%.2f'% v[i])
## À COMPLÉTER
# Option pour ne représenter qu'un vecteur accélération tous les p points
p=1
# Représentation des vecteurs accélération tous les n points
# Affichage des coordonnées axi, ayi et de la norme ai
print("\nPoint n°"," \t ax (en m.s-2)", " \t ay (en m.s-2)"," \t a (en m.s-2)")
for i in range(2,N-2,p) :
# Représente au point n°i de coordonnées (x[i],y[i])
# un vecteur de coordonnées (ax[i]/50,ay[i]/50)
plt.arrow(x[i], y[i], ax[i]/50, ay[i]/50, width=0.0005,
length_includes_head=True, head_length=0.0025, head_width=0.0025, color='b')
# Affiche les coordonnées (axi,ayi) et la norme ai avec 2 décimales
print(i," \t\t",'%+.2f'% ax[i]," \t\t",'%+.2f'% ay[i]," \t\t",'%.2f'% a[i])
plt.show()