from math import cos, sin, radians
import matplotlib.pyplot as plt
# modélisation
m = 0.010 # kg
x = 0.0 # m
y = 0.0 # m
angle = 73 # degrée
vitesse = 7.0 # m/s
Dt = 0.075 # s
Fx = 0.0 # N
Fy = -9.81 * m # N
x_cible = 2.55 # m
y_cible = 0.0 # m
# projection vitesse sur les axes
Vx = vitesse * cos( radians(angle) )
Vy = vitesse * sin( radians(angle) )
trajectoire_x = [];
trajectoire_y = [];
# vitesses
vitesse_Vx = [];
vitesse_Vy = [];
# variation de vitesse
delta_Vx = [];
delta_Vy = [];
# calcul de la position de proche en proche
def positionSuivante( x,y,Vx,Vy,Fx,Fy,m, Dt):
Vx = Vx + Fx / m * Dt
Vy = Vy + Fy / m * Dt
x = x + Vx * Dt
y = y + Vy * Dt
return x,y,Vx,Vy
# calcul de la trajectoire, arrêt dès
# que le projectile touche le sol
while y >= 0:
trajectoire_x.append( x )
trajectoire_y.append( y )
vitesse_Vx.append( Vx )
vitesse_Vy.append( Vy )
Vx_old = Vx
Vy_old = Vy
x,y,Vx,Vy = positionSuivante(x,y,Vx,Vy,Fx,Fy,m, Dt)
delta_Vx.append( Vx - Vx_old )
delta_Vy.append( Vy - Vy_old )
# préparation du graphique
fig, ax = plt.subplots()
# tracé des vecteurs vitesse
q = ax.quiver( trajectoire_x , trajectoire_y ,vitesse_Vx , vitesse_Vy , width=0.0025 ,color='b')
ax.quiverkey(q, X=0.2, Y=1.05, U=10,label='échelle des vitesses \n $10~m.s^{-1}$',labelpos='N')
# tracé des vecteurs variation de vitesse
q = ax.quiver( trajectoire_x , trajectoire_y ,delta_Vx , delta_Vy , width=0.0025 ,color='r')
ax.quiverkey(q, X=0.7, Y=1.05, U=1,label='variation de vitesse \n $1~m.s^{-1}$',labelpos='N')
# tracé de la trajectoire
ax.plot( trajectoire_x ,trajectoire_y , 'b.',markersize=7)
ax.plot( x_cible ,y_cible , 'r*' )
# paramètres du graphique
ax.set(xlim=(-0.1 , 3 ),ylim=(-0.1 , 3 ) )
ax.set_aspect('equal')
plt.xlabel( "x /m")
plt.ylabel( "y /m")
fig.set_size_inches( 5 , 6 )
# édition du graphique
plt.savefig( 'trajectoire.svg' )
plt.show()