01.07.2013 Views

Maillage de surfaces étoilées par paramétrisation sphérique - École ...

Maillage de surfaces étoilées par paramétrisation sphérique - École ...

Maillage de surfaces étoilées par paramétrisation sphérique - École ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Maillage</strong> <strong>de</strong> <strong>surfaces</strong> <strong>étoilées</strong> <strong>par</strong> <strong>par</strong>amétrisation <strong>sphérique</strong><br />

Sujet proposé <strong>par</strong> Steve Oudot<br />

steve.oudot@inria.fr<br />

Fig. 1 – Gauche : surface originale, <strong>par</strong>amétrée radialement sur la sphère S 2 <strong>par</strong> la fonction<br />

r(θ, φ) = 2 + sin(θ) sin(8θ) cos(8φ). Droite : maillage obtenu <strong>par</strong> la métho<strong>de</strong> présentée dans ce<br />

projet.<br />

Note : Les sections 3 et 4 <strong>de</strong> ce projet contiennent quelques éléments <strong>de</strong> calcul différentiel.<br />

Toutefois, les questions à forte composante mathématique sont facultatives et ont pour seul<br />

but <strong>de</strong> permettre une compréhension plus approfondie du sujet <strong>par</strong> le lecteur. La <strong>par</strong>tie algorithmique<br />

consiste essentiellement à implémenter un algorithme simplifié <strong>de</strong> maillage <strong>de</strong> <strong>surfaces</strong>,<br />

dans le langage <strong>de</strong> votre choix. Pour ceux qui choisissent JAVA, une <strong>par</strong>tie du co<strong>de</strong> est<br />

déjà fournie, à <strong>par</strong>tir <strong>de</strong> laquelle une implémentation basique <strong>de</strong> l’algorithme peut se faire en<br />

90 lignes <strong>de</strong> co<strong>de</strong> seulement. En cas <strong>de</strong> doute ou <strong>de</strong> problème, n’hésitez pas à me contacter<br />

<strong>par</strong> email (steve.oudot@inria.fr). Pensez également à consulter la page <strong>de</strong> suivi du projet<br />

(http://kelen.polytechnique.fr/profs/informatique/Steve.Oudot/cours/PI/suivi/in<strong>de</strong>x.html).<br />

1 Introduction<br />

Le maillage <strong>de</strong> <strong>surfaces</strong> est très utilisé en informatique graphique et en CAD pour manipuler<br />

<strong>de</strong>s objets tridimensionnels. Le but est <strong>de</strong> représenter le plus fidèlement possible le bord <strong>de</strong><br />

l’objet <strong>par</strong> une combinaison <strong>de</strong> points (les sommets), <strong>de</strong> segments (les arêtes) et <strong>de</strong> triangles<br />

(les faces), appelée maillage — voir la figure 1. L’intérêt <strong>de</strong>s maillages, com<strong>par</strong>és à d’autres<br />

types <strong>de</strong> représentations, est que la plu<strong>par</strong>t <strong>de</strong>s algorithmes <strong>de</strong> rendu sont câblés dans les puces<br />

<strong>de</strong>s cartes graphiques, ce qui permet <strong>de</strong> manipuler ces objets en temps réel.<br />

L’objectif <strong>de</strong> ce projet est <strong>de</strong> mailler <strong>de</strong>s <strong>surfaces</strong> <strong>étoilées</strong>, c’est-à-dire <strong>de</strong>s <strong>surfaces</strong> S pour<br />

lesquelles il existe un point p ∈ R 3 tel que pour tout point q <strong>de</strong> S le segment ouvert ]p, q[ se<br />

1


trouve entièrement d’un côté <strong>de</strong> la surface (]p, q[∩S = ∅). Quitte à opérer une translation <strong>de</strong><br />

la surface, nous supposerons que le point p se trouve à l’origine o <strong>de</strong> l’espace. Ce cas <strong>de</strong> figure<br />

n’est qu’une instance <strong>par</strong>ticulière du maillage <strong>de</strong> <strong>surfaces</strong>, qui, considéré en toute généralité,<br />

est un sujet <strong>de</strong> recherche à <strong>par</strong>t entière et n’a trouvé <strong>de</strong> solutions certifiées que très récemment<br />

[1, 2, 3].<br />

En quoi notre hypothèse d’étoilement <strong>de</strong> la surface S simplifie-t-il les choses ? Du moment<br />

que S est étoilée <strong>par</strong> rapport à l’origine o, elle peut être projetée radialement sur la sphère<br />

unité S 2 <strong>de</strong> manière bijective. Il existe donc un <strong>par</strong>amétrage radial <strong>de</strong> S, i.e. une application<br />

Φ : S 2 → S qui s’écrit comme suit :<br />

∀p ∈ S 2 , Φ(p) = r(p) p,<br />

où r : S 2 → R indique le rayon <strong>de</strong> la projection radiale. Pour construire un maillage <strong>de</strong> S, il<br />

suffit donc <strong>de</strong> mailler la sphère S 2 puis d’envoyer tous les sommets du maillage sur S <strong>par</strong> Φ,<br />

tout en gardant la même connectivité. Il faut toutefois veiller à adapter la <strong>de</strong>nsité locale <strong>de</strong>s<br />

sommets du maillage <strong>de</strong> S 2 en fonction <strong>de</strong> la géométrie <strong>de</strong> S, et donc <strong>de</strong> Φ. Cette question sera<br />

abordée dans la <strong>par</strong>tie 4 du projet.<br />

Pour mailler S 2 , on peut se contenter d’abord <strong>de</strong> mailler le disque unité D dans le plan, puis<br />

<strong>de</strong> remonter les sommets du maillage sur la <strong>de</strong>mi-sphère supérieure <strong>par</strong> une projection Π. Le<br />

maillage <strong>de</strong> S 2 est ensuite obtenu en recollant le maillage <strong>de</strong> la <strong>de</strong>mi-sphère supérieure avec son<br />

symétrique <strong>par</strong> rapport au plan horizontal, comme montré dans la figure 2 (centre). Il faut pour<br />

cela que les bords <strong>de</strong>s <strong>de</strong>ux maillages concor<strong>de</strong>nt dans R 3 , ce qui peut être assuré en choisissant<br />

une projection Π qui laisse le bord du maillage <strong>de</strong> D dans le plan horizontal. Notre approche<br />

consistera à faire en sorte que les sommets du bord du maillage <strong>de</strong> D se trouvent sur le bord<br />

C <strong>de</strong> D, puis à choisir une fonction Π qui laisse C invariant. Le choix <strong>de</strong> Π sera discuté dans la<br />

<strong>par</strong>tie 3 du projet.<br />

Au final, le travail à effectuer se divise en trois étapes :<br />

1. construire un maillage triangulaire du disque unité D dans le plan, dont la taille <strong>de</strong>s<br />

triangles dépend d’une fonction ϱ : D → R + donnée en argument (section 2) ;<br />

2. relever les sommets du maillage sur la sphère unité S 2 (section 3) ;<br />

3. projeter les sommets du maillage sur la surface S avec la fonction Φ (section 4).<br />

Les étapes ne sont pas indépendantes : la première est nécessaire pour effectuer la <strong>de</strong>uxième,<br />

qui elle-même est nécessaire pour effectuer la troisième. Chacune contient son lot <strong>de</strong> difficultés.<br />

À noter toutefois que la première consiste essentiellement à implémenter un algorithme décrit<br />

dans l’énoncé (c’est le minimum à faire), tandis que la <strong>de</strong>uxième et la troisième ont un caractère<br />

plus mathématique mais ne présentent pas <strong>de</strong> difficultés d’implémentation <strong>par</strong>ticulières.<br />

2 <strong>Maillage</strong> du disque unité D<br />

2.1 La théorie<br />

Notre objectif ici est <strong>de</strong> construire un maillage triangulaire <strong>de</strong> D tel que :<br />

• le bord du maillage soit conforme au bord C <strong>de</strong> D, i.e. que toute arête du bord du maillage<br />

relie <strong>de</strong>ux sommets consécutifs sur C.<br />

• la <strong>de</strong>nsité locale <strong>de</strong>s sommets du maillage correspon<strong>de</strong> à une certaine fonction <strong>de</strong> <strong>de</strong>nsité<br />

ϱ : D → R + fournie en entrée du programme. Plus précisément, pour tout triangle t du<br />

maillage, on veut que le cercle circonscrit (c, r) <strong>de</strong> t soit <strong>de</strong> rayon r ≤ ϱ(c).<br />

2


Fig. 2 – Résultat <strong>de</strong> l’algorithme pour la fonction radiale r3(θ, φ) = 0.1 + cos2 θ. À gauche, le<br />

maillage <strong>de</strong> D ; au centre, le maillage <strong>de</strong> S2 ; à droite, le maillage <strong>de</strong> S, <strong>de</strong> <strong>de</strong>nsité uniforme.<br />

Soit P l’ensemble <strong>de</strong>s sommets du maillage. Puisque D est convexe, le bord du maillage est<br />

formé <strong>de</strong>s arêtes <strong>de</strong> Conv(P ), l’enveloppe convexe <strong>de</strong> P . Pour satisfaire le premier point, il suffit<br />

donc <strong>de</strong> faire en sorte que tous les points <strong>de</strong> P situés sur Conv(P ) ap<strong>par</strong>tiennent à C.<br />

Pour construire le maillage, nous allons utiliser la triangulation <strong>de</strong> Delaunay <strong>de</strong> P , définie<br />

comme suit :<br />

Définition 2.1 Une triangulation d’un ensemble fini P <strong>de</strong> points du plan est un ensemble<br />

maximal <strong>de</strong> triangles reliant les points <strong>de</strong> P , tel que <strong>de</strong>ux triangles ne peuvent s’intersecter que<br />

le long d’un sommet commun ou d’une arête commune.<br />

Définition 2.2 La triangulation <strong>de</strong> Delaunay d’un ensemble fini P <strong>de</strong> points du plan est une<br />

triangulation <strong>de</strong> P telle que tout triangle a un cercle circonscrit vi<strong>de</strong> <strong>de</strong> points <strong>de</strong> P . Elle est<br />

notée Del(P ).<br />

Fig. 3 – Pour les définitions 2.1 et 2.2.<br />

À noter que la triangulation <strong>de</strong> Delaunay <strong>de</strong> P existe toujours, et qu’elle est unique si les<br />

points <strong>de</strong> P sont en position générale, i.e. si trois points quelconques ne sont jamais alignés<br />

sur le bord <strong>de</strong> l’enveloppe convexe <strong>de</strong> P , et si quatre points quelconques ne sont jamais sur un<br />

même cercle vi<strong>de</strong> d’autres points <strong>de</strong> P . Cette hypothèse <strong>de</strong> généricité sera supposée vérifiée tout<br />

au long du projet, donc vous n’aurez pas besoin <strong>de</strong> vous en soucier.<br />

3


La figure 3 illustre les définitions 2.1 et 2.2. L’image <strong>de</strong> gauche ne représente pas une triangulation<br />

car les <strong>de</strong>ux triangles en gras ont <strong>de</strong>s intérieurs qui s’intersectent. L’image centrale<br />

montre une triangulation qui n’est pas <strong>de</strong> Delaunay car le cercle circonscrit au triangle en gras<br />

contient un sommet. Enfin, l’image <strong>de</strong> droite représente une triangulation <strong>de</strong> Delaunay.<br />

La triangulation <strong>de</strong> Delaunay est intéressante à <strong>de</strong>ux titres pour le maillage :<br />

• <strong>par</strong>mi les triangulations <strong>de</strong> P , Del(P ) est celle qui maximise le plus petit angle entre <strong>de</strong>ux<br />

arêtes inci<strong>de</strong>ntes. En d’autres termes, c’est celle dont les triangles sont les moins aplatis ;<br />

• la propriété du cercle vi<strong>de</strong> permet <strong>de</strong> construire itérativement un ensemble <strong>de</strong> sommets<br />

P , en insérant dans P , à chaque itération, le centre d’un cercle vi<strong>de</strong>.<br />

On donne ci-<strong>de</strong>ssous une variante <strong>de</strong> l’algorithme <strong>de</strong> Ruppert [4], basée sur la propriété du cercle<br />

vi<strong>de</strong>, qui construit un maillage du disque D :<br />

1. on choisit 3 points <strong>de</strong> C, que l’on insère dans un ensemble P dont on calcule la triangulation<br />

<strong>de</strong> Delaunay, Del(P ) ;<br />

2. tant qu’il reste un triangle t <strong>de</strong> Del(P ) dont le cercle circonscrit (c, r) est tel que r > ϱ(c) :<br />

– si c se trouve dans le disque diamétral (ouvert) d’une quelconque arête e <strong>de</strong> l’enveloppe<br />

convexe <strong>de</strong> P , alors il n’est pas inséré dans P ; à la place, on insère le point <strong>de</strong> C ∩med(e)<br />

le plus proche <strong>de</strong>s sommets <strong>de</strong> e, où med(e) désigne la médiatrice <strong>de</strong> e ;<br />

– sinon, c est inséré dans P ;<br />

après chaque insertion, Del(P ) est mis à jour.<br />

3. en sortie <strong>de</strong> l’algorithme, on retourne Del(P ).<br />

Question 2.1 (facultative) Montrez que si les points choisis en 1. forment un triangle dont<br />

les trois angles internes valent au plus π<br />

2 , alors les points <strong>de</strong> P situés sur Conv(P ) ap<strong>par</strong>tiennent<br />

bien à C, et ce tout au long <strong>de</strong> l’algorithme.<br />

En pratique, on prendra les points (0, 1), ( √ 3/2, −1/2) et (− √ 3/2, −1/2) pour initialiser l’algorithme.<br />

On déduit immédiatement <strong>de</strong> la question 2.1 que le bord du maillage <strong>de</strong> sortie est<br />

conforme à C. Par ailleurs, l’algorithme fait en sorte que les rayons <strong>de</strong>s cercles circonscrits <strong>de</strong>s<br />

triangles <strong>de</strong> Del(P ) soient petits, donc le maillage <strong>de</strong> sortie vérifie les <strong>de</strong>ux points énoncés au<br />

début <strong>de</strong> la section 2.1. Par ailleurs, on admettra que l’algorithme termine toujours. Une preuve<br />

<strong>de</strong> terminaison se trouve dans [4].<br />

2.2 Implémentation<br />

L’objectif principal <strong>de</strong> la section 2 est d’implémenter l’algorithme décrit plus haut. Le <strong>de</strong>sign<br />

<strong>de</strong> l’implémentation est libre, tout comme le langage utilisé.<br />

Pour les utilisateurs <strong>de</strong> C++, nous recommandons la bibliothèque CGAL, disponible sur le<br />

site http://www.cgal.org et installée sur les machines <strong>de</strong> l’ <strong>École</strong>. Cette bibliothèque fournit<br />

une implémentation robuste et efficace <strong>de</strong> la triangulation <strong>de</strong> Delaunay.<br />

Pour les utilisateurs <strong>de</strong> JAVA, nous fournissons une implémentation <strong>de</strong> la triangulation<br />

<strong>de</strong> Delaunay basée sur une approche incrémentale : les sommets sont insérés un <strong>par</strong> un et la<br />

triangulation est mise à jour à la volée. Une archive avec le co<strong>de</strong> source se trouve à l’adresse suivante<br />

: http://www.enseignement.polytechnique.fr/profs/informatique/Steve.Oudot/<br />

cours/PI/Delaunay.tgz. Cette archive contient entre autres un fichier lisez moi.txt qui<br />

donne <strong>de</strong>s indications sur la structure <strong>de</strong> données utilisée, ainsi que sur la manière <strong>de</strong> compiler<br />

et d’exécuter le programme.<br />

Une implémentation basique <strong>de</strong> l’algorithme <strong>de</strong> maillage décrit dans la section 2.1 consiste<br />

à re-générer entièrement la liste <strong>de</strong>s triangles <strong>de</strong> la triangulation <strong>de</strong> Delaunay ainsi que celle <strong>de</strong>s<br />

arêtes <strong>de</strong> l’enveloppe convexe à chaque itération <strong>de</strong> l’algorithme. Cette version est suffisamment<br />

4


efficace pour générer <strong>de</strong>s maillages <strong>de</strong> plusieurs milliers <strong>de</strong> sommets en quelques dizaines <strong>de</strong><br />

secon<strong>de</strong>s sur une machine récente, c’est donc un bon point <strong>de</strong> dé<strong>par</strong>t. Le co<strong>de</strong> JAVA fourni<br />

implémente d’ailleurs certaines <strong>de</strong>s routines (calcul du centre du cercle circonscrit à un triangle,<br />

test d’ap<strong>par</strong>tenance d’un point au disque diamétral d’un segment, etc.) requises <strong>par</strong> l’algorithme<br />

<strong>de</strong> maillage, ce qui <strong>de</strong>vrait vous simplifier la tâche1 .<br />

Pour la visualisation <strong>de</strong>s maillages produits en sortie, nous recommandons le programme<br />

Geomview, installé sur les machines <strong>de</strong> l’ <strong>École</strong>. Pour lancer le programme, tapez geomview dans<br />

un terminal. Geomview prend en entrée un fichier au format OFF, structuré comme suit :<br />

OFF<br />

n m 0 ## n = nombre <strong>de</strong> sommets, m = nombre <strong>de</strong> faces<br />

x0 y0 z0 ## Coordonnées du premier point<br />

x1 y1 z1 ## Coordonnées du <strong>de</strong>uxième point<br />

· · ·<br />

xn−1 yn−1 zn−1 ## Coordonnées du <strong>de</strong>rnier point<br />

d p1 p2 · · · pd ## d = nombre <strong>de</strong> sommets <strong>de</strong> la face ; p1, p2, · · · , pd = indices<br />

d q1 q2 · · · qd ## <strong>de</strong>s sommets <strong>de</strong> la face (entre 0 et n − 1)<br />

· · ·<br />

Remarquez que les sommets doivent impérativement avoir 3 coordonnées. Dans le cas d’un<br />

maillage 2-dimensionnel, la troisième coodonnée peut être mise à 0. Le co<strong>de</strong> JAVA fourni contient<br />

une classe Test qui génère <strong>de</strong>s exemples <strong>de</strong> fichiers OFF.<br />

Dans un premier temps, la fonction <strong>de</strong> <strong>de</strong>nsité ϱ : D → R + pourra être considérée comme<br />

constante. Dans les sections 3 et 4, on essaiera <strong>de</strong> définir une fonction <strong>de</strong> <strong>de</strong>nsité adaptée à la<br />

sphère S 2 , puis à la surface S.<br />

Question 2.2 Implémentez la version basique <strong>de</strong> l’algorithme <strong>de</strong> maillage, avec une fonction<br />

<strong>de</strong> <strong>de</strong>nsité constante ϱ = ϱ0, puis faites tourner votre programme pour diverses valeurs <strong>de</strong> la<br />

constante ϱ0 et dressez un tableau <strong>de</strong> l’évolution du nombre <strong>de</strong> sommets en fonction <strong>de</strong> ϱ0.<br />

Quelle loi empirique pouvez-vous extraire <strong>de</strong> vos données ?<br />

Question 2.3 (facultative) La version basique du mailleur n’est pas très efficace car elle recalcule<br />

toute la liste <strong>de</strong>s triangles <strong>de</strong> Delaunay et toute celle <strong>de</strong>s arêtes <strong>de</strong> l’enveloppe convexe<br />

après chaque insertion d’un nouveau point, même si ces listes ont très peu changé. Optimisez<br />

la mise à jour <strong>de</strong>s listes, <strong>de</strong> manière à rendre l’algorithme plus efficace. Dressez un tableau <strong>de</strong>s<br />

temps <strong>de</strong> calcul obtenus en fonction du nombre <strong>de</strong> points insérés dans le maillage. Quel ordre<br />

<strong>de</strong> gran<strong>de</strong>ur <strong>de</strong> complexité atteignez-vous ?<br />

3 Projection du disque D sur la sphère S 2<br />

Maintenant que nous disposons d’un maillage M <strong>de</strong> D conforme à C, il nous faut relever les<br />

sommets <strong>de</strong> M sur S2 <strong>par</strong> une projection Π qui laisse C invariant, afin d’obtenir un maillage<br />

<strong>de</strong> la <strong>de</strong>mi-sphère supérieure qui soit lui aussi conforme à C . Le maillage <strong>de</strong> S2 sera obtenu<br />

en recollant le maillage <strong>de</strong> la <strong>de</strong>mi-sphère supérieure avec son symétrique <strong>par</strong> rapport au plan<br />

horizontal2 .<br />

À ce sta<strong>de</strong>, plusieurs fonctions <strong>de</strong> projection Π sont possibles. La plus simple est la projection<br />

verticale, définie <strong>par</strong> Πv : (x, y) ↦→ x, y, 1 − x2 − y2 <br />

.<br />

1<br />

À l’ai<strong>de</strong> du co<strong>de</strong> JAVA fourni, une version basique du mailleur peut être implémentée en 90 lignes <strong>de</strong> co<strong>de</strong><br />

seulement.<br />

2<br />

Attention à ne pas dédoubler les sommets <strong>de</strong> M se trouvant sur C !<br />

5


Question 3.1 Implémentez Πv et utilisez-la pour construire le maillage <strong>de</strong> S 2 à <strong>par</strong>tir <strong>de</strong> M.<br />

Testez votre programme : quel est le problème ? Essayez <strong>de</strong> modifier la fonction <strong>de</strong> <strong>de</strong>nsité ϱ, <strong>par</strong><br />

exemple en la faisant dépendre <strong>de</strong> la distance au centre du disque D. Le problème se résout-il ?<br />

Expliquez.<br />

On se propose d’utiliser à la place <strong>de</strong> Πv une projection stéréographique, définie <strong>par</strong> :<br />

<br />

2x<br />

Πs : (x, y) ↦→<br />

1 + x2 2y<br />

,<br />

+ y2 1 + x2 + y2 , 1 − x2 − y2 1 + x2 + y2 <br />

.<br />

Question 3.2 Remplacez la projection Πv <strong>par</strong> Πs dans votre programme et essayez <strong>de</strong> trouver<br />

expérimentalement une fonction ϱ qui résolve le problème évoqué à la question 3.1.<br />

Remarque. Avant <strong>de</strong> vous lancer dans le codage, vérifiez à tout hasard que Πs est bien à<br />

valeurs dans S 2 ...<br />

Une fois les sommets du maillage remontés sur S 2 , certains triangles ont plus grossi que<br />

d’autres. C’est un effet <strong>de</strong> ce qu’on appelle l’étirement. Formellement, étant donné une fonction<br />

f : R 2 → R 3 et un point p ∈ R 2 , l’étirement associé à f en p est la forme quadratique E p<br />

f définie<br />

comme suit :<br />

∀v ∈ R 2 , E p<br />

f (v) = ∂vf(p) T ∂vf(p), (1)<br />

où ∂vf(p) = limh→0 + f(p+hv)−f(p)<br />

∈ R3 est la dérivée <strong>par</strong>tielle <strong>de</strong> f en p le long <strong>de</strong> la direction<br />

h<br />

v. En d’autres termes, E p<br />

f = Df (p) T Df (p) ∈ R 2×2 , où Df (p) ∈ R 3×2 est la différentielle <strong>de</strong> f en<br />

(v) est appelé l’étirement associé à f en p le long <strong>de</strong> v.<br />

Puisque E p<br />

f est une forme quadratique, sa matrice est diagonalisable dans une base orthonormée.<br />

Il existe donc <strong>de</strong>ux vecteurs unitaires3 v1(p) et v2(p), appelés directions principales,<br />

p. Pour tout vecteur v <strong>de</strong> R 2 , E p<br />

f<br />

tels que pour n’importe quel vecteur non nul v ∈ R2 , E p<br />

f (v)/vTv est une combinaison linéaire<br />

convexe <strong>de</strong> E p<br />

f (v1(p)) et <strong>de</strong> E p<br />

f (v2(p)).<br />

Question 3.3 (facultative) Montrez que l’étirement associé à Πs en tout point (x, y) <strong>de</strong> D<br />

est isotrope, c’est-à-dire que ses <strong>de</strong>ux valeurs propres v1(p) et v2(p) sont égales en tout point<br />

p ∈ D. En déduire qu’il existe un réel λΠs(x, y) tel que ∀v ∈ R2 , E x,y<br />

Πs (v) = λΠs(x, y) vTv, avec<br />

λΠs(x, y) = <br />

∂Πs<br />

2 2<br />

∂Πs<br />

∂x = ∂y = 4(1 + x2 + y2 ) −2 .<br />

Connaître l’étirement permet <strong>de</strong> fixer la <strong>de</strong>nsité ϱ du maillage M <strong>de</strong> sorte que les cercles circonscrits<br />

aux triangles du maillage <strong>de</strong> S 2 aient tous à peu près le même rayon. Dans le cas <strong>de</strong><br />

Πs, l’étirement est isotrope donc il ne dépend pas <strong>de</strong> la direction choisie. Nous pouvons dès lors<br />

fixer ϱ(x, y) = 1/ λΠs(x, y) = (1 + x 2 + y 2 )/2. Ceci nous permet <strong>de</strong> générer un maillage <strong>de</strong> la<br />

sphère S 2 <strong>de</strong> <strong>de</strong>nsité uniforme.<br />

Question 3.4 Ajoutez à votre co<strong>de</strong> une fonction qui calcule λΠs, et utilisez-la pour construire<br />

le maillage <strong>de</strong> S 2 . Vérifiez expérimentalement que le maillage que vous obtenez a une <strong>de</strong>nsité à<br />

peu près uniforme. Pour cela, vous pourrez <strong>par</strong> exemple tracer l’histogramme <strong>de</strong> la ré<strong>par</strong>tition<br />

<strong>de</strong>s rayons <strong>de</strong>s triangles <strong>de</strong> votre maillage.<br />

3 Ce sont <strong>de</strong>s vecteurs propres associés aux <strong>de</strong>ux valeurs propres <strong>de</strong> la matrice <strong>de</strong> E p<br />

f .<br />

6


4 Projection <strong>de</strong> la sphère S 2 sur la surface S<br />

Puisque S est étoilée <strong>par</strong> rapport à l’origine o, on peut supposer que la projection Φ : S 2 → S<br />

est radiale, i.e. <strong>de</strong> la forme :<br />

∀p ∈ S 2 , Φ(p) = r(p) p. (2)<br />

où r est une fonction <strong>de</strong> S2 dans R + . Voici quelques exemples <strong>de</strong> fonctions r(p), où p s’écrit<br />

(θ, φ) en coordonnées <strong>sphérique</strong>s :<br />

⎧<br />

r1(θ, φ) = 2 (sphère <strong>de</strong> rayon 2)<br />

⎪⎨<br />

⎪⎩<br />

r2(θ, φ) = 2 + sin θ sin 8θ cos 8φ (star)<br />

r3(θ, φ) = 0.1 + cos 2 θ (cacahuète)<br />

r4(θ, φ) = 0.1 + sin 2 θ cos 2 φ (cacahuète orientée le long <strong>de</strong> l’axe <strong>de</strong>s abcisses)<br />

r5(θ, φ) =<br />

1<br />

sin θ+cos θ si θ ≤ π<br />

2<br />

1 si θ > π<br />

2<br />

(toupie)<br />

Question 4.1 Implémentez ces fonctions dans votre programme pour voir les résultats produits.<br />

Des exemples avec les fonctions r2 et r3 sont donnés respectivement dans les figures 1 and 2.<br />

Remarque. La fonction r5 (toupie) n’est pas symétrique <strong>par</strong> rapport au plan horizontal, ce qui<br />

signifie que les <strong>de</strong>ux moitiés du maillage <strong>de</strong> la sphère S 2 doivent être traitées sé<strong>par</strong>ément avant<br />

d’être recollées (bien vérifier que les <strong>de</strong>ux maillages ont le même bord).<br />

Pour générer un maillage uniforme <strong>de</strong> S, il faut compenser l’étirement lié à Φ ◦ Πs dans<br />

le calcul <strong>de</strong> la fonction <strong>de</strong> <strong>de</strong>nsité ϱ. D’après la formule (1), l’étirement en un point dépend<br />

généralement <strong>de</strong> la direction dans laquelle on regar<strong>de</strong>. Le cas <strong>de</strong> la projection stéréographique<br />

était simple puisque cette <strong>de</strong>rnière a un étirement isotrope en tout point <strong>de</strong> D. En revanche, le<br />

cas général d’un étirement anisotrope est problématique puisqu’on ne sait pas quelle direction<br />

privilégier. Pour s’en sortir, on ne considérera que la composante isotrope <strong>de</strong> l’étirement, définie<br />

comme la moitié <strong>de</strong> la trace <strong>de</strong> la matrice d’étirement :<br />

∀(x, y) ∈ D, λΦ◦Πs(x, y) = 1<br />

2<br />

1<br />

tr Ex,y = Φ◦Πs 2 tr DΦ◦Πs(x, y) T DΦ◦Πs(x, y). (3)<br />

Cette approximation donne d’assez bons résultats en pratique, comme le montre la figure 2. Par<br />

composition, on a DΦ◦Πs(x, y) = DΦ(Πs(x, y))DΠs(x, y), ce qui implique <strong>par</strong> (3) que<br />

λΦ◦Πs(x, y) = 1<br />

2 tr DΠs(x, y) T DΦ(Πs(x, y)) T DΦ(Πs(x, y))DΠs(x, y)<br />

= 1<br />

2 tr DΠs(x, y) T DΠs(x, y)DΦ(Πs(x, y)) T DΦ(Πs(x, y))<br />

= 1<br />

2<br />

tr Ex,y<br />

Πs EΠs(x,y)<br />

Φ<br />

,<br />

où E x,y<br />

Πs = λΠs(x, y)I, comme vu dans la section 3. On en déduit donc que λΦ◦Πs(x, y) =<br />

λΠs(x, y)λΦ(Πs(x, y)), avec λΠs(x, y) = 4(1+x 2 +y 2 ) −2 . Il reste maintenant à calculer λΦ(Πs(x, y)).<br />

Pour cela, on dérive l’équation (2) en tout point p <strong>de</strong> la sphère S 2 et tout vecteur v du plan<br />

TpS 2 tangent à S 2 en p :<br />

∀p ∈ S 2 , ∀v ∈ TpS 2 , ∂vΦ(p) = ∂vr(p) p + r(p) ∂vp = ∂vr(p) p + r(p) v.<br />

7


Puisque les vecteurs (p − o) et v sont orthogonaux, on en déduit <strong>par</strong> Pythagore que<br />

E p<br />

Φ (v) = ∂vΦ(p) T ∂vΦ(p) = ∂vr(p) 2 p T p + r 2 (p) v T v = ∂vr(p) 2 + r 2 (p) v T v. (4)<br />

Par ailleurs, r étant à valeurs dans R, on a ∂vr(p) = ∇r(p) T v, où ∇r(p) ∈ TpS 2 est le gradient<br />

<strong>de</strong> r au point p ∈ S 2 . On en déduit que ∂vr(p) 2 = v T ∇r(p)∇r(p) T v, où ∇r(p)∇r(p) T est une<br />

matrice symétrique (2 × 2). En combinant ce résultat avec l’équation (4), on obtient :<br />

E p<br />

Φ = ∇r(p)∇r(p) T + r 2 (p) I. (5)<br />

Maintenant, <strong>par</strong> un calcul standard en coordonnées <strong>sphérique</strong>s, on a :<br />

∀p = (θ, φ) ∈ S 2 , ∇r(p) = ∂r<br />

∂θ<br />

1 ∂r<br />

dθ +<br />

sin θ ∂φ dφ,<br />

où dθ, dφ ∈ TpS 2 sont les vecteurs unitaires associés aux coordonnées <strong>sphérique</strong>s θ et φ. Dans<br />

la base orthonormée (dθ, dφ) <strong>de</strong> TpS 2 , on a donc ∇r(p) = ( ∂r<br />

∂θ , 1 ∂r<br />

sin(θ) ∂φ ), ce qui, combiné à<br />

l’équation (5), nous donne :<br />

λΦ(p) = 1<br />

2 tr ∇r(p)∇r(p) T + r 2 (p) I = 1<br />

2 ∂r 1<br />

+<br />

2 ∂θ 2 sin2 2 ∂r<br />

+ r<br />

θ ∂φ<br />

2 (p). (6)<br />

Pour générer un maillage à peu près uniforme <strong>de</strong> la surface S à <strong>par</strong>tir du disque unité D, nous<br />

pouvons donc prendre comme fonction <strong>de</strong> <strong>de</strong>nsité ϱ(x, y) = 1/ λΠs(x, y) λΦ(Πs(x, y)), avec<br />

λΠs(x, y) = 4(1 + x2 + y2 ) −2 et λΦ(p) = 1<br />

<br />

∂r 2 1<br />

2 ∂θ +<br />

2 sin2 2 ∂r<br />

θ ∂φ + r2 (p).<br />

Question 4.2 Ajoutez à votre co<strong>de</strong> <strong>de</strong>s métho<strong>de</strong>s qui calculent les composantes isotropes λΦ <strong>de</strong>s<br />

étirements associés aux projections Φ définies <strong>par</strong> les fonctions r1, · · · , r5. Vérifiez expérimentalement<br />

que les maillages produits <strong>par</strong> votre programme ont <strong>de</strong>s <strong>de</strong>nsités à peu près uniformes.<br />

5 Améliorations<br />

Les maillages que nous avons produits jusqu’ici ont un défaut : du fait que l’on recolle les<br />

maillages <strong>de</strong>s <strong>de</strong>ux <strong>de</strong>mi-sphères le long <strong>de</strong> l’équateur, ce <strong>de</strong>rnier ap<strong>par</strong>aît clairement dans le<br />

maillage <strong>de</strong> S 2 , ainsi que dans celui <strong>de</strong> S puisque Φ est radiale – voir l’exemple <strong>de</strong> la figure 2. Une<br />

métho<strong>de</strong> pour pallier ce défaut consiste à perturber aléatoirement les sommets du maillage <strong>de</strong><br />

D se trouvant sur C. La perturbation doit s’effectuer vers l’intérieur <strong>de</strong> D, pour que les sommets<br />

puissent encore être projetés sur S 2 <strong>par</strong> Πs. Par ailleurs, l’amplitu<strong>de</strong> <strong>de</strong> la perturbation doit<br />

bien évi<strong>de</strong>mment dépendre <strong>de</strong> la fonction <strong>de</strong> <strong>de</strong>nsité ϱ choisie.<br />

Question 5.1 Ajoutez à votre co<strong>de</strong> une métho<strong>de</strong> qui perturbe les sommets du maillage <strong>de</strong> D se<br />

trouvant sur C. Observez le résultat sur les maillages <strong>de</strong> S 2 et <strong>de</strong> S, pour les fonctions r définies<br />

plus haut. Perturber les sommets a-t-il toujours un intérêt ?<br />

On veut maintenant générer <strong>de</strong>s maillages dont la <strong>de</strong>nsité soit adaptée à la courbure locale<br />

<strong>de</strong> S. Ceci permettra <strong>de</strong> réduire l’erreur d’approximation. Puisque notre fonction <strong>de</strong> <strong>de</strong>nsité ϱ<br />

nous garantit une <strong>de</strong>nsité uniforme, il suffit <strong>de</strong> la pondérer <strong>par</strong> la courbure <strong>de</strong> S, elle-même liée<br />

à la différentielle secon<strong>de</strong> <strong>de</strong> r.<br />

Question 5.2 Modifiez votre fonction <strong>de</strong> <strong>de</strong>nsité ϱ pour qu’elle prenne en compte 4 la courbure<br />

<strong>de</strong> S. Vérifiez visuellement sur plusieurs exemples que les maillages obtenus ont <strong>de</strong>s <strong>de</strong>nsités<br />

adaptées à la courbure <strong>de</strong> S.<br />

4 Il y a mille manières <strong>de</strong> le faire, sans forcément calculer la différentielle secon<strong>de</strong> <strong>de</strong> r. Choisissez la métho<strong>de</strong><br />

qui vous convient le mieux, en justifiant votre choix.<br />

8


6 Extensions<br />

Plusieurs extensions du travail effectué dans le cadre <strong>de</strong> ce projet sont envisageables :<br />

• considérer <strong>de</strong>s fonctions Φ : S 2 → S qui ne soient pas radiales. On se place alors dans le<br />

cas général d’un <strong>par</strong>amétrage <strong>sphérique</strong> d’une surface connexe sans anse ni bord.<br />

• considérer <strong>de</strong>s <strong>surfaces</strong> sans anse mais avec <strong>de</strong>s bords. Le <strong>par</strong>amétrage peut alors se faire<br />

sur un morceau <strong>de</strong> plan puisque, du point <strong>de</strong> vue topologique, le plan n’est rien d’autre<br />

qu’une sphère avec un trou. Le domaine <strong>de</strong>s <strong>par</strong>amètres est alors un domaine du plan avec<br />

le même nombre <strong>de</strong> bords que la surface S.<br />

• considérer <strong>de</strong>s <strong>surfaces</strong> avec g anses, comme <strong>par</strong> exemple le tore (où g = 1). La <strong>par</strong>amétrisation<br />

<strong>de</strong> S ne se fait alors plus sur une sphère, mais sur un g-tore.<br />

Références<br />

[1] Jean-Daniel Boissonnat and Steve Oudot. An effective condition for sampling <strong>surfaces</strong> with guarantees.<br />

In Proc. 9th Symp. on Solid Mo<strong>de</strong>ling, pages 101–112, 2004.<br />

[2] Jean-Daniel Boissonnat, David Cohen Steiner, and Gert Vegter. Isotopic implicit surface meshing.<br />

In Proceedings of the thirty-sixth annual ACM symposium on Theory of computing, pages 301 – 309,<br />

2004.<br />

[3] Siu-Wing Cheng, Tamal K. Dey, Edgar A. Ramos, and Tathagata Ray. Sampling and meshing<br />

a surface with guaranteed topology and geometry. In Proc. 20th Annu. ACM Sympos. Comput.<br />

Geom., pages 280 – 289, 2004.<br />

[4] J. Ruppert. A Delaunay refinement algorithm for quality 2-dimensional mesh generation. J. Algorithms,<br />

18 :548–585, 1995.<br />

9

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!