Lorsqu’un rayon lumineux passe de l’air vers le plexiglas, il est dévié selon la loi de Snell-Descartes : n₁ · sin(i₁) = n₂ · sin(i₂), avec n₁ ≈ 1,00 et n₂ ≈ 1,49.
Capytale : pour exécuter les programmes Python et générer les graphes.
Chaque programme doit être collé dans une cellule différente et exécuté séparément. Cela permet de progresser étape par étape : calcul des valeurs, tracé en degrés, puis tracé en sinus avec estimation de l’indice.
import numpy as np
# Paramètres physiques
n1 = 1.00 # indice de l'air
n2 = 1.49 # indice du plexiglas
# Angles d'incidence i1 en degrés (0 à 90 par pas de 5)
i1_deg = np.arange(0, 91, 5)
# Calcul des angles de réfraction i2
i1_rad = np.deg2rad(i1_deg)
sin_i2 = (n1 / n2) * np.sin(i1_rad)
i2_rad = np.arcsin(sin_i2)
i2_deg = np.rad2deg(i2_rad)
print("i1 (°):", i1_deg)
print("i2 (°):", np.round(i2_deg, 1))
import matplotlib.pyplot as plt
# Reprendre les valeurs calculées précédemment
plt.figure(figsize=(7,5))
plt.scatter(i1_deg, i2_deg, color="royalblue", label="Mesures/théorie")
plt.title("Réfraction air → plexiglas : i2 = f(i1)")
plt.xlabel("Angle d'incidence i1 (°)")
plt.ylabel("Angle de réfraction i2 (°)")
plt.grid(True, alpha=0.3)
plt.legend()
plt.tight_layout()
plt.show()
# Calcul des sinus
sin_i1 = np.sin(i1_rad)
sin_i2 = np.sin(np.deg2rad(i2_deg))
# Tracé des points
plt.figure(figsize=(7,5))
plt.scatter(sin_i1, sin_i2, color="darkorange", label="Points")
plt.title("Loi de Snell : sin(i2) = f(sin(i1))")
plt.xlabel("sin(i1)")
plt.ylabel("sin(i2)")
plt.grid(True, alpha=0.3)
plt.legend()
plt.tight_layout()
plt.show()
# Ajustement linéaire
a, b = np.polyfit(sin_i1, sin_i2, 1)
print(f"Pente a = {a:.4f}, Ordonnée à l'origine b = {b:.4f}")
# Superposition de la droite d'ajustement
x_fit = np.linspace(0, sin_i1.max()*1.05, 200)
y_fit = a * x_fit + b
plt.figure(figsize=(7,5))
plt.scatter(sin_i1, sin_i2, color="darkorange", label="Mesures")
plt.plot(x_fit, y_fit, color="black", linestyle="--",
label=f"Ajustement : y = {a:.3f} x + {b:.3f}")
plt.title("Test de linéarité et ajustement")
plt.xlabel("sin(i1)")
plt.ylabel("sin(i2)")
plt.grid(True, alpha=0.3)
plt.legend()
plt.tight_layout()
plt.show()
# Estimation de l'indice du plexiglas
n2_estime = n1 / a
print(f"Indice du plexiglas estimé n2 ≈ {n2_estime:.3f}")
Nom du fichier : TP_refraction
Dossier : SNT sur le bureau de votre ordinateur