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