Echanges autour d'EduPython.
Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Dans les nouveaux programmes de Physique-Chimie les élèves doivent représenter des trajectoires, des vecteurs Vitesse, des variations de vecteurs Vitesse grâce à un langage de programmation.
J'ai fait quelques essais avec Matplotlib et j'ai rusé en détournant les flèches prévues pour les annotations mais je suppose qu'il existe d'autres moyens.
Merci pour vos pistes, vos idées.
t = [0,0.04,0.08,0.12,0.16,0.2,0.24,0.28,0.32,0.36,0.4,0.44,0.48,0.52,0.56,0.6,0.64,0.68,0.72,0.76,0.8,0.84,0.88,0.92] x = [2.386206897,2.593103448,2.8,3.020689655,3.213793103,3.434482759,3.64137931,3.820689655,4.027586207,4.234482759,4.427586207,4.634482759,4.84137931,5.034482759,5.24137931,5.434482759,5.627586207,5.820689655,6.027586207,6.220689655,6.427586207,6.606896552,6.813793103,7.020689655] y = [2.910344828,3.144827586,3.365517241,3.55862069,3.737931034,3.903448276,4.055172414,4.193103448,4.303448276,4.4,4.496551724,4.565517241,4.620689655,4.662068966,4.689655172,4.703448276,4.675862069,4.662068966,4.634482759,4.579310345,4.510344828,4.44137931,4.331034483,4.234482759] vx = [] vy = [] tModif = [] for i in range(1,len(t)-1) : vx.append((x[i+1]-x[i-1])/0.08) vy.append((y[i+1]-y[i-1])/0.08) tModif.append(t[i]) # pyplot.annotate('', xy = (x[i]+vx[i-1]/20, y[i]+vy[i-1]/20), xytext = (x[i], y[i]), arrowprops = {'edgecolor': 'blue','width': 1, 'headwidth': 3}) for i in range(1,len(vx)-1) : # pyplot.annotate('', xy = (x[i+1]+vx[i+1]/10, y[i+1]+vy[2]/10), xytext = (x[i+1], y[i+1]), arrowprops = {'edgecolor': 'blue','width': 1, 'headwidth': 3}) # pyplot.annotate('', xy = (x[i+1]+vx[i+1]/10-vx[i-1]/10, y[i+1]+vy[i+1]/10-vy[i-1]/10), xytext = (x[i+1]+vx[i+1]/10, y[i+1]+vy[i+1]/10), arrowprops = {'edgecolor': 'blue','width': 1, 'headwidth': 3}) pyplot.annotate('', xy = (x[i+1]+vx[i+1]/10-vx[i-1]/10, y[i+1]+vy[i+1]/10-vy[i-1]/10), xytext = (x[i+1], y[i+1]), arrowprops = {'edgecolor': 'green','width': 1, 'headwidth': 3}) pyplot.scatter(x, y, c = 'red', marker = '+') pyplot.show()
Hors ligne
Bonjour,
Finalement j'ai trouvé la fonction arrow.
Voici le code final pour les collègues intéressés.
t = [0,0.04,0.08,0.12,0.16,0.2,0.24,0.28,0.32,0.36,0.4,0.44,0.48,0.52,0.56,0.6,0.64,0.68,0.72,0.76,0.8,0.84,0.88,0.92] x = [2.386206897,2.593103448,2.8,3.020689655,3.213793103,3.434482759,3.64137931,3.820689655,4.027586207,4.234482759,4.427586207,4.634482759,4.84137931,5.034482759,5.24137931,5.434482759,5.627586207,5.820689655,6.027586207,6.220689655,6.427586207,6.606896552,6.813793103,7.020689655] y = [2.910344828,3.144827586,3.365517241,3.55862069,3.737931034,3.903448276,4.055172414,4.193103448,4.303448276,4.4,4.496551724,4.565517241,4.620689655,4.662068966,4.689655172,4.703448276,4.675862069,4.662068966,4.634482759,4.579310345,4.510344828,4.44137931,4.331034483,4.234482759] vx = [] vy = [] tModif = [] for i in range(1,len(t)-1) : vx.append((x[i+1]-x[i-1])/0.08) vy.append((y[i+1]-y[i-1])/0.08) tModif.append(t[i]) print("La valeur maximale pour vx est",max(vx),"m/s.") print("La valeur maximale pour vy est",max(vy),"m/s.") echelle = float(input("Choisir une échelle : 1 m pour ... m/s.")) for i in range(1,len(vx)-1) : # pyplot.arrow(x[i+1], y[i+1], vx[i+1]/20, vy[i+1]*echelle , color = 'blue', head_width = 0.02, length_includes_head = True) # pyplot.arrow(x[i+1]+vx[i+1]*echelle, y[i+1]+vy[i+1]*echelle, -vx[i-1]*echelle, -vy[i-1]*echelle , color = 'green', head_width = 0.02, length_includes_head = True) pyplot.arrow(x[i+1], y[i+1], vx[i+1]*echelle-vx[i-1]*echelle, vy[i+1]*echelle-vy[i-1]*echelle ,color = 'red', head_width = 0.02, length_includes_head = True) pyplot.scatter(x, y, c = 'red', marker = '+') pyplot.show()
Hors ligne
Merci pour l'information.
Bonne journée,
Vincent
Hors ligne
Moi j'ai fait ca!!^^
scripte qui a l'avantage de prendre les coordonnées des points dans un fichier .cvs généré par exemple par avimeca. (pas de virgule mais des points pour les décimales et pas d'écriture avec exposant....)
A l'affichage j'ai rajouté les noms des points et des vecteurs vitesses. Si qqu'un sait comment rajouter une flèche sur les noms des vecteurs je suis preneur!
################################################################################
###########PROGRAMME DE TRACAGE DE LA TRAJECTOIRE ET DES VECTEURS VITESSES######
################################################################################
import numpy as np
import matplotlib.pyplot as plt
import pandas
import math
from math import sqrt
#from sympy import *
def Sqr(a):
return a*a
def Distance(x1,y1,x2,y2):
return sqrt(Sqr(y2-y1)+Sqr(x2-x1))
#Importation des coordonnées des positions successives du système
data=pandas.read_csv('*.csv',sep='\t')#met ici le nom de ton fichier avec l'extension sans enlever les guillements!
#python crée ici le tableau de la position despoints de la chronophtographie des points à l'aide de ton fichier
x=[]
y=[]
for i in range(data.shape[0]):
x.append(float(data.iloc[i,1]))
y.append(float(data.iloc[i,2]))
#Tracé de la chronophotographie
plt.plot(x,y,'--o',markersize=4)
plt.xlabel("x (en m)")
plt.ylabel("y (en m)")
plt.title("Chronophotographie du mouvement")
plt.axis('equal')
X = 0.1*max(x)
Y = 0.1*max(y)
#Tracé des vecteurs vitesse
N=data.shape[0]
dt=0.04#indique ici la valeur de l'intervalle de temps de la chronophotographie
for k in range(0,N-1,2) :
Vx=(x[k+1]- x[k])/dt
Vy=(y[k+1]- y[k])/dt
echelle=0.06
Vx=Vx*echelle
Vy=Vy*echelle
d=Distance(x[k],y[k],x[k+1],y[k+1])
plt.text(x[k],y[k]-Y,f'A{k}',fontsize=8)
plt.text(x[k+1],y[k+1]-Y,f'A{k+1}',fontsize=8)
plt.quiver(x[k],y[k],Vx,Vy, color="red",scale=1,scale_units='xy',headwidth=2,width=0.006)
plt.text(-X/d*(y[k+1]-y[k])+(x[k]+x[k+1])/2,(Y/d*(x[k+1]-x[k])+(y[k]+y[k+1])/2),f'V{k}',fontsize=6,color='r')
#Affichage de la chronophotographie et des vecteurs vitesses (pour 1 point sur 2)
plt.show()
Hors ligne
Voici l'astuce utilisée :
# Instruction ci-dessous permet de mettre une flèche sur le nom des vecteurs (sans utiliser LaTeX)
plt.arrow(x[k], y[k]+0.30, 0.05, 0, color = 'black', head_width = 0.02)
Hors ligne
Pages : 1