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()