Majeure "Mathématiques et Informatique"
Enseignement d'approfondissement
"Images: Analyse et Synthèse"

Visualisation d'une surface implicite


Projet Réalisé par Guillaume MECHENEAU (promo 95)


Description du projet

Une surface implicite est décrite par une équation du type F(X,Y,Z)=0. Représenter une telle surface permet donc de visualiser toute équipotentielle: champ de contraintes en mécanique, champ électrique pour un ensemble de particules chargées, lignes de flux en mécanique des fluides, probabilité de présence d'un électron. A travers ce projet j'ai donc cherché, à partir de la donnée d'une telle équation, à rendre un fichier de facettes lisible sous Geomview.

Algorithmes utilisés

L'espace en trois dimensions est découpé par une grille, dont le pas détermine la finesse du maillage comme le nombre de facettes obtenues en sortie. Le programme comporte donc trois parties distinctes. On détermine tout d'abord quels cubes de la grille sont traversés par la surface. Dans une triple boucle selon x,y et z on regarde si, pour les trois aretes ayant pour sommet le coin supérieur du cube à la position i,j,k, l'une d'elles est traversée par la surface; auquel cas les quatre cubes se partageant cette surface sont stockés dans une liste. On parcourt cette liste pour traiter chaque cube indépendamment. On en regarde alors chaque face. On examine le signe de F(X,Y,Z) aux quatre coins de chaque face du cube; plusieurs cas apparaissent, qui permettent d'obtenir les segments d'intersection. Chacun de ces segments est défini par la donnée du coté du carré où est son origine, et le coté où est son extrémité.Les coordonnées de l'origine et de l'extrémité sont déterminées par dichotomie. Une fois parcourues les six faces, on obtient donc une liste de segments. On la convertit en polygone en cherchant, pour un segment {A->B}, son successeur, i.e. un segment{B->C},et ainsi de suite jusqu'a trouver un segment {N->A} Ce polygone une fois obtenu est converti en triangles,rentrés dans une liste. Une fois que tous les cubes intersectants la surface sont traités, on transforme la liste de triangles en fichier Geomview

Résultats obtenus

Le résultat dépend évidemment du pas de la grille, et donc du temps de calcul et de la mémoire dont on dispose, puisque une grille de 50 cubes de coté comporte donc 125000 cubes dont souvent plus du cinquième intersectent la surface. Le systeme adopté entraine aussi un certain "nivelage" des surfaces: le niveau de détail correspond évidemment au pas, et le choix de ce dernier est entièrement laissé à l'utilisateur. Quoiqu'il en soit, pour la sphère unité par exemple,le résultat commence à etre satisfaisant avec une grille de 20 cubes de coté.

Problèmes rencontrés et solutions apportées

Le principal problème rencontré est du au traitement des cas particuliers. En effet, lorsque la surface passe exactement par l'un des sommets d'un des cubes de la grille, il faut traiter ce cube différement. Le probleme est résolu en allant regarder chaque face une a une. Si un seul des sommets de la face a une valeur F(X,Y,Z) nulle, on lui attribue un signe fictif, en fonction de la configuration de la face, et on le traite alors comme un cas normal. Si deux, trois ou quatre sommets ont une valeur nulle, ce n'est plus possible, et on rentre alors, au cas par cas, le ou les segments correspondants dans la liste destinée à former le polygone . La surface présentée a pour équation cos(8X)+cos(7Y)+cos(6Z)-0.5=0


Retour à la liste des projets réalisés