1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
import numpy as np
import matplotlib.pyplot as plt
#%%Dessin général
n1=1.000272 #Différentes variables (tout les xmin,xmax... pour paramétrer facilement le schéma)
n2=1.33298
ymin=-60
ymax=10
xmin=-40
xmax=40
def vague(x) : #équation de la vague
return 2*np.cos(x/2)
def vague_p(x): #Dérivée de l'équation de la vague
return -np.sin(x/2)
def droite(t):
'''Fonction qui renvoi l'abscisse du point de la droite
réfléchie passant par ymin'''
inc=np.arctan(vague_p(t)) #calcul de l'angle incident
ref=np.arcsin(n1/n2*np.sin(inc)) #calcul de l'angle réfléchi
coeff_dir=np.tan(ref-inc) #calcul du coefficient directeur de la droite réfléchie
return coeff_dir*ymin -vague(t)+t
nombre_rayons=np.linspace(xmin,xmax,300)
Y=vague(nombre_rayons)
plt.clf()
plt.xlim((xmin,xmax))
plt.ylim((ymin,ymax))
plt.plot(nombre_rayons,Y,color='#33adff') #Tracé de la vague
for i in nombre_rayons:
plt.plot([i,droite(i)],[vague(i),ymin],alpha=0.5,color='whitesmoke') #alpha pour définir l'opacité
plt.fill_between(nombre_rayons,Y,y2=ymax,color='#e6ffff') #rempli d'une certaine couleur un espace
plt.fill_between(nombre_rayons,Y,y2=ymin,color='#4d94ff')
plt.show() |
Partager