Vous êtes sur la page 1sur 7

Triangulation de Delaunay

Raphaël Berthon & Joan Thibault


ENS Rennes

8 mars 2015

Table des matières

1 Triangulation de Delaunay 2
1.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Implémentation et algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.1 Ajout d’un point à une triangulation . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 Déterminer si un point est dans un cercle . . . . . . . . . . . . . . . . . . . 3
1.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Modèle physique 5
2.1 Choix du modèle physique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Mise en équation : Méthode d’Euler . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Choix des structures de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

A Annexe : auto-évaluation 7

Résumé
Voici le rapport du second projet de programmation. L’objectif était de un nuage de
points, en respectant le critère de Delaunay et la contrainte que les points soient contenus
dans un nuage pré-triangulé (ici : un rectangle constitué de ses quatre sommets reliés par
deux triangles)
Notre apport personnel a consisté en l’introduction d’un modèle physique permettant
une première approche dans la modélisation des tissus.
Mots-clés. Triangulation, Delaunay, physique, approximation.

1
1 Triangulation de Delaunay

1.1 Présentation

1.1.1 Définition

La triangulation de Delaunay d’un ensemble E de points est la donnée d’un ensemble T de


triangles tel que :
– ∀ P ∈ E∃t ∼ ( P1 , P2 , P3 ) ∈ TtelqueP ∈ { P1 , P2 , P3 } (i.e. tout point P appartient à au moins
un triangle de sommet P1 , P2 , P3 .) (voir Figure 1)
– ∀t ∼ ( P1 , P2 , P3 ) ∈ T ∀ P ∈ Ptelquep { P1 , P2 , P3 } ⇒ P Ct (i.e. pour tout triangle, un point
qui n’est pas un sommet n’appartient pas au cercle circonscrit à ce triangle qui est alors
dit vide)

F IGURE 1 – La triangulation de Delaunay de quatre points, et les cercles circonscrit des deux
triangles.

La propriété de Delaunay permet de limiter l’apparition de triangles aplatis (i.e. lorsque le


rapport surface / périmètre devient petit).

1.1.2 Utilisation

L’utilité de la triangulation de Delaunay dans sa capacité à générer un pavage du plan, sui-


vant certaines contraintes, trouve des applications en imagerie pour la compression de don-
nées ou pour l’approximation de surfaces.
Une autre application est la physique : en effet la résolution d’équations différentielles
dans les milieux continus trouve rapidement ses limites lorsque les contraintes se complexi-
fient. Il est alors nécessaire de discrétiser ces milieux pour pouvoir y approximer l’évolution
de champs par des calculs informatiques. C’est sur ce point que nous développerons notre
deuxième partie.
Le point commun de ces deux champs d’application est qu’en choisissant judicieusement
la densité du nuage de point, il est possible de concentrer les calculs sur les points d’intérêt
(zone à forte densité de points), par exemple : un visage en imagerie ou une zone de tension
en physique.

2
1.2 Implémentation et algorithme

1.2.1 Ajout d’un point à une triangulation

Pour générer une triangulation de Delaunay, nous nous basons sur un algorithme itératif
où chaque itération consiste à ajouter un point à la triangulation tout en conservant le critère
de Delaunay.
En effet, partant d’un maillage vérifiant le critère de Delaunay. L’ajout d’un point P à ce
maillage, s’obtient par le calcul successif des éléments suivants :
– T̃P ⊂ T l’ensemble des triangles dont le cercle circonscrit contient P (parcours de tout les
triangle, complexité : O(T))
– B( T̃P ) ⊂ A l’ensemble des arrêtes formant l’enveloppe connexe de T̃P (parcours de l’en-
semble des arrêtes issues des triangles de T̃P ,complexité : O(A))
– T̃˜ P un ensemble de triangles. Chacun d’eux constitués d’une arrête de B( T̃P et du point
P (parcours de l’ensemble des arrêtes de B( T̃P (complexité O(A)) et création de triangle
O(1)) (voir Figure 2)
– T ← ( T \ T̃P ) ∪ T̃˜ P

F IGURE 2 – A gauche, les triangles gris sont ceux tels que le point ajouté soit dans leur cercle
circonscrit. A droite, la triangulation finalement obtenue.

Cependant cet algorithme, impose que les points soient ajoutés à l’intérieur d’une triangu-
lation de Delaunay préexistante. Pour ce faire, on repère les points d’abscisse/ordonnée mi-
nimale/maximale, x/X/y/Y (x l’abscisse minimale, Y l’ordonnée maximale), ont note H ⊂ E,
cet ensemble de points. On commence par ajouter les points de H . On considère ensuite le
rectangle formé par les points (x,y) (x,Y) (X,Y) (X,y). On ajoute ensuite itérativement les points
de H, en évitant les triangles plats. Finalement, on ajoute les points de T \ H (voir Figure 3)
On commence par ajouter les points de H . On considère ensuite le rectangle formé par les
points (x,y) (x,Y) (X,Y) (X,y). On ajoute ensuite itérativement les points de H, en évitant les
triangles plats. Finalement, on ajoute les points de T \ H (voir Figure 3)

1.2.2 Déterminer si un point est dans un cercle

Nous avons réduit le problème de la triangulation à déterminer si un point P se trouvait à


l’intérieur du cercle circonscrit à un triangle T ∼ ( A = ( A x , Ay ), B = ( Bx , By ), C = (Cx , Cy )).
Quitte à permuter les points, il est possible de considérer le triangle T ∼ ( A, B, C ) direct.

3
F IGURE 3 – La triangulation de Delaunay de trente points, inscrits dans un carré.

Pour cela, il faut déterminer si le triangle A B C est direct. On vérifie donc si :


   
Bx − A x Cx − A x
 By − Ay  ∧  Cy − Ay  a sa première coordonnée supérieure ou égale à 0.
0 0
D’où ( Bx − A x ) ∗ (Cy − Ay ) − (Cx − A x ) ∗ ( By − Ay ) ≥ 0
 
Bx − A x Cx − A x
D’où ≥0
By − Ay Cy − Ay

On peut alors savoir si un point D appartient au cercle circonscrit au triangle direct


T ∼ ( A, B, C ) si et seulement si :
 
A x Ay A2x + A2y 0
2 2
 x By Bx + By 0
B 
 >0
 Cx Cy Cx2 + Cy2 0

Dx Dy Dx2 + Dy2 0
A partir ce ces deux calculs, et de la procédure donnée ci-dessus, on peut obtenir la
triangulation de Delaunay d’un ensemble de points.

1.3 Conclusion

Après avoir écrit un programme permettant le calcul de la triangulation de Delaunay, nous


l’avons utiliser dans le cadre d’une simulation physique : la modélisation des tissus.

4
2 Modèle physique

2.1 Choix du modèle physique

Notre choix de modèle s’est porté sur une version assez simple, où chaque arête est assimilé
à un ressort (représentant le caractère élastique du matériaux), le choix de leur longueur à
vide fixe est le principal facteur pour déterminer l’état final du système, nous permettant de
distinguer deux situations différentes.
Lorsque la longueur à vide des ressorts est égale à leur longueur initiale dans la triangula-
tion, le modèle représente les déformation d’un tissu initialement dans un état stable.
À l’inverse, lorsque i la longueur à vide des ressorts est différente de leur longueur initiale,
on obtient un système déjà sous contrainte. Permettant d’observer la relaxation du matériaux.
Nous avons choisit la deuxième méthode dans un souci de simplicité. À cette fin, nous
fixons la longueur initiale de tout les ressorts égale à l0 la moyenne de la longueur de arête à
l’instant initial. L’ajout d’un coefficient de frottement permet de tendre vers un état stable du
système.

2.2 Mise en équation : Méthode d’Euler

Nous somme donc partis des formules suivantes :


Force de rappel d’un ressort :

Fk ~ 2 k − l ) e ~ = k d 1−2 − l0 1 →
~ 1→2 = k(k1 → ~ 2
| {z } 0 1→2 d 1−2
noted1−2

Force de frottement :
~ Ω→1 = −αv~1

On obtient les équations du mouvement :


∂v~1 1
a~1 = = ∑ ~F→1
∂t m
∂P~1
v~1 =
∂t
Nous avons utilisé la méthode d’Euler, qui consiste à considérer que pendant une petite
durée ∆t, l’accélération a~1 reste constante : la vitesse n’aura ainsi variée que d’un v~1 ; on obtient
ainsi la vitesse v~1 à t + ∆t, et on recalcule l’accélération à ce moment là, que l’on considère de
nouveau constante durant une petite durée. On fait de même entre la vitesse v~1 et la position
du point P~1
Pour cela, il nous faut déjà séparer les variables utilisées :

a~1 ∂t = ∂v~1
~1
v~1 ∂t = ∂ P

Puis introduire ∆t
a~1 × ∆t = ∆v~1

5
v~1 × ∆t = ∆ P
~1

A partir de là, on peut ainsi approximer l’évolution dynamique du système.

2.3 Choix des structures de données

Nous avons utilisé une structure de donnée que nous avons nommée Upoint (Univers de
points). Un point, en plus de contenir ses coordonnées, contient un alias vers chaque triangle
et chaque arête dont il fait parti. Cette structure permet d’accélérer le calcul de l’enveloppe
connexe d’un ensemble de triangle, mais également d’autre optimisation que nous n’avons
pas eu le temps d’implémenter tel que la réduction du temps moyen de recherche d’un
élément (point, arête, triangle)..

Dans cette structure, les points se voient associés à un identifiant i, ce qui permet de les
ordonner. Ainsi, les triangles ne sont plus seulement décrits par trois points A, B, C (ce qui
donnait 6 représentants pour décrire chaque triangle, comme on peut le voir sur la Figure
4), mais ces trois points doivent également vérifier : i ( A) i ( B), i ( A) i (C ), ( A, B, C )forment
un triangle direct. De cette manière, l’égalité entre deux triangles revient à l’identité leur
représentants choisis.

F IGURE 4 – Les six représentants possibles d’un triangles, les couleurs représentant l’ordre
d’apparition des sommets.

6
A Annexe : auto-évaluation

Points forts
– Utiliser des équations physiques
– Utiliser la méthode d’Euler
– Implémenter une extension dynamique.

Points faibles
– Échanger (transfert de données)
– Commenter le code, lors de sa rédaction (et non à la fin)
– Gérer du temps imparti, notamment pour la version basique du projet.

Améliorations possibles
– Utiliser d’avantage les fonctions présentes de base dans OCaml
– Conserver un code LATEX standard, afin d’optimiser le temps passé à concevoir la présen-
tation et le rapport.

Difficultés à anticiper
– Échanger : prendre en compte SVN/GIT lors de la répartition des tâches
– Hiérarchiser les objectifs.
– Tester les fonctions au fur et à mesure du projet.

Vous aimerez peut-être aussi