#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Auteur : Raphael Rullan 
Me citer si utilisation (coucou Léo) et me demander pour exportation (raphael.rullan@ens-lyon.fr)
L'objectif ici est de modéliser la trajectoire de javelots. On peut voir l'effet de la gravité (pas aller en dessous de 1) sur la trajectoire. Merci à Vincent pour le module Widgets.

"""
## Importation des librairies
import numpy as np
import matplotlib.pyplot as plt
import widgets

##Paramètres qu'on fera varier

g = float(input("Gravité à considérer ? "))

parameters = {'v01' : widgets.IntSlider(value=25, description='vitesse initiale Obélix (m/s)', min=0, max=100),
              'a1'  : widgets.IntSlider(value = 30, description='angle initial du lancé Obélix', min=0, max =90),
              'v02' : widgets.IntSlider(value=25, description='vitesse initiale Egyptien (m/s)', min=0, max=100),
              'a2'  : widgets.IntSlider(value = 40, description='angle initial du lancé Egyptien', min=0, max =90)}

##Définition des fonctions

def trajectoire(x , v0, a, g):
    return  (-0.5*(g/(v0**2*np.cos(np.radians(a))**2))*x**2) + np.tan(np.radians(a))*x

##On rentre les données

# v01 = 10
# a1 = 30

x = np.linspace(0, 10000,100000)
'beaucoup mais utile pour les densités faibles'

#plt.plot(x,trajectoire(x, v01, a1, g))
##Définition de la fenêtre

fig=plt.figure(figsize=(12,14))
ax = fig.add_axes([0.2, 0.2, 0.35, 0.7])
ax.set_xlim(0,310)
ax.set_ylim(0,100)


def plot_data(v01, a1, v02, a2):
    lines['Jet Obelix'].set_data(x, trajectoire(x, v01, a1, g))
    lines['Jet Egyptien'].set_data(x, trajectoire(x, v02, a2, g))   
    ax.set_xlim(0,np.maximum((v01**2*np.sin(np.radians(2*a1)))/g,(v02**2*np.sin(np.radians(2*a2)) )/g))
    ax.set_ylim(0,np.maximum((0.5*v01**2*np.sin(np.radians(2*a1))**2)/g,(0.5*v02**2*np.sin(np.radians(2*a2)**2))/g))
    texts1.set_text('Jet Obélix : portée {:.2e}m'.format((v01**2*np.sin(np.radians(2*a1)))/g))
    texts2.set_text('Jet Egyptien : portée {:.2e}m'.format((v02**2*np.sin(np.radians(2*a2)) )/g))
    texts3.set_text('Jet Obélix : flèche {:.2e}m'.format((0.5*v01**2*np.sin(np.radians(2*a1))**2)/g))
    texts4.set_text('Jet Egyptien : flèche {:.2e}m'.format((0.5*v02**2*np.sin(np.radians(2*a2))**2)/g))
    
    #ym1 = (0.5*v01**2*np.sin(np.radians(2*a1))**2)/g
    #ym2 = (0.5*v02**2*np.sin(np.radians(2*a2)**2))
    fig.canvas.draw_idle()
    

lines = {}
lines['Jet Obelix'], = ax.plot([], [],'r-',lw=2,label='Jet Obélix' )
lines['Jet Egyptien'], = ax.plot([], [],'b-',lw=2,label='Jet Egyptien')

texts1=  ax.text(0.05, 0.95,"portée =" ,bbox=dict(facecolor='red', alpha=0.5), fontsize=10, transform=ax.transAxes)
texts3=  ax.text(0.05, 0.9,"flèche =" ,bbox=dict(facecolor='red', alpha=0.5), fontsize=10, transform=ax.transAxes)
texts2=  ax.text(0.05, 0.85,"portée =" ,bbox=dict(facecolor='blue', alpha=0.5), fontsize=10, transform=ax.transAxes)
texts4=  ax.text(0.05, 0.8,"flèche =" ,bbox=dict(facecolor='blue', alpha=0.5), fontsize=10, transform=ax.transAxes)
ax.set_title("Trajectoire des javelots")
ax.set_xlabel('x (m)')
ax.set_ylabel('y (m)')
ax.legend()

param_widgets = widgets.make_param_widgets(parameters, plot_data, slider_box=[0.74, 0.45, 0.22, 0.22])
choose_widget = widgets.make_choose_plot(lines, box=[0.7,0.2,0.2, 0.2])
reset_button = widgets.make_reset_button(param_widgets,box=[0.35, 0.02, 0.08, 0.05])



if __name__=='__main__':
    plt.show()
    
    
    
    
    
    