Intersection Rayon-Sphère
Optique géométrique — base du ray tracing
Enonce
Implémenter intersection_rayon_sphere(O, D, C, r) où O est l'origine du rayon (3-tuple), D sa direction unitaire, C le centre de la sphère et r son rayon.
Retourner le plus petit $t\geq 0$ tel que $\mathbf{P}(t)$ est sur la sphère, ou None si pas d'intersection.
Signature attendue
def intersection_rayon_sphere(O: tuple, D: tuple, C: tuple, r: float):
Exemples
intersection_rayon_sphere((0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (5.0, 0.0, 0.0), 1.0)→4.0intersection_rayon_sphere((0.0, 0.0, 0.0), (1.0, 0.0, 0.0), (5.0, 5.0, 0.0), 1.0)→None
📖 Rappel de cours
Un rayon est paramétré par $\mathbf{P}(t) = \mathbf{O} + t\mathbf{D}$ avec $t\geq 0$, $\mathbf{D}$ unitaire. Une sphère de centre $\mathbf{C}$ et rayon $r$ vérifie $\|\mathbf{P}-\mathbf{C}\|=r$.
Équation quadratique en $t$ :
$\|\mathbf{O}+t\mathbf{D}-\mathbf{C}\|^2 = r^2$
En posant $\mathbf{L}=\mathbf{O}-\mathbf{C}$ et $\mathbf{D}\cdot\mathbf{D}=1$ :
$t^2 + 2(\mathbf{L}\cdot\mathbf{D})\,t + \|\mathbf{L}\|^2 - r^2 = 0$
Discriminant :
$\Delta = (\mathbf{L}\cdot\mathbf{D})^2 - (\|\mathbf{L}\|^2 - r^2)$
Si $\Delta < 0$ : pas d'intersection. Sinon, on retient la plus petite racine positive $t = -(\mathbf{L}\cdot\mathbf{D}) - \sqrt{\Delta}$ (si elle est $\geq 0$).
← Exercices d'analyse numérique en Python — dichotomie, Newton, intégration
Exercices du meme theme
La correction commentee, les indices progressifs, l'execution du code dans le navigateur et la verification par l'IA sont reserves aux abonnes.