Activité
Tracer les rayons d’une lunette
Consigne
Ouvrez la page des scripts du chapitre pour consulter le code et télécharger les fichiers .py.
Le script Ch10_lunette.py (dossier scripts/) trace la marche de trois rayons parallèles, inclinés d’un angle , à travers une lunette afocale ( cm, cm) — la géométrie du schéma du §3.2, calculée en petits angles. Il s’exécute tel quel, à deux lignes près (# À COMPLÉTER).
(La suite du script — le tracé des rayons — est fournie et n’est pas à modifier.)
Questions :
- Compléter
y1: à quelle hauteur le rayon passant par O (non dévié, pente ) coupe-t-il le plan focal commun ? - Compléter
alpha_primeà l’aide de l’expression du grossissement. - Exécuter, puis remplacer l’oculaire par cm et ré-exécuter : qu’observe-t-on sur l’angle de sortie et sur la longueur de la lunette ? Un grossissement deux fois plus fort est-il « gratuit » ?
Fiche O5 - Python. Variables, calculs et boucle for y sont rappelés. Le tracé, déjà fourni dans le script, est expliqué dans la fiche M2.
Script élève
# -*- coding: utf-8 -*-
# Chapitre 10 — Marche des rayons dans une lunette afocale
# Un point objet à l'infini, vu sous l'angle alpha, envoie un faisceau
# de rayons parallèles sur l'objectif. On trace leur marche jusqu'à
# la sortie de l'oculaire (petits angles : les rayons sont des droites,
# la déviation se calcule avec les foyers).
import matplotlib.pyplot as plt
f1 = 50.0 # distance focale de l'objectif (cm)
f2 = 10.0 # distance focale de l'oculaire (cm)
alpha = 0.010 # angle d'incidence (rad), environ 0,6 degré
L = f1 + f2 # lunette afocale : longueur (cm)
y1 = 0 # hauteur de l'image intermédiaire # À COMPLÉTER
alpha_prime = 0 # angle émergent # À COMPLÉTER
print("Image intermédiaire à", f1, "cm, hauteur :", y1, "cm")
print("alpha' =", alpha_prime, "rad ; G =", alpha_prime / alpha)
# trace de trois rayons entrant aux hauteurs h = +4, 0, -4 cm
for h in [4.0, 0.0, -4.0]:
xs = [-20.0, 0.0, f1, L, L + 15.0]
pente_sortie = -y1 / f2 # tous les émergents sont parallèles
ys = [h + 20.0 * alpha, # avant l'objectif
h, # sur l'objectif
y1, # au plan focal commun
y1 + f2 * (y1 - h) / f1, # sur l'oculaire
y1 + f2 * (y1 - h) / f1 + 15.0 * pente_sortie]
plt.plot(xs, ys, color="teal")
plt.axvline(0, color="k")
plt.axvline(L, color="k")
plt.axhline(0, color="gray", linestyle="--", linewidth=0.8)
plt.plot([f1], [y1], "ko")
plt.xlabel("position sur l'axe (cm)")
plt.ylabel("hauteur (cm)")
plt.title("Lunette afocale")
plt.grid(True)
plt.show()