Mouvement circulaire − Composantes de l'accélération dans le repère de Frenet¶
- Objectif : Représenter, à l’aide de python, les variations des composantes de l'accélération dans le repère de Frenet.
- Coller le bloc suivant en premier. Il reprend les résultats du travail précédent.
En particulier, il lit et traite le fichier csv « pointage_200ms.csv »
Ce fichier doit se trouver dans le même dossier que le script.
Ne tentez pas d'ouvrir ce fichier texte avec LibreOffice. Sinon, recommencez.
In [1]:
# Importation des modules
import numpy as np
import matplotlib.pylab as plt
import csv
# Création d'une fonction permettant de tracer des vecteurs avec la légende
def trace_vect(x,y,Vectx,Vecty,titre,couleur,position_du_titre):
# Champs de vecteur
q = plt.quiver(x,y,Vectx,Vecty,color = couleur,width=0.003)
# Légende des vecteurs
plt.quiverkey(q, X=0.075,Y=position_du_titre,U=10,label=titre,labelpos='E',color=couleur)
# Importation des données du fichier csv
# Création d'une liste vide appelée « table »
table = []
# Importation des données du fichier dans la liste « table »
# Le fichier csv comporte N+1 lignes de 0 à N − La première ligne contient la légende
with open('pointage_200ms.csv', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=';', quotechar='|')
for row in spamreader:
table.append(row)
# Nombre d'entrées valides de la liste « table » ie nombre de positions
N = len(table) - 1
# Initialisation du temps et des positions
temps,x,y = [],[],[]
# Importation des coordonnées X, Y et temps
# Les listes temps, x et y contiennent N valeurs de 0 à N-1.
for i in range(1,N+1):
# La première ligne de « table » contient la légende : on démarre à 1
# Le range ne balaye pas la dernière borne : [1,N+1[ ==> N valeurs de positions
# Génération des listes, avec transformation des données
temps.append(float(table[i][0].replace(',','.')))
x.append(float(table[i][1].replace(',','.')))
y.append(float(table[i][2].replace(',','.')))
# Initialisation des vitesses et des accélérations
# Autant de valeurs possibles que de positions, mais toutes ne sont pas calculables, auquel cas elle valent 0
vx =np.zeros(N) # Vitesse calculée selon l'axe des abscisses
vy =np.zeros(N) # Vitesse calculée selon l'axe des ordonnées
ax =np.zeros(N) # Accélération calculée selon l'axe des abscisses
ay =np.zeros(N) # Accélération calculée selon l'axe des ordonnées
# Calculs approchés des coordonnées des vitesses
# N-2 valeurs de vitesse de 1 à N-2
for i in range(1,N-1): # Balaye de [1,N-1[
vx[i] = (x[i+1]-x[i-1])/(temps[i+1]-temps[i-1])
vy[i] = (y[i+1]-y[i-1])/(temps[i+1]-temps[i-1])
#Calculs approchés des coordonnées des accélérations
# N-4 valeurs d'accélération de 2 à N-3
for i in range(2,N-2):
ax[i] = (vx[i+1]-vx[i-1])/(temps[i+1]-temps[i-1])
ay[i] = (vy[i+1]-vy[i-1])/(temps[i+1]-temps[i-1])
- Le bloc suivant :
- Ajoute les constantes utiles
- Calcule les valeurs expérimentales des composantes de l'accélération
- Initialise les valeurs théoriques des composantes de l'accélération
In [2]:
# Constantes du problème
R = 7.00 #Rayon de la centrifugeuse en m
k = 6.26 #constante k en m.s-2
v0 = 16.6 #constante v0 en m.s-1
# Coordonnées expérimentales de l'accélération dans le repère de Frenet
at = np.multiply(ay,x)/R - np.multiply(ax,y)/R # Accélération tangentielle
an = - np.multiply(ay,y)/R - np.multiply(ax,x)/R # Accélération normale
# Initialisation des accélérations théoriques de Frenet
an_th = np.zeros(N) # Accélération théorique selon le vecteur unitaire normal
at_th = np.zeros(N) # Accélération théorique selon le vecteur unitaire tangent
- Compléter le bloc suivant
In [ ]:
# Calculs des coordonnées théoriques de l'accélération dans le repère de Frenet
for i in range(1,N-1):
# Première partie du mouvement − Accéléré
if temps[i] <= 2.65 :
an_th[i] =
at_th[i] =
# Seconde partie du mouvement − Uniforme
else :
an_th[i] =
at_th[i] =
- Décommenter le tracé des valeurs théoriques.
- Ajouter les légendes.
- Exécuter le code.
In [ ]:
# Imposer la taille de la zone de travail
plt.figure(1, figsize=(10,10))
# Valeurs expérimentales
plt.plot(temps[2:-2],an[2:-2],".",label="Légender la courbe")
plt.plot(temps[2:-2],at[2:-2],".",label="Légender la courbe")
# Décommenter pour tracer vos valeurs théoriques
plt.plot(temps[2:-2],an_th[2:-2],label="Légender la courbe")
plt.plot(temps[2:-2],at_th[2:-2],label="Légender la courbe")
# Position du bloc légende
plt.legend(loc='upper left')
# Étiquettes des axes
plt.xlabel(r'$ t (s)$')
plt.ylabel(r'$ accélération (m/s²)$')
# Titre du graphique
plt.title("Composantes de l'accélération de la cabine dans le repère de Frenet",loc='left')
# Affichage
plt.grid()
plt.show()