#*******************************************************************************************#
# Programme permettant d'afficher l'évolution temporelle des énergies d'une balle de tennis #
# au cours d'un rebond qui suit une frappe à plat et une frappe liftée                      #
# Marie-Anne Déjoan - Académie de la Guyane - Avril 2020                                    #
#*******************************************************************************************#

#-------------------------Importation des bibliothèques nécessaires--------------------------
import numpy as np
import matplotlib.pyplot as plt
from pylab import*
import csv

#-----------------------------Définition des variables globales------------------------------
m = 0.0567   # Masse de la balle de tennis en kg
g = 9.81     # Intensité de pesanteur terrestre en N/kg

Source1 = open('PointageRebondPlat.csv','r')
Source2 = open('PointageRebondLift.csv','r')
Lecteur1 = csv.reader(Source1,delimiter=";")
Lecteur2 = csv.reader(Source2,delimiter=";")

#-----------------------------Initialisation de listes vides---------------------------------
# Coordonnées d'espace et temporelle de la balle frappée à plat
X1,Y1,t1 = [],[],[]
# Coordonnées d'espace et temporelle de la balle liftée
X2,Y2,t2 = [],[],[]
# Vitesses et énergies de la balle frappée à plat
Vx1,Vy1,V1,Ec1,Epp1,Em1 = [],[],[],[],[],[]
# Vitesses et énergies de la balle liftée
Vx2,Vy2,V2,Ec2,Epp2,Em2 = [],[],[],[],[],[]

#------------------Construction des listes pour la balle frappée à plat----------------------
for row in Lecteur1:
    X1.append(float(row[0]))
    Y1.append(float(row[1]))
    t1.append(float(row[2]))

nbre_mesure1 = len(X1)

# Vx et Vy : vitesse numérique centrée
for n in range(1,nbre_mesure1-1):
    Vx1.append((X1[n+1]-X1[n-1])/(t1[n+1]-t1[n-1]))
    Vy1.append((Y1[n+1]-Y1[n-1])/(t1[n+1]-t1[n-1]))
    V1.append(sqrt(Vx1[n-1]**2+Vy1[n-1]**2))

# On supprime le 1er et le dernier élément de Y1 et de t1 (suite au calcul de la vitesse)
Y1 = delete(Y1,0)
Y1 = delete(Y1,len(Y1)-1)
t1 = delete(t1,0)
t1 = delete(t1,len(t1)-1)

# Partie à compléter permettant le calcul de Ec, Epp et Em au cours du 1er rebond
# et à chaque instant t1
for n in range(0,len(t1)):
    ........................
    ........................
    ........................

#----------------------Construction des listes pour la balle liftée--------------------------
for row in Lecteur2:
    X2.append(float(row[0]))
    Y2.append(float(row[1]))
    t2.append(float(row[2]))

nbre_mesure2 = len(X2)

for n in range(1,nbre_mesure2-1):
    Vx2.append((X2[n+1]-X2[n-1])/(t2[n+1]-t2[n-1]))
    Vy2.append((Y2[n+1]-Y2[n-1])/(t2[n+1]-t2[n-1]))
    V2.append(sqrt(Vx2[n-1]**2+Vy2[n-1]**2))

# On supprime le 1er et le dernier élément de Y2 et de t2
Y2 = delete(Y2,0)
Y2 = delete(Y2,len(Y2)-1)
t2 = delete(t2,0)
t2 = delete(t2,len(t2)-1)

# Partie à compléter permettant le calcul de Ec, Epp et Em au cours du 2nd rebond
# et à chaque instant t2
for n in range(0,len(t2)):
    ........................
    ........................
    ........................

#----------------------------------Tracé des graphiques-------------------------------------
fenetre1 = plt.figure('Fenetre 1')

# Epp balle frappée à plat
graph1 = fenetre1.add_subplot(231)
graph1.plot(t1,Epp1,'+b',label = 'Balle frappée à plat')
plt.title('Evolution temporelle de Epp')
plt.xlabel('t(en s)')
plt.ylabel('Epp(en J)')
graph1.legend()

# Epp balle liftée
graph2 = fenetre1.add_subplot(234)
graph2.plot(t2,Epp2,'+b',label = 'Balle liftée')
plt.xlabel('t(en s)')
plt.ylabel('Epp(en J)')
graph2.legend()

# Ec balle frappée à plat
graph3 = fenetre1.add_subplot(232)
graph3.plot(t1,Ec1,'+r',label = 'Plat')
plt.title('Evolution temporelle de Ec')
plt.xlabel('t(en s)')
plt.ylabel('Ec(en J)')
graph3.legend()

# Ec balle liftée
graph4 = fenetre1.add_subplot(235)
graph4.plot(t2,Ec2,'+r',label = 'Lift')
plt.xlabel('t(en s)')
plt.ylabel('Ec(en J)')
graph4.legend()

# Em balle frappée à plat
graph5 = fenetre1.add_subplot(233)
graph5.plot(t1,Em1,'+g',label = 'Plat')
plt.title('Evolution temporelle de Em')
plt.xlabel('t(en s)')
plt.ylabel('Em(en J)')
graph5.legend()

# Em balle liftée
graph6 = fenetre1.add_subplot(236)
graph6.plot(t2,Em2,'+g',label = 'Lift')
plt.xlabel('t(en s)')
plt.ylabel('Em(en J)')
graph6.legend()

#Tracer du graphique
plt.show()