# ##########################################################################
# Programme Python permettant de tracer les positions d'un point M
# à partir d'abscisses et d'ordonnées issues d'un pointage
# et de tracer le vecteur variation vitesse en un point
# ##########################################################################
# J LE BORGNE - Lycée Suscinio -29600  Morlaix - jerome.lebo@outlook.fr


# IMPORTATION DES MODULES #
from matplotlib.pyplot import *
from mpl_toolkits.mplot3d import Axes3D
from scipy import *

# importation de NUMPY (pour gestion tableaux et calculs) sous l'alias "np"
import numpy as np
# importation de PYPLOT (du module MATPLOTLIB, pour le tracé de courbes) sous l'alias "plt"
import matplotlib.pyplot as plt

## Format pour les graphs(en pouces)
plt.rcParams["figure.figsize"] = (10, 10)

# #################################
# Importation des données
# ################################
t=[]
x=[]
y=[]
""" ######################################################################################
Ici commence le travail à réaliser par les élèves: vérifier le nom de fichier entre ' '
########################################################################################## """
with open('1.boulet2.csv','r') as fichier:
    fichier.readline()
    for ligne in fichier:
        ligne_lue=ligne.split(';')
        t.append(float(ligne_lue[0].replace(',','.'))) # [0] permet de récupérer le temps
        x.append(float(ligne_lue[1].replace(',','.'))) # [1] permettrait de récupérer l'abscisse x
        y.append(float(ligne_lue[2].replace(',','.')))  # [2] permettrait de récupérer l'ordonnée y

# #################################
# Fonction qui simplifie le tracé du vecteur vitesse
# afin que l'élève n'ait pas à définir l'origine
# du vecteur en termes de coordonnées
# (pour ne pas mélanger des positions et des coordonées de vecteurs)
# #################################

def draw_Vector2(numero_du_point, abscisse_vecteur, ordonnee_vecteur, couleur,echelle):
    global x,y
    plt.quiver(x[numero_du_point], y[numero_du_point],abscisse_vecteur,ordonnee_vecteur,color=couleur,scale=echelle)


Nbre_Mesures=len(x)

""" ###########################################
Ici commence le travail à réaliser par les élèves
################################################# """
# #####################################
# Tracé de la trajectoire
# #####################################
""" TRAVAIL 1:
Remplacer les symboles ??? par le code Python permettant de tracer l'ordonnée du point en fonction de son abscisse.
Le point représenté serar une croix + de couleur rouge """
def representation_graphique(t,x,y):
    plt.figure(figsize=(15,5))
    plt.subplots_adjust(left=0.06, bottom=0.16, right=0.80, top=0.92,
                wspace=0.4, hspace=None)
    #------------------------------
    plt.subplot(1,2,1)

    plt.plot(x,y,"+r")
    plt.plot(x,y, '#ff7f0e', lw=1)#liaison entre les points, couleur et epaisseur
    plt.scatter(x,y,marker='+',s=50,c='#ff7f0e')
    plt.xlim(min(x)-1,max(x)+1)
    plt.ylim(min(y)-2, max(y)+1)
    plt.title('Vecteur variation de vitesse')# titre du graphique
    plt.xlabel('Abscisse x (m)')# titre du graphique
    plt.ylabel('Ordonnée y (m)')# titre du graphique
    vx=[]
    vy=[]

    for i in range (1,Nbre_Mesures-1):
          vx.append((x[i+1]-x[i-1])/(t[i+1]-t[i-1])) # Le calcul est effectué entre deux points entourant la position considérée
          vy.append((y[i+1]-y[i-1])/(t[i+1]-t[i-1]))
          #draw_Vector2(i,vx[i-1],vy[i-1],"b",50)
          plt.quiver(x[i],#origine du vecteur
                     y[i],#origine du vecteur
                     vx[i-1],#composante horizontale du vecteur
                     vy[i-1],#composante verticale du vecteur
                     color="blue",
                     scale_units="xy",
                     scale=3,#echelle
                     alpha=0.5)#transparence)
    Nbre_vitesses=len(vx)

    ax=[]
    ay=[]
    for i in range (1,Nbre_vitesses-1):
          ax.append((vx[i+1]-vx[i-1])/(t[i+1]-t[i-1])) # Le calcul est effectué entre deux points entourant la position considérée
          ay.append((vy[i+1]-vy[i-1])/(t[i+1]-t[i-1]))

          plt.quiver(x[i],#origine du vecteur
                     y[i],#origine du vecteur
                     ax[i-1],#composante horizontale du vecteur
                     ay[i-1],#composante verticale du vecteur
                     color="green",
                     scale_units="xy",
                     scale=5,#echelle
                     alpha=1)#transparence))


    plt.grid()

    #------------------------------
    plt.subplot(1,2,2)
    plt.plot(x,y,"+r")
    plt.plot(x,y, '#ff7f0e', lw=1)#liaison entre les points, couleur et epaisseur
    plt.scatter(x,y,marker='+',s=50,c='#ff7f0e')
    plt.xlim(min(x),max(x))
    plt.ylim(min(y)-2, max(y)+1)
    plt.title('Trajectoire du point point M')# titre du graphique
    plt.xlabel('Abscisse x (m)')# titre du graphique
    plt.ylabel('Ordonnée y (m)')# titre du graphique


    plt.grid()                                                # affiche une grille
    savefig('trajectoire_vitesse_accélération.png')   # permet d'enregistrer, dans le fichier source, une image du graphe
    #-------------------------------
    plt.show()                                        # permet d'afficher le graphe

#Le programme principal--------------------------------------------





representation_graphique(t,x,y)#Definir les variables temps et ordonnee utilisées




















