ACTIVITE PYTHON Tracé de vecteurs vitesse sur Python à partir d’un pointage vidéo

Acquisition et export du tableau de données

Remarque : Plusieurs méthodes sont possibles avec matplotlib. Selon la version de Windows ou MacOS, certaines fonctionnent mieux que d’autres. Ces 3 méthodes sont quiver, annotate ou arrow. La méthode choisie ici est quiver, les autres ont été mises en commentaires. Faire le test en « décommentant » les lignes de codes pour les autres méthodes.

Avec Avimeca ou Regressi (exemple de chute libre) :

Avec Avi Meca :

Procéder au pointage de la séquence vidéo à étudier.
Dans FichierMesuresEnregistrer dans un fichier, choisir le format txt (type de séparateur des données : Tabulation)

Il est nécessaire de supprimer les trois premières lignes du fichier texte, en modifiant le fichier directement dans le Bloc-Notes

Attention : ce fichier pointage.txt doit être placé dans le même dossier que le fichier python à exécuter.

Avec Regressi :

Procéder au pointage de la séquence vidéo à étudier puis basculer sur Regressi.

Dans Fichier, Enregistrer sous, choisir le format txt (texte avec tabulation)

Puis cocher Valeurs seules

Attention : ce fichier pointage.txt doit être placé dans le même dossier que le fichier python à exécuter.

Exécution du code Python avec récupération des données : vecteurs_vitesse.py



import matplotlib.pyplot as plt # pour les graphiques
import numpy as np # numpy pour l'importation des donnees en format txt

# importation des donnees txt obtenues à la suite du pointage 
# (sur AviMeca on a supprimé les 3 premieres lignes dans le fichier texte pour garder les valeurs seules)
lines = open('pointage.txt').readlines() #lecture des lignes du fichier texte
for i in range(len(lines)):                  # On remplace les virgules par des points pour les nombres décimaux
   lines[i]=lines[i].replace(',','.')

open('data.txt', 'w').writelines(lines) #création d'un nouveau fichier texte avec les précédentes modifications
data = np.loadtxt('data.txt')# importation du nouveau fichier texte pour récupérer les valeurs de t, x et y dans un tableau

t = data[:,0] # selection de la premiere colonne
y = data[:,2] # selection de la troisieme colonne
x = [0]*len(y) # Mouvement à une dimension : on crée une liste de 0 pour x,de la même longueur que la liste y


# creation de listes vides pour les composantes des vitesses
vx = []
vy = []

# boucle pour calcul des composantes vx et vy et construction de fleches 
# a partir de la methode quiver de la fonction pyplot 
# (on peut aussi utiliser les méthodes annotate et arrow)
for i in range(0,len(t)-1) :
    vx.append((x[i+1]-x[i])/(t[i+1]-t[i]))
    vy.append((y[i+1]-y[i])/(t[i+1]-t[i]))

    plt.quiver(x[i],y[i], vx[i], vy[i],color = 'r',width=0.005,scale=50,units='xy',angles='xy')
    # méthode pour tracer des vecteurs

    #plt.annotate('', xy = (x[i]+vx[i-1]/40, y[i]+vy[i-1]/40), xytext = (x[i], y[i]), arrowprops = {'color' : 'r','width': 0.5, 'headwidth': 2})
    # autre méthode pour tracer des vecteurs : xytext donne les coordonnees du debut de la fleche, xy donne les coordonnnees de la pointe de la fleche
    
    # plt.arrow(x[i],y[i], vx[i]/40, vy[i]/40,length_includes_head=True,color = 'r',width=0.0001)
    # 3ème méthode pour tracer des vecteurs   plt.arrow(x[i],y[i], vx[i]/20, vy[i]/20,length_includes_head=True,color = 'r',width=0.005)    
   

# afficher points avec croix rouges. Inserer texte (titre, nom des axes,…)
plt.figure(1)
plt.scatter(x, y, c = 'red', marker = '+')
plt.suptitle (" Représentation de $y=f(x)$ " )
plt.title (" Tracé des vecteurs vitesse " )
plt.xlabel("$x$")
plt.ylabel("$y$")
plt.show()

Exécuter le script pour obtenir la représentation graphique de y=f(x) et le tracé des vecteurs sur Pyzo (raccourci ctrl+ E):

Avec Latis Pro (exemple de mouvement parabolique):

Procéder au pointage de la séquence vidéo à étudier.
Dans FichierExportation, ajouter les courbes Mouvement x et Mouvement Y.

Exporter sous format txt en choisissant comme séparateur :

  • Point pour Décimal
  • Tabulation pour Entre les données

On doit supprimer la première ligne pour conserver uniquement les valeurs. Il est impossible de le demander dans le script (voir ci-dessous)

Attention : ce fichier parabole_Latis_Pro.txt doit être placé dans le même dossier que le fichier python à exécuter.

"""
Tracé de vecteurs vitesse à partir du fichier txt d'un pointage video avec Latis Pro
on utlise np.loadtxt() de numpy pour récupérer les données mais il faut supprimer la première ligne du fichier txt, soit "à la main" soit ici directement dans le programme en créant un nouveau fichier texte data.txt
"""

import matplotlib.pyplot as plt # pour les graphiques
import numpy as np # numpy pour l'importation des donnees en format txt

# importation des donnees txt obtenues apres pointage en supprimant la premiere ligne dans le fichier texte (obtenu apres le pointage du mouvement parabolique sur Latis Pro)
lines = open('parabole_Latis_Pro.txt').readlines() #on lit les lignes du fichier texte
open('data.txt', 'w').writelines(lines[1:]) #création d'un nouveau fichier texte sans la première ligne
data = np.loadtxt('data.txt')# importation du nouveau fichier texte pour récupérer les valeurs det, x et y dans un tableau

t = data[:,0] # selection de la premiere colonne
x = data[:,1] # selection de la deuxieme colonne
y = data[:,3] # selection de la quatrieme colonne



# creation de listes vides pour les composantes des vitesses et acceleration
vx = []
vy = []


# boucle pour calcul de vx et vy et construction de fleches  a  partir de la methode pyplot de la fonction pyplot (legendes sans texte)
for i in range(0,len(t)-1) :
    vx.append((x[i+1]-x[i])/(t[i+1]-t[i]))
    vy.append((y[i+1]-y[i])/(t[i+1]-t[i]))


    plt.quiver(x[i],y[i], vx[i], vy[i],color = 'r',width=0.005,scale=20,units='xy',angles='xy')
    #  méthode pour tracer des vecteurs

    # plt.annotate('', xy = (x[i]+vx[i-1]/20, y[i]+vy[i-1]/20), xytext = (x[i], y[i]), arrowprops = {'color' : 'r','width': 1, 'headwidth': 3})
    # autre méthode pour tracer des vecteurs : xytext donne les coordonnees du debut de la fleche, xy donne les coordonnnees de la pointe de la fleche

    #plt.arrow(x[i],y[i], vx[i]/20, vy[i]/20,length_includes_head=True,color = 'r',width=0.005)
    # 3ème méthode pour tracer des vecteurs

# afficher points avec croix rouges. Inserer texte (titre, nom des axes,…)
plt.figure(1)
plt.scatter(x, y, c = 'red', marker = '+')
plt.suptitle (" Représentation de $y=f(x)$  " )
plt.title (" Tracé des vecteurs vitesse  " )
plt.xlabel("$x$")
plt.ylabel("$y$")
plt.show()





Exécuter le script pour obtenir la représentation graphique de y=f(x) et le tracé des vecteurs sur Pyzo (raccourci ctrl+ E):

Quelques liens utiles :

Laisser un commentaire