math.sin(math.radians(i1)) n = sin i1 / sin i2
Seconde · Chapitre 11 · TP expérimental et numérique

Vérifier la loi de Snell-Descartes

Tu vas envoyer un faisceau laser sur un demi-cylindre en plexiglas, mesurer les angles d'incidence et de réfraction, puis utiliser Python pour vérifier la loi \(n_1 \sin i_1 = n_2 \sin i_2\) et déterminer l'indice du plexiglas.

≈ 1 h 50 en toutLaser + 5 activités PythonSeul ou en binômePython s'exécute dans la page
← Tous les cours ← Retour au cours
Partie 1
Problématique

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 math de 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é.
L'éditeur Python de cette page

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.

Choisis ton parcours

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.

1
Expérience : le laser et le demi-cylindre
≈ 25 min · en salle de TP
Sécurité laser

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

Placer la face plane du demi-cylindre sur le diamètre 90°–90° du disque, son centre au centre du disque.
Envoyer le faisceau sur la face plane, vers le centre. Lire l'angle d'incidence \(i_1\) depuis la normale (ligne 0°).
Lire l'angle de réfraction \(i_2\) du faisceau dans le plexiglas.
Recommencer pour \(i_1\) = 10°, 20°, … 80°.
\(i_1\) (°)1020304050607080
\(i_2\) (°)
Si tu ne peux pas faire l'expérience

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.

Q1
Pourquoi le faisceau doit-il viser le centre du demi-cylindre ? Pourquoi n'est-il pas dévié en ressortant par la face courbe ?

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.

2
Activité 1 — Un indice à partir d'une mesure
≈ 10 min · Niveau 1 : variables, module math
Ce que fait le programme

À 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.

Indice 1 — maths. Python, comme la calculatrice en mode radians, interprète 40 comme 40 radians (plus de 6 tours !). Il faut convertir les degrés en radians.
Indice 2 — code. math.radians(40) convertit 40° en radians.
Indice 3 — code. n2 = n1 * math.sin(math.radians(i1)) / math.sin(math.radians(i2)).
Correction de l'activité 1
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.

3
Activité 2 — Un indice pour chaque mesure
≈ 15 min · Niveau 2 : listes, boucle, moyenne
Ce que fait le programme

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.

Indice 1 — physique. Avec \(n_1 = 1{,}00\) : \(n = \dfrac{\sin i_1}{\sin i_2}\), angles convertis en radians.
Indice 2 — listes. La mesure numéro k est le couple i1[k], i2[k].
Indice 3 — code. n = math.sin(math.radians(i1[k])) / math.sin(math.radians(i2[k])).
Correction de l'activité 2
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.

Q2
Les indices calculés sont-ils constants ? Quelles mesures sont les moins fiables, et pourquoi ? Pourquoi n'a-t-on pas utilisé la mesure \(i_1 = 0^{\circ}\) ?

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é.

4
Activité 3 — Le graphique qui démontre la loi
≈ 15 min · Niveau 3 : tester une proportionnalité
Ce que fait le programme

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.

Indice 1 — maths. Chaque élément est le sinus d'un angle, converti en radians.
Indice 2 — code. math.sin(math.radians(i1[k])).
Indice 3 — code. sin_i1.append(math.sin(math.radians(i1[k]))) et sin_i2.append(math.sin(math.radians(i2[k]))).
Correction de l'activité 3
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\).

5
Activité 4 — Prévoir le rayon réfracté
≈ 20 min · Niveau 4 : fonction, cas particuliers
Ce que fait le programme

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.

Indice 1 — physique. \(\sin i_2 = \dfrac{n_1 \sin i_1}{n_2}\), avec \(i_1\) en radians dans math.sin.
Indice 2 — code. math.asin(s) donne un angle en radians ; math.degrees(...) le convertit en degrés.
Indice 3 — code. s = n1 * math.sin(math.radians(i1)) / n2 et return math.degrees(math.asin(s)).
Correction de l'activité 4
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.

Q3
Pourquoi n'y a-t-il plus de rayon réfracté du plexiglas vers l'air pour 45° ? Peux-tu vérifier en TP en faisant entrer le laser par la face courbe ?

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.

6
Activité 5 — Le programme de Chloé
≈ 15 min · Niveau 5 : trouver et corriger des erreurs
La situation

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.

Indice 1 — méthode. Corrige d'abord ce que Python signale. Quand le programme tourne, compare à 1,49 : un indice doit être supérieur à 1.
Indice 2 — où chercher. Python connaît-il 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 ?
Indice 3 — les quatre corrections. Ajouter import math ; ajouter la mesure manquante 41.5 ; convertir avec math.radians ; calculer sin(i1) / sin(i2).
Correction de l'activité 5
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.

Q4
Après correction des deux erreurs bloquantes, quel résultat obtient-on ? Quelles règles physiques simples permettaient de voir qu'il était faux ?

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.

7
Conclusion et auto-évaluation
≈ 10 min
Q5
Réponds à la problématique : quelle relation lie \(i_1\) et \(i_2\) ? Quelle est la valeur de l'indice du plexiglas ?

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étenceABCD
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)
Clique sur A, B, C ou D pour chaque compétence.
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.

TP terminé, bravo !

Pour consolider : exercices 5, 9 et 10, puis le quiz du cours.

Exercices corrigés Retour au cours