Introduction
Cet applet, développé en parallèle avec celui sur la simulation des halos atmosphériques, permet de visualiser l'interaction entre un cristal de type donné et un rayon lumineux.
Le principe de la déviation minimale peut ainsi être mis en évidence, et il est possible de visualiser les effets caractéristiques d'un cristal donné sur la lumière.
Présentation
Cet applet a été développé à la suite de celui sur les
halos atmosphériques, dans le but de montrer explicitement l'interaction de la lumière avec un cristal donné. Ces calculs sont faits de la même façon dans le second applet, mais n'y sont pas montrés en tant que tels.
Algorithmes utilisés
Calculs de réflexion et réfraction
Les rayons lumineux sont caractérisés par un point source et un vecteur de propagation (et une intensité, inutilisée ici). Le calcul de l'interaction d'un rayon avec une surface 3D quelconque se fait en plusieurs étapes :
-
On cherche le point d'intersection du rayon lumineux avec la surface concernée. Il faut en particulier faire attention aux surface possédant potentiellement plusieurs points d'intersection avec un rayon (une sphère par exemple). Ceci est effectué par la méthode intersect de la classe Forme3D
Si la forme est composée de plusieurs formes élémentaires, il convient de chercher laquelle interceptera le rayon lumineux à l'aide de la méthode distance_intersect de la classe Forme3D
-
Il est ensuite nécessaire de connaître le vecteur normal à la surface considérée au point d'intersection, fourni par la méthode get_normale de la classe Forme3D
-
L'application des lois de Snell-Descartes en 3D, en particulier la prise en compte que les rayons réfléchis et réfractés se trouvent dans le plan formé par les rayons incidents et la normale à la surface, n'est pas simple.
Afin d'optimiser ce calcul, ces lois ont été reécrites afin d'avoir les vecteurs directeurs des rayons réfléchis
et réfractés
comme combinaison linéaire du vecteur directeur du rayon incident
et du vecteur normal
.
Le détail des calculs n'est pas présenté ici, mais il est utile de remarquer que
et
, où
est l'angle d'incidence.
Les formules qui en découlent sont, pour la réflexion
et pour la réfraction
avec
Les méthodes reflect et refract de la classe Rayon effectuent les calculs de cette façon pour déterminer les rayons réfléchis et réfractés en fonction du rayon incident et de la forme sur laquelle il arrive.
-
Avant d'effectuer les calculs précédents, il convient de déterminer lequel est à effectuer : la réflexion peut avoir lieu dans n'importe quelle configuration, mais une réfraction n'est possible que si
La méthode is_refract de la classe Rayon utilise cette formule pour déterminer si le rayon peut ou non être réfracté
Algorithme de calcul des trajectoires de rayons lumineux
A l'aide des calculs et méthodes présentées ci-dessus, l'algorithme suivant permet de faire le calcul des trajectoires de rayons lumineux afin d'en afficher le résultat.
-
Un objet cristal est créé, par assemblage de surfaces élémentaires préprogrammées (rectangles, triangles, trapèzes, sphères) et celui-ci est orienté dans l'espace comme demandé
-
Un rayon lumineux arrivant de "dessus" (axe
, ou
) est généré. On cherche la première face du cristal qui sera rencontrée en cherchant quelle face, projetée dans un plan
contient la projection du point source du rayon lumineux. Ceci est exécuté par la méthode
in_projection_z des classes de formes géométriques.
Si plusieurs faces correspondent à cette condition, un calcul des distances (méthode distance_intersect de Rayon) au point d'intersection des surfaces concernées permet de choisir la bonne.
Enfin, un calcul de réfraction sur cette face est effectué comme décrit précédemment.
-
On cherche ensuite la face suivante qu'atteindra le rayon en calculant les distances de chacune des faces, en tenant compte de la direction de propagation du rayon (attention, ceci ne fonctionne que dans le cas d'un cristal convexe !)
Après un test pour déterminer si le rayon sera réfléchi ou réfracté, le calcul correspondant est effectué, et on réitère cette opération jusqu'à ce que le rayon sorte du cristal.
Améliorations possibles
Il serait intéressant d'ajouter d'autres types de cristaux, et d'autres compositions. En particulier il serait intéressant d'ajouter les indices optiques de l'ammoniac, en prévision desquels a été créé le cristal bipyramidal (celui-ci nécessite encore d'imposer l'angle entre ses faces), ainsi que des cristaux de glace carbonique, présents dans l'atmosphère martienne.
Un affichage plus réaliste de la 3D rendrait la visualisation plus facile, ceci nécessiterait en particulier une analyse de la position des rayons lumineux par rapport aux arrêtes du cristal afin de ne pas les afficher par-dessus lorsqu'ils sont derrière en réalité.
Dans le même ordre d'idée, un affichage plus sombre des arrêtes cachées ainsi qu'un effet de rétrécissement avec la profondeur permettrait de mieux voir le cristal en 3D.
Les paramètres de cette applet ne sont en aucun cas critiques et peuvent être modifiés à volonté par l'utilisateur afin de visualiser l'ensemble des effets d'intéraction d'un cristal avec un rayon lumineux.
Il est cependant nécessaire de faire attention à la validité de certains paramètres si on veut garder un sens physique pour les calculs effectués (inutile d'imposer 100 réflexions supplémentaires par exemple : seule une fraction parfaitement négligeable de la lumière aura suivi un tel trajet) et aux contraintes de visualisation (un cristal de facteur de forme 100 sera difficilement visible à l'écran car trop allongé)
Enfin, pour permettre de simuler facilement un certain nombre d'interactions caractéristiques telles que celles présentées ci-dessous, une liste de paramètres prédéfinis est accessible dans le menu déroulant en haut de la liste des paramètres.
Type d'objet
-
Le cristal hexagonal est le celui dans lequel l'eau cristallise le plus facilement.
-
Les cristaux pyramidaux et pyramidaux tronqués ont également une base hexagonale et l'eau cristallise selon ces formes également.
-
La goutte sphérique, typiquement la goutte d'eau, en particulier à l'origine des
arcs en ciel
-
Le cristal bipyramidal est pour le moment inutilisable en tant que tel, dans le sens où c'est un cristal d'ammoniac et que les propriétés de ce composé n'ont pas été enregistrées dans cet applet. Il a toutefois été laissé en guise de démonstration.
Facteur de forme
Le facteur de forme correspond grossièrement au rapport hauteur sur largeur du cristal.
Attention : ce paramètre est sans effet sur certains objets comme la goutte sphérique, qui reste sphérique ...
Réflexions internes
Certaines interactions mettent en jeu une réflexion interne (partielle) supplémentaire par rapport au chemin que suit majoritairement la lumière.
Le nombre de ces réflexions internes ne doit pas être trop grand : en effet, au delà de 2 ou 3 réflexions partielles, seule une petite fraction de la lumière restera, causant des phénomènes bien trop peu lumineux pour être observables.
Matériau
Choix du matériau composant l'objet choisi :eau ou glace. Les propriétés optiques du matériau pourront alors être utilisées dans la simulation.
Il est nécessaire de choisir un matériau compatible avec le type d'objet choisi : une sphère de glace ou un cristal d'eau n'aurait en effet aucun sens.
Couleur
On a ici le choix entre les 3 couleurs rouge (650nm), verte (510nm) et bleue (440nm). (Celles-ci ont été choisies de façon à correspondre approximativement avec les couleurs de l'écran)
Angles du cristal
Ces options permettent d'orienter le cristal dans l'espace afin qu'il puisse présenter des configurations différentes au rayon incident.
Les rotations par rapport à la position de repos s'effectuent dans l'ordre suivant :
(psi) par rapport à l'axe vertical,
(theta) par rapport à l'axe horizontal, puis
(phi) selon l'axe vertical à nouveau.
Citesses de rotation
On peut choisir ici la vitesse de rotation de l'ensemble rayon+cristal, afin de visualiser l'interaction sous un autre angle (il est possible d'arrêter la rotation avec le bouton "stop", puis de la reprendre avec le bouton "continuer" situés au dessus de l'image)
Les angles et ordre de rotations sont les mêmes qu'à la section précédente.
Coordonnées du rayon
Afin de faire varier l'endroit du cristal éclairé, il est possible de faire varier en x (profondeur) et y (latéralement) la position du rayon incident
Après lancement de la simulation via le bouton "calculer", le cristal et le rayon lumineux seront affichés à droite.
L'angle de déviation est affiché en dessous, exprimé en degrés et minutes d'arc.
Ces exemples sont reproductibles grâce aux listes de choix prédéfinis de l'applet.