# -*- coding: utf-8 -*-
"""
Éditeur de Spyder

Ceci est un script temporaire.
"""

import matplotlib.pyplot as plt
import numpy as np


omega0=8*np.pi #omega=(k/m)^1/2
v=0.05 #vitesse de traction de l'avant du ressort
fs=0.3 #coefficient de frottement statique
fd=0.1 #coefficient de frottement dynamique
m=0.5 #masse du palet
g=9.8
k=m*omega0**2 #constante de raideur du ressort
X0=fs*m*g/k #Pour X<X0 le palet est immobile pour X>X0 le palet glisse
dX0=v #quand le palet est immobile, X=v
Xmoy=fd*m*g/k #valeur moyenne des oscillations
A=((v/omega0)**2+(g*(fs-fd)/omega0**2)**2)**0.5 #amplitude des oscillations
#phase 1: le solide glisse, le ressort est tendu
#X(t=0)=fsmg/k et X'(t=0)=v
t=[0] 
lX=[X0] 
ldX=[dX0] 
i=0
dt=2*np.pi/omega0/1000
while ldX[i]<=dX0 and i<1000: #la pahse 1 
    t.append(t[i]+dt)
    a=fd*g-omega0**2*lX[i] #accélération: le palet bouge, ressort tensdu
    ldX.append(ldX[i]+a*dt) #v(ti+1)
    lX.append(lX[i]+ldX[i]*dt) #X(ti+1)
    i=i+1

plt.plot(t,lX)
#plt.show()

N1=len(t) #valeur de N à la fin de la phase 1
#phase 2: le palet est arrêté et le ressort est détendu
i=N1-1
while lX[i]<X0 and i<15500:
    t.append(t[i]+dt)
    ldX.append(v) #le palet est immobile dX/dt=v
    lX.append(v*(t[i]-t[N1-1])+lX[N1-1])
    i=i+1
N2=len(t)
plt.plot(t,lX) #courbe X(t)
plt.plot([t[0],t[N2-1]],[Xmoy,Xmoy]) #asymptote horizontale qui correspond à Xmmoy
plt.plot([t[0],t[N2-1]],[Xmoy+A,Xmoy+A]) #asymptote horizontale qui correspond à Xmax
plt.plot([t[0],t[N2-1]],[Xmoy-A,Xmoy-A]) #asymptote horizontale qui correspond à Xmin
plt.plot([t[0],t[N2-1]],[X0,X0]) #valeur de X au démarrage
plt.plot([t[0],t[N2-1]],[(2*fd-fs)/omega0**2,(2*fd-fs)/omega0**2]) 
plt.xlabel('t(s)')
plt.ylabel('X(m)')
plt.title('v=0,005 m/s')
plt.grid()
plt.show()