Quelle relation lie l'angle d'incidence et l'angle de réfraction ? Et comment en déduire l'indice de réfraction d'un matériau ?
Objectifs
- Mesurer des angles d'incidence et de réfraction.
- Montrer que \(\sin i_1\) est proportionnel à \(\sin i_2\).
- Déterminer l'indice de réfraction du plexiglas.
- Utiliser le module
mathde Python (sinus, conversion en radians).
Compétences travaillées
- Réaliser : aligner un montage optique, lire un angle.
- Analyser : tester une relation de proportionnalité.
- Valider : comparer à une valeur de référence.
- Communiquer : présenter un graphique légendé.
Le code s'exécute réellement dans ton navigateur. Au premier clic sur ▶ Exécuter, Python se télécharge (≈ 7 Mo, une seule fois, connexion Internet nécessaire). Le bouton Télécharger .py donne un fichier utilisable dans EduPython, Thonny, Basthon ou Capytale.
Raccourcis : Ctrl + Entrée exécute, Tab décale la ligne de 4 espaces.
Débutant en Python : fais les cinq activités dans l'ordre, en t'aidant des indices. À l'aise avec les variables et les boucles (en général à partir du deuxième trimestre) : l'activité 1 est facultative, commence directement à l'activité 2 et vise l'activité 5 sans indice.
Ne jamais regarder le faisceau, ni directement ni par réflexion sur une surface brillante. Garder le laser à hauteur de la table, dirigé vers un écran.
Matériel
- un laser (ou une lanterne à fente fine) ;
- un disque gradué en degrés ;
- un demi-cylindre en plexiglas, posé sur le disque.
Protocole
| \(i_1\) (°) | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 |
|---|---|---|---|---|---|---|---|---|
| \(i_2\) (°) |
Jeu de données pédagogique \(i_2\) = 6,5 ; 13,5 ; 19,5 ; 25,5 ; 31,0 ; 35,5 ; 39,0 ; 41,5°. Ces valeurs correspondent à un plexiglas d'indice 1,49, lues à 0,5° près sur le disque.
Au centre du disque, la normale à la face plane passe par la graduation 0° : les angles se lisent directement. Le faisceau réfracté part du centre, donc il suit un rayon du demi-cylindre : il arrive sur la face courbe perpendiculairement (\(i = 0^{\circ}\)) et n'est pas dévié en sortant. On lit ainsi \(i_2\) sur le bord du disque sans erreur due à une seconde réfraction.
À partir d'un couple de mesures \((i_1\ ;\ i_2)\), il calcule \(n_2 = \dfrac{n_1 \sin i_1}{\sin i_2}\). Attention : en Python, math.sin attend un angle en radians. On convertit avec math.radians. Comment lire le résultat ? Un indice proche de 1,5.
À faire : exécute le programme tel quel : la valeur obtenue est-elle plausible ? Corrige la ligne du calcul pour convertir les angles en radians.
math.radians(40) convertit 40° en radians.n2 = n1 * math.sin(math.radians(i1)) / math.sin(math.radians(i2)).import math
n1 = 1.00
i1 = 40
i2 = 25.5
n2 = n1 * math.sin(math.radians(i1)) / math.sin(math.radians(i2))
print("indice du plexiglas :", round(n2, 3))
Résultats attendus. Avant correction : 2,075, qui ferait du plexiglas un matériau presque aussi réfringent que le diamant : suspect. Après correction : 1,493.
Interprétation. L'indice obtenu est cohérent avec celui d'un plastique transparent (1,49 pour le plexiglas). L'erreur de mode degrés/radians ne provoque aucun message : seul un esprit critique la détecte.
Erreurs fréquentes. Oublier import math ; ne convertir qu'un seul des deux angles.
Pour chacune des 8 mesures, il calcule l'indice \(n = \sin i_1/\sin i_2\), puis la moyenne et l'écart relatif avec la valeur de référence 1,49. Comment lire le résultat ? Si la loi de Snell-Descartes est vérifiée, tous les indices sont proches les uns des autres.
À faire : complète le calcul de n dans la boucle, exécute, puis réponds à Q2.
k est le couple i1[k], i2[k].n = math.sin(math.radians(i1[k])) / math.sin(math.radians(i2[k])).import math
i1 = [10, 20, 30, 40, 50, 60, 70, 80]
i2 = [6.5, 13.5, 19.5, 25.5, 31.0, 35.5, 39.0, 41.5]
indices = []
for k in range(len(i1)):
n = math.sin(math.radians(i1[k])) / math.sin(math.radians(i2[k]))
indices.append(n)
print("i1 =", i1[k], "° i2 =", i2[k], "° n =", round(n, 3))
n_moy = sum(indices) / len(indices)
ecart = abs(n_moy - 1.49) / 1.49 * 100
print("indice moyen :", round(n_moy, 3))
print("écart avec 1,49 :", round(ecart, 1), "%")
Résultats attendus. Indices : 1,534 ; 1,465 ; 1,498 ; 1,493 ; 1,487 ; 1,491 ; 1,493 ; 1,486. Moyenne : 1,494. Écart : 0,2 %.
Interprétation. Le rapport \(\sin i_1/\sin i_2\) est à peu près constant : la loi de Snell-Descartes est vérifiée, et ce rapport est l'indice du plexiglas. Les deux premières mesures s'écartent le plus : pour de petits angles, une erreur de lecture de 0,5° représente une grande part de l'angle (0,5° sur 6,5°, soit 8 %).
Erreurs fréquentes. Inverser le rapport (indices de 0,67, inférieurs à 1 : impossible) ; oublier la conversion en radians.
Les indices restent entre 1,465 et 1,534, autour de 1,49 : constants aux incertitudes près. Les mesures à 10° et 20° sont les moins fiables : l'incertitude de lecture (0,5°) est grande devant des angles de 6,5° ou 13,5°. Pour \(i_1 = 0^{\circ}\), on a \(i_2 = 0^{\circ}\) et le calcul donnerait \(0/0\) : impossible (division par zéro). Cette mesure confirme seulement qu'un rayon perpendiculaire n'est pas dévié.
Il trace \(\sin i_1\) en fonction de \(\sin i_2\), puis la droite \(\sin i_1 = n \times \sin i_2\) avec l'indice moyen. Il trace aussi \(i_1\) en fonction de \(i_2\) (les angles eux-mêmes) pour comparer. Comment le lire ? La loi de Snell-Descartes prévoit des points alignés sur une droite passant par l'origine pour les sinus, mais pas pour les angles.
À faire : complète les listes sin_i1 et sin_i2, exécute, puis compare les deux séries de points.
math.sin(math.radians(i1[k])).sin_i1.append(math.sin(math.radians(i1[k]))) et sin_i2.append(math.sin(math.radians(i2[k]))).import math
import matplotlib.pyplot as plt
i1 = [10, 20, 30, 40, 50, 60, 70, 80]
i2 = [6.5, 13.5, 19.5, 25.5, 31.0, 35.5, 39.0, 41.5]
n = 1.494
sin_i1 = []
sin_i2 = []
for k in range(len(i1)):
sin_i1.append(math.sin(math.radians(i1[k])))
sin_i2.append(math.sin(math.radians(i2[k])))
modele = []
for s in sin_i2:
modele.append(n * s)
plt.plot(sin_i2, sin_i1, 'o', color='red', label='mesures : sin i1 en fonction de sin i2')
plt.plot(sin_i2, modele, '-', color='navy', label='modèle : sin i1 = 1,494 × sin i2')
plt.plot([x / 100 for x in i2], [x / 100 for x in i1], 's', color='gray', label='angles / 100 (i1 en fonction de i2)')
plt.title("Loi de Snell-Descartes pour le plexiglas")
plt.xlabel("sin i2 (ou i2 / 100)")
plt.ylabel("sin i1 (ou i1 / 100)")
plt.legend()
plt.grid()
plt.show()
Résultat attendu. Les points rouges sont alignés sur la droite bleue passant par l'origine. Les carrés gris (angles divisés par 100 pour tenir sur le même graphique) dessinent une courbe qui se redresse : ils ne sont pas alignés.
Interprétation. \(\sin i_1\) est proportionnel à \(\sin i_2\), avec un coefficient égal à l'indice du plexiglas : c'est la loi de Snell-Descartes (\(\sin i_1 = n \sin i_2\) car \(n_1 = 1{,}00\)). Les angles eux-mêmes ne sont pas proportionnels : écrire \(i_1 = n\,i_2\) serait faux, sauf pour de petits angles.
Erreurs fréquentes. Tracer \(\sin i_2\) en fonction de \(\sin i_1\) : la droite reste valable, mais son coefficient devient \(1/n\).
La fonction refraction(n1, n2, i1) renvoie l'angle de réfraction en degrés, calculé avec \(\sin i_2 = n_1 \sin i_1 / n_2\) et la fonction réciproque math.asin. Si \(\sin i_2\) dépasse 1, il n'existe pas d'angle : la fonction renvoie None. Le programme compare deux sens de passage : de l'air vers le plexiglas, puis du plexiglas vers l'air (on fait entrer le laser par la face courbe). Comment lire le résultat ? Un tableau d'angles ; quelques cases « pas de rayon réfracté ».
À faire : complète les deux lignes de la fonction, exécute, puis réponds à Q3.
math.sin.math.asin(s) donne un angle en radians ; math.degrees(...) le convertit en degrés.s = n1 * math.sin(math.radians(i1)) / n2 et return math.degrees(math.asin(s)).import math
def refraction(n1, n2, i1):
s = n1 * math.sin(math.radians(i1)) / n2
if s > 1:
return None
return math.degrees(math.asin(s))
n_plexi = 1.49
for i1 in [0, 10, 20, 30, 40, 42, 45, 60]:
a = refraction(1.00, n_plexi, i1)
b = refraction(n_plexi, 1.00, i1)
if b is None:
texte_b = "pas de rayon réfracté"
else:
texte_b = str(round(b, 1)) + " °"
print("i1 =", i1, "° | air -> plexi :", round(a, 1), "° | plexi -> air :", texte_b)
Résultats attendus. Air → plexiglas : 0 ; 6,7 ; 13,3 ; 19,6 ; 25,6 ; 26,7 ; 28,3 ; 35,5°. Plexiglas → air : 0 ; 15,0 ; 30,6 ; 48,2 ; 73,3 ; 85,6° ; puis « pas de rayon réfracté » pour 45° et 60°.
Interprétation. De l'air vers le plexiglas, le rayon se rapproche de la normale, et il existe toujours un rayon réfracté. Du plexiglas vers l'air, il s'en écarte, et au-delà d'environ 42° il n'y a plus de rayon réfracté : toute la lumière est réfléchie. C'est la réflexion totale, utilisée dans les fibres optiques (pour aller plus loin).
Erreurs fréquentes. Appeler math.asin avec une valeur supérieure à 1 : Python s'arrête avec ValueError: math domain error. C'est pourquoi la fonction teste s > 1 avant.
Pour 45° : \(\sin i_2 = 1{,}49 \times \sin 45^{\circ} = 1{,}05\). Un sinus ne peut pas dépasser 1 : aucun angle ne convient, il n'y a pas de rayon réfracté. Expérimentalement, en faisant entrer le faisceau par la face courbe (vers le centre), on voit le faisceau ressortir de moins en moins dans l'air, puis disparaître côté air au-delà d'environ 42° : toute la lumière repart dans le plexiglas, réfléchie par la face plane.
Chloé veut calculer l'indice moyen à partir de ses mesures. Son programme contient quatre erreurs : deux l'empêchent de fonctionner, deux donnent un résultat faux sans message. Corrige une erreur à la fois. Résultat attendu : environ 1,49.
math ? Les deux listes ont-elles le même nombre de valeurs ? Les angles sont-ils en radians ? Dans quel ordre fait-on le rapport des sinus ?import math ; ajouter la mesure manquante 41.5 ; convertir avec math.radians ; calculer sin(i1) / sin(i2).import math # erreur 1
i1 = [10, 20, 30, 40, 50, 60, 70, 80]
i2 = [6.5, 13.5, 19.5, 25.5, 31.0, 35.5, 39.0, 41.5] # erreur 2 : mesure manquante
somme = 0
for k in range(len(i1)):
n = math.sin(math.radians(i1[k])) / math.sin(math.radians(i2[k])) # erreurs 3 et 4
somme = somme + n
print("indice moyen :", round(somme / len(i1), 3))
Erreur 1 (bloquante). math n'a pas été importé : NameError.
Erreur 2 (bloquante). La liste i2 n'a que 7 valeurs pour 8 valeurs de i1 : au dernier tour, i2[7] n'existe pas (IndexError).
Erreur 3 (silencieuse). Les angles sont pris en radians : les sinus sont n'importe quoi (parfois négatifs), la « moyenne » n'a aucun sens.
Erreur 4 (silencieuse). Le rapport est inversé : on obtient \(1/n \approx 0{,}67\), inférieur à 1, impossible pour un indice.
Résultat après correction. Indice moyen : 1,494.
On obtient environ 0,80 : une valeur dénuée de sens (sinus pris en radians et rapport inversé ; certains rapports individuels sont même négatifs, de −0,61 à 2,65). Deux règles suffisent : un indice de réfraction est toujours supérieur ou égal à 1, et le rapport \(\sin i_1/\sin i_2\) doit être à peu près le même pour toutes les mesures. Afficher les indices un par un, et pas seulement la moyenne, aide à repérer ces erreurs.
Les angles ne sont pas proportionnels, mais leurs sinus le sont : les points \((\sin i_2\ ;\ \sin i_1)\) sont alignés sur une droite passant par l'origine. C'est la loi de Snell-Descartes, \(n_1 \sin i_1 = n_2 \sin i_2\), avec \(n_1 = 1{,}00\) pour l'air. Le coefficient de proportionnalité est l'indice du plexiglas : \(n = 1{,}49\) (moyenne de 8 mesures, écart de 0,2 % avec la valeur de référence). Les mesures aux petits angles sont les moins précises. Du plexiglas vers l'air, au-delà d'environ 42°, la lumière n'est plus réfractée.
Grille d'auto-évaluation
A = je sais faire seul · B = avec un peu d'aide · C = partiellement · D = à retravailler.
| Compétence | A | B | C | D |
|---|---|---|---|---|
| Mesurer un angle depuis la normale | ||||
| Utiliser math.sin, math.radians, math.asin | ||||
| Calculer un indice et une moyenne | ||||
| Montrer une proportionnalité sur un graphique | ||||
| Écrire une fonction qui gère un cas impossible | ||||
| Repérer une erreur avec une règle physique (n ≥ 1) |
Fiche professeur
Organisation
Durée totale estimée : 110 min. En séance de 1 h 30 : partie expérimentale et activités 1 à 3 ; activités 4 et 5 et conclusion en fin de séance, à la maison ou en séance suivante. Le parcours « à l'aise » (activité 1 facultative) fait gagner environ 10 min.
Préparation
Disques gradués, demi-cylindres en plexiglas, lasers de classe 2 (ou lanternes à fente).
Sécurité
Laser : ne jamais diriger le faisceau vers les yeux ; lasers de classe 2 au maximum.
Points de vigilance
Les angles se mesurent par rapport à la normale. Le rayon doit entrer par la face courbe au centre du demi-cylindre pour ne pas être dévié à la première traversée.
Différenciation
Aide : Donner un schéma annoté du disque avec la normale tracée.
Approfondissement : Mesurer l'angle limite de réflexion totale et le comparer à la valeur calculée (environ 42°).
Évaluation (sur 20)
Vérification de la loi de Snell-Descartes (activités 2 et 3, 8 pts) ; activité 4 (réflexion totale, 4 pts) ; activité 5 (4 pts) ; Q5 (4 pts).
Les corrections détaillées des activités Python et des questions sont dans les encadrés de chaque partie.
Pour consolider : exercices 5, 9 et 10, puis le quiz du cours.
Exercices corrigés Retour au cours