#Chute avec frottement quadratiques  : baseJump ! 
#J.COURTIN 03/01/2017

""" Ce TD propose de simuler la pratique du base Jump et on doit
    dedéterminer le temps avant l'ouverture du parachute, le but du baseJump étant :
    1 - de tomber le plus longtemps possible !
    2 - de ne pas s'écraser...
    
    !!!    Ne pas tenter de reproduire chez vous cette expérience !!!
                https://www.youtube.com/watch?v=1fQrioycqhM
"""

m  = 100     #Jumper avec équipement !
g  = 9.81
h0 = xxxx    #h0 sans parachute --> Trouver h0 tel que Vlim = 200km/h
h1 = xxxx    #h1 avec parachute --> Trouver h1 tel que Vlim =  15km/h


##CONDITION INITIALES

H0=200 #m         baseJump :   50m < H0 < 1000m       (parachutisme H0 > 1500m) 

Touverture=10#s   au bout de quel temps vouler vous ouvrir le parachute ?
                  #il faut une seconde d'ouverture


#Condition initiales : 
"""On saute sans vitesse initiale d'une hauteur H0 
"""
v=[?]
z=[?]     #on veut calculer les vitesses, altitude et le temps.
t=[?]

dt=0.001   #précision de l'intégration numérique

##INTEGRATION NUMERIQUE d'EULER

h=h0; ouvert=False
while (z[-1]>0):
    
    if (t[-1]>Touverture +1 and ouvert==False):
        h=h1
        ouvert=True
        print("\nParachute OUVERT !!!  (à", round(z[-1],3),"m)\n")
    
    t += ???            #METHODE DE RECONSTRUCTION DE LISTE

    a  = ???  #calcul de l'accélération
    
    z += ???  #mise à jour position
    v += ???      #mise à jour vitesse


"""Il faut attérir avec une vitesse de moins de 5m/s
"""

if (abs(v[-1])>5):
    print("\n!!! U DEAD BOY !!!\n")
    print("\n=> impact : ",round(abs(v[-1]*3.6),1),"km/h\n\n")
    
## SOLUTION ANALYTIQUE : valide uniquement pour la phase où le parachute est fermé
from math import *
Vlim=sqrt(m*g/h0)

Vth=[]
for time in t:                         #vitesse théorique avec frottements quadratiques.
    Vth+=[Vlim*tanh(h0*Vlim/m*time)]
    
zth=[]
for time in t:                         #trajectoire en chute libre.
    
    zNew=  ???     #calculer z(time)
    
    if (zNew>0):
        zth+=[zNew]         #si z théorique < 0 on ne garde que des 0.
    else:
        zth+=[0.]



## Tracé des solutions :              ** Ne pas modifier cette partie **
from matplotlib import pyplot as plt

plt.close()

vplot=[abs(k)*3.6   for k in v]    
Vthplot=[abs(k)*3.6 for k in Vth]

plt.plot(t[:-1],z[:-1],'b')             #position en bleu
plt.plot(t[:-1],zth[:-1],'b--')


plt.plot(t[:-1],Vthplot[:-1],'r---')    #vitesse en rouge     
plt.plot(t[:-1],vplot[:-1],'r')
plt.show()





