Structures de données compactes en triangulations
Structures de données compactes en triangulations
les triangulations
Abdelkrim Mebarki
THESE
Docteur en Sciences
de l’Université de Nice-Sophia Antipolis
Mention : Informatique
Abdelkrim MEBARKI
Rapporteurs :
M. Jean-Michel MOREAU professeur
M. Gilles SCHAEFFER directeur de Recherche CNRS
Jury :
Jean-Michel MOREAU professeur rapporteur
Jérôme GALTIER ingénieur Orange Labs examinateur
André LIEUTIER ingénieur Dassault Systèmes examinateur
Olivier DEVILLERS directeur de recherche INRIA directeur de thèse
Luca CASTELLI ALEARDI docteur invité
Remerciements
Je tiens à remercier Olivier Devillers, mon directeur de thèse, pour avoir dirigé
ce travail. Pour m’avoir accueilli au sein du projet GEOMETRICA durant mon DEA,
et pendant ma thèse. Pour son soutien durant toutes mes études en France. Pour sa
disponibilité, son aide et son suivi pédagogique et administratif durant ma formation.
Je remercie Jean-Michel Moreau et Gilles Schaeffer pour l’attention qu’ils ont
porté à mon travail, et pour avoir accepté d’être rapporteurs de ma thèse.
Je remercie Jérôme Galtier et André Lieutier qui ont bien voulu accepter de
participer au jury de ma thèse.
Je remercie Luca Castelli Aleardi pour son aide précieuse durant ma thèse, et
pour avoir accepté d’assister à ma soutenance.
Je tiens à exprimer mes vifs remerciements à Agnès Bessière pour sa
générosité, et son soutien durant mon séjour à GEOMETRICA.
Je remercie tous les membres du projet GEOMETRICA, permanents,
doctorants, ingénieurs et stagiaires, avec qui j’ai passé trois ans. Pour leurs soutiens,
Jean-Daniel, Frédéric, David, Steve, Monique, Mariette, Benjamin, Samuel, Manuel,
Sébastien, Pedro, Quentin, Pooran, Trung, Nader, Jane, Camille, Andreas, Laurent S.,
Laurent R., Flavien, Naceur, Christophe, Marc, Marie.
Je remercie Sylvain Pion, pour son aide très précieuse tout au long de mon
travail.
Je remercie Pierre Alliez, pour son aide, et son suivi durant mon DEA. Pour
tout ce que j’ai pu apprendre de lui.
Je tiens à remercier également le personnel administratif de l’INRIA,
notamment Vanessa Wallet, pour son aide au niveau administratif.
Je remercie le personnel du CROUS de Nice pour leurs aides et leurs soutiens
durant tout mon séjour à Nice, et spécialement Mme. Rodriguez pour tous ces efforts
et son soutien.
Je remercie M. le consul d’Algérie à Nice, ainsi que tout le personnel du
consulat d’Algérie à Nice. Je remercie spécialement M. Toufik Akkdache, et M.
Hamdani pour leur soutien.
A ma tendre mère et à mon cher père pour leurs sacrifices en témoignage de toute
mon affection
Résumé xiii
Introduction Générale 3
I Préliminaires 7
1 Définitions et préliminaires 9
1.1 Quelques notions de la géométrie algorithmique . . . . . . . . . . . . . . . . 9
1.1.1 Les graphes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1.2 Les triangulations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1.3 Arbre couvrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2 La triangulation de Delaunay . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.1 Calcul de la triangulation de Delaunay . . . . . . . . . . . . . . . . . 12
1.2.2 Algorithme de construction par insertion et bascules d’arêtes . . . . 12
1.3 Les structures de données pour les triangulations . . . . . . . . . . . . . . . 14
1.3.1 Séparation entre la topologie et la géométrie . . . . . . . . . . . . . 14
1.3.2 Calcul et mise à jour de la triangulation . . . . . . . . . . . . . . . . 14
2 État de l’art 15
2.1 Les structures de données à base d’arêtes . . . . . . . . . . . . . . . . . . . 15
2.1.1 La structure de l’arête ailée . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.2 La structure DCEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
i
2.1.3 La structure Quad-Edge . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.4 La structure demi-arête . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.5 Les n-GMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.6 La structure de l’Arête orientée . . . . . . . . . . . . . . . . . . . . . 21
2.2 Les structures à base de triangles . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3 Les structures à base de sommets . . . . . . . . . . . . . . . . . . . . . . . . 23
2.3.1 Star-Vertices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.4 Les triangulations en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4.1 Une structure de données à base de demi-arêtes . . . . . . . . . . . . 24
2.4.2 Les triangulations dans CGAL . . . . . . . . . . . . . . . . . . . . . 26
2.4.3 TTL (Template Triangulations Library) . . . . . . . . . . . . . . . . 26
2.5 La compression des structures triangulaires . . . . . . . . . . . . . . . . . . 26
2.5.1 Séparation entre la topologie et la géométrie . . . . . . . . . . . . . 27
2.5.2 Codage de la topologie . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.5.3 Codage de la géométrie . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.6 Les traitements en mémoire auxiliaire . . . . . . . . . . . . . . . . . . . . . 34
2.6.1 La soupe de triangles . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.6.2 Les structures hiérarchiques . . . . . . . . . . . . . . . . . . . . . . . 34
2.6.3 Les formats Streaming . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.7 Les structures de données compactes . . . . . . . . . . . . . . . . . . . . . . 35
2.7.1 La structure de Blandford et al. . . . . . . . . . . . . . . . . . . . . . 35
2.7.2 La structure de Castelli Aleardi et al. . . . . . . . . . . . . . . . . . 37
2.8 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
ii
3.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5 Codage en sous-triangulations 83
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.2 La conception de la triangulation en plusieurs niveaux . . . . . . . . . . . . 84
5.2.1 La structure de donnée . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.2.2 Les sous-triangulations . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.2.3 La connectivité inter-sous-triangulations . . . . . . . . . . . . . . . . 85
5.2.4 Le tableau des références globales . . . . . . . . . . . . . . . . . . . . 86
5.2.5 Le coût de la structure . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.3 La construction et la mise à jour de la triangulation . . . . . . . . . . . . . 88
5.3.1 Insertion d’un nouveau point . . . . . . . . . . . . . . . . . . . . . . 89
5.3.2 La bascule d’arête . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.4 Stratégies de décomposition . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.4.1 Une décomposition progressive . . . . . . . . . . . . . . . . . . . . . 91
5.4.2 Un parcours par balayage . . . . . . . . . . . . . . . . . . . . . . . . 94
5.4.3 L’ajustement du bord d’une sous-triangulation . . . . . . . . . . . . 94
5.5 Quelques remarques sur la conception . . . . . . . . . . . . . . . . . . . . . 94
5.6 Mise en œuvre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.6.1 L’interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5.6.2 Le niveau de la structure de données . . . . . . . . . . . . . . . . . . 95
5.6.3 Le niveau de stockage . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.7 Résultats et implémentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
5.7.1 Expérimentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
iii
5.8 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Bibliographie 109
Index 123
iv
Table des figures
v
4.3 Représentation interne des micro-triangulations . . . . . . . . . . . . . . . . 63
4.4 Les conflits dans le catalogue à quadrangles . . . . . . . . . . . . . . . . . . 64
4.5 L’auto-voisinage dans les catalogues. . . . . . . . . . . . . . . . . . . . . . . 67
4.6 Stabilité du catalogue à au moins deux triangles par micro-triangulation
pour l’insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.7 Stabilité du catalogue à au moins deux triangles par micro-triangulation
pour la suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.8 Stabilité du catalogue à au moins deux triangles par micro-triangulation
pour la bascule d’arêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.9 Groupement de quadrangles en pentagones . . . . . . . . . . . . . . . . . . 70
4.10 Représentation d’une triangulation par trois catalogues . . . . . . . . . . . . 72
4.11 Tableau multi-étages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.12 Structure de données à base de catalogues. . . . . . . . . . . . . . . . . . . . 76
4.13 Minimisation du nombre de micro-triangulations. . . . . . . . . . . . . . . . 77
4.14 Représentation graphique des gains apportés par les catalogues. . . . . . . . 80
vi
Les pseudocodes
vii
viii
Liste des tableaux
4.1 Le coût d’une représentation par catalogues sur une machine 32 bits . . . . 78
4.2 Le coût d’une représentation par catalogues sur une machine 64 bits . . . . 79
ix
x
Résumé
xi
Résumé
La modélisation des objets géométriques est incontournable dans de nombreuses dis-
ciplines et applications. L’évolution des moyens d’acquisition et de stockage a produit
une hausse énorme des volumes utilisés pour stocker ces objets. La réduction des tailles
de ces volumes fait l’objet de plusieurs domaines de recherches ; comme la compression,
qui vise à compresser le volume au maximum, et l’élaboration de structures théoriques
compactes qui minimisent la taille nécessaire à la représentation. Le but de cette thèse
est de concevoir, et d’évaluer des solutions pratiques et exploitables pour représenter de
façon compacte les triangulations. Pour ce faire, deux issues sont explorées : modifier la
représentation interne en mémoire des objets géométriques, et redéfinir les types abstraits
des objets géométriques correspondants. Une première solution consiste à utiliser des in-
dices sur une taille arbitraire de bits, au lieu des références absolues. Les gains dépendent
de la taille de la triangulation, et aussi de la taille du mot mémoire de la machine. Le
handicap majeur est le coût élevé de la méthode en termes de temps d’exécution. Une
deuxième piste consiste à utiliser des catalogues stables. L’idée consiste à regrouper les
triangles dans des micro-triangulations, et de représenter la triangulation comme un en-
semble de ces micro-triangulations. Le nombre des références multiples vers les sommets,
et des références réciproques entre voisins est alors nettement réduit. Les résultats sont
prometteurs, sachant que le temps d’exécution n’est pas dramatiquement altéré par la mo-
dification des méthodes d’accès aux triangles. Une troisième solution consiste à décomposer
la triangulation en plusieurs sous-triangulations permettant ainsi de coder les références
dans une sous-triangulation sur un nombre réduit de bits par rapport aux références ab-
solues. Les résultats de cette techniques sont encourageants, et peuvent être amplifiés
par d’autres techniques comme le codage relatif des références, ou le partage de l’infor-
mation géométrique des sommets sur les bords entre les différentes sous-triangulations.
L’élaboration de structures compactes nécessite encore plus d’intérêts, et plusieurs pistes
sont à explorer pour pouvoir arriver à des solutions plus économiques en termes d’espace
mémoire.
Mots-clés
Triangulations, représentations compactes, structures de données géométriques, in-
dices, catalogues, sous-triangulations.
xiii
xiv
Abstract
Modeling geometric objects is inescapable in various domains and applications. The
development of acquisition and storage tools has produced a huge increase of the volumes
used to store these objects. Many disciplines aim to reduce the size of these volumes ; such
as compression, which tries to compress the volume, and the elaboration of theoretical
compact data structures that minimize the space required for the representation. The
goal of this thesis is to design, and evaluate practical and workable solutions for compact
representations of triangulations. To do this, two issues has to be explored : modify the
internal memory representation of the geometric objects, and redefine the abstract types
associated to the geometric objects. The first solution proposed uses indices of an arbitrary
length, instead of absolute references. The gain depends on the size of the triangulation,
and the length of the memory word too. The main disadvantage of this solution is the high
cost in terms of running time. The second solution uses stable catalogs. The structure
gathers triangles into packages, and represents the triangulation as a decomposition of
such packages. The number of multiple references to the vertices, and the number of
reciprocal references between neighbors are clearly reduced. The results are interesting,
and the running time is not dramatically affected by the added indirection levels. The
third solution decomposes the triangulation into many sub-triangulations. The references
in a sub-triangulation are coded using a reduced number of bits in comparison with the
absolute references. The results of this technique are promising, and could be improved
using other methods such as the relative coding of references, and sharing common vertex
data between different sub-triangulations. The elaboration of compact data structures
needs more attention, and several issues have to be explored in order to improve the
solutions proposed.
Key-words
Triangulations, compact representations, geometric data structures, indices, catalogues,
sub-triangulations.
xv
xvi
Introduction Générale
1
Introduction Générale
Les structures géométriques telles que les triangulations ont une grande importance
dans une vaste gamme d’applications. On peut citer entre autres les modèles de calcul
par éléments finis, la conception bidimensionnelle et tridimensionnelle des maquettes et
des prototypes, et les simulations dans de nombreuses disciplines comme la physique et la
médecine.
Les études théoriques de la géométrie algorithmique lors des dernières décennies ont
permis un progrès énorme en termes de conception d’algorithmes, et de rétablissement de
bornes théoriques très intéressantes, voir optimales. Cependant, la pratique en matières de
conception et d’implantation de structures de données pratiques et efficaces n’a pas suivi
ce progrès en rigueur.
En effet, avec l’évolution des technologies d’acquisition, et la multiplication continue
des capacités de stockage, la nécessité d’avoir des structures de données capables de gérer
les données immenses existantes devient primordiale pour certaines applications. La fi-
nalité recherchée dans ce contexte est bien évidemment la conception de structures non
gourmandes en termes d’espace mémoire.
Jusqu’à présent, la plupart des applications et des travaux se sont axés sur deux types
de solutions :
3
INTRODUCTION GÉNÉRALE
Le contexte de la thèse
Dans le cadre de l’ACI1 Masse de Données lancée par l’ANR 2 , plusieurs équipes de
recherche se sont regroupées dans le projet GéoComp sous le thème de la compression de
données de nature géométrique. L’objet du projet est de développer de nouveaux outils de
représentation implicite compacte adaptative qui soient efficaces vis-à-vis des requêtes de
base pour la géométrie. Cette thèse est financée en partie par ce projet, et contribue à ses
objectifs.
La bibliothèque CGAL
Contributions
Le but de cette thèse est de suivre une autre piste qui n’est pas assez traitée dans la
littérature. Les structures de données en pratique sont souvent conçues pour avoir une
souplesse et une efficacité en termes d’utilisation. Toutefois, l’aspect espace (la quantité de
1
Action Concertée Incitative.
2
Agence Nationale de la Recherche.
4
INTRODUCTION GÉNÉRALE
mémoire allouée par le programme) n’est pas bien considéré. L’élaboration de structures
de données pratiques, permettant la manipulation de gros jeux de données, et évitant ainsi
le plus longtemps possible le transfert entre les mémoires externes et la mémoire vive est
un enjeu qui mérite d’être entrepris.
Des travaux théoriques ont déjà été faits, et des résultats intéressants ont été présentés,
mais n’ont pas encore été mis à l’épreuve de la pratique. Dans ce qui suit, ces solutions, et
d’autres, seront étudiées, en termes de rendement mémoire, mais aussi sur le plan efficacité,
et influence sur la complexité de la mise en œvre et le temps de calcul.
La seconde étape consiste à chercher des petites structures redondantes dans la trian-
gulation, et de représenter la triangulation comme une décomposition en ces objets qui
sont les catalogues. Ceci est une extension, et un passage en pratique des résultats déjà
étudiés en théorie, concernant la représentation hiérarchique des triangulations avec l’utili-
sation des catalogues. Le but de cette indirection est de minimiser le nombre de références
multiples des triangles vers les sommets, et le nombre de références réciproques entre les
triangles.
Une dernière étape consiste au passage à des références de petites tailles pour mini-
miser le coût global. Ce but est atteint en subdivisant la triangulation en petites sous-
triangulations, permettant ainsi d’utiliser des références locales sur une taille réduite de
bits. La structure est alors découpée en plusieurs structures de tailles moyennes, pour avoir
des pointeurs locaux plus petits.
L’utilisation des pointeurs sur une taille optimale de bits est exploitable en dimension
2 et 3, et le passage de la dimension 3 à la dimension 2 est direct. L’extension des autres
structures proposées dans cette thèse vers les dimensions supérieures n’étant pas triviale est
laissée à des travaux futurs, et n’est pas couverte par cette thèse. Cependant, la subdivision
des structures globales pour avoir des structures redondantes, ou pour avoir des références
plus petites en dimension 3 est une piste qui mérite d’être exploitée.
3
voir les notes aux lecteurs en fin de l’introduction
5
INTRODUCTION GÉNÉRALE
Organisation de la thèse
La thèse est organisée en deux parties. La première partie comprend deux chapitres.
Un chapitre de préliminaires, couvrant les définitions de base des notions utilisées dans le
reste de la thèse, ainsi que les algorithmes, et les notions fondamentales de structures de
données. Un deuxième chapitre est consacré à l’état de l’art. Ce chapitre couvre différents
thèmes voisins, les structures de données pour la représentation des triangulations, la com-
pression des maillages et de triangulations, et les structures de données compactes, ainsi
qu’une brève description des algorithmes de traitement en mémoire auxiliaire.
Pour simplifier la notation, cette taille est dénotée par log (n) bits dans la suite de
cette thèse.
6
Première partie
Préliminaires
7
Chapitre 1
Définitions et préliminaires
Un graphe G est défini par une paire d’ensembles (A, S), tels que les éléments de A
sont des paires (s0 , s1 ), où s0 et s1 sont des éléments de S. Les éléments de S sont appelés
sommets, noeuds, ou sites ; et les éléments de A sont appelés arêtes[Bond 76, Dies 00].
Un graphe planaire est un graphe qui admet un plongement dans le plan : ce qui re-
vient à dire que le graphe peut être dessiné dans le plan sans que ses arêtes ne s’intersectent
sauf aux extrémités[Bond 76].
Un graphe connecté est un graphe G, où pour toute paire de ses sommets (v, w), il
existe au moins un chemin reliant les deux sites v et w[Dies 00].
La formule d’Euler-Poincaré s’applique a tout graphe connecté planaire G, à s
sommets, a arêtes, et f faces[Bond 76, Dies 00], et est la suivante :
s−a+f =2 (1.1)
Une carte est une extension de la notion de graphe, incluant la notion de face. Une
carte résulte alors du plongement d’un graphe dans une surface.
Une triangulation est une subdivision planaire où toutes les faces sont des triangles[Prep 85].
Une triangulation d’un ensemble fini P de points est un graphe planaire dont les sommets
sont les points de P, avec un nombre maximal d’arêtes[Berg 00]. Ce qui revient à relier
tous les point de P entre eux avec des arêtes sans aucune intersection[Prep 85, Chen 96].
9
CHAPITRE 1. DÉFINITIONS ET PRÉLIMINAIRES
Simplexes et Complexes
La triangulation est donc définie par un ensemble de points, appelés aussi des 0-simplexes,
où simplexes d’ordre 0. Pour pouvoir exploiter efficacement la triangulation, les struc-
tures de données associées utilisent les simplexes d’ordre supérieurs, qui sont les simplexes
d’ordre 1, ou les arêtes, les simplexes d’ordre 2, ou les triangles (appelés aussi faces en di-
mension 2 et facettes en dimension 3), et les simplexes d’ordre 3 pour les tétraèdrisations,
ou les tétraèdres (appelés aussi cellules)[Bois 95].
Une triangulation en dimension 2 est alors un ensemble de simplexes de dimension
0, 1, et 2 ; et est alors appelée complexe simplicial d’ordre 2 . Une triangulation en
dimension 3 (ou une tétraèdrisation) est aussi appelée complexe simplicial d’ordre 3 .
En général, un complexe C est un ensemble de simplexes vérifiant :
– tout sous-simplexe d’un simplexe de C est un simplexe de C ;
– deux simplexes de C ne s’intersectent pas, ou s’intersectent selon un simplexe de
dimension inférieure.
Un complexe pur est un complexe C où tout simplexe de C est un sous-simplexe d’un
simplexe de dimension maximale (voir figure 1.1).
Un simplexe singulier est un simplexe s d’un complexe C de dimension 2 (respec-
tivement de dimension 3) ayant un voisinage (les simplexes incidents à ce simplexe) qui
n’est pas homéomorphe à un disque (respectivement une sphère).
A0 A1
b g a
a c
c f d e
f
e
B0
d B1 b
Fig. 1.1: Deux exemples de complexes non purs (A0) en dimension 3 (A1) en dimension
2 : Deux exemples de simplexes singuliers (B0) le sommet a est singulier (B1) l’arête (ab)
est singulière[Bois 95].
Les maillages sont définis comme des plongements de graphes pour décrire des sur-
faces (maillages surfaciques) ou des volumes (maillages volumiques). Ceci revient à associer
10
1.1. QUELQUES NOTIONS DE LA GÉOMÉTRIE ALGORITHMIQUE
Un graphe connecté, acyclique (sans cycles), et non orient est appelé arbre. Un en-
semble d’arbres est appelé forêt. On appelle arbre de parcours ou arbre couvrant d’un
graphe connecté G, un sous-graphe de G qui est un arbre, et contenant tous les sommets
de G [Deo 04, Corm 01].
Il existe plusieurs stratégies pour parcourir un arbre : visiter tous les nœuds de cet
arbre.
Parcours en profondeur d’abord A partir d’une racine r, le sous arbre défini par
chacun des sommets voisins à r est visité en entier, avant de passer au voisin suivant. Le
parcours descend dans l’arbre jusqu’à ce qu’il rencontre une feuille, et il remonte ensuite,
en parcourant à chaque fois les branches non encore explorés (voir figure 1.2 B).
A B
1 1
2 3 4 2 7 8
5 6 7 8 3 6 9 12
9 10 11 12 4 5 10 11
Fig. 1.2: Parcours d’un arbre en deux modes (A) en largeur d’abord (B) en profondeur
d’abord
11
CHAPITRE 1. DÉFINITIONS ET PRÉLIMINAIRES
Une triangulation de Delaunay d’un ensemble de points S, est une triangulation qui
vérifie la propriété du cercle vide pour tous ses triangles : le cercle circonscrit à tout
triangle ne contient aucun point de S en son intérieur strict. Cette triangulation est le
graphe dual d’un diagramme de Voronoı̈, dont les centres sont les points de S. La trian-
gulation de Delaunay et le diagramme de Voronoı̈ ont été largement étudiés en géométrie
algorithmique [Bois 95, Berg 00, Chen 96, Prep 85].
Pour insérer un nouveau point p dans une triangulation de Delaunay T , cet algorithme
procède comme suit :
Localiser le point p
Insérer le point p
12
1.2. LA TRIANGULATION DE DELAUNAY
– Sur l’arête a, en reliant le nouveau point aux deux sommets opposés. Cette insertion
est réalisée en pratique en deux étapes : insérer le point dans l’un des deux triangles
incidents à l’arête, effectuer ensuite une bascule d’arête pour rétablir le bon cas de
figure.
– Si le point se situe en dehors de l’enveloppe convexe, le relier aux points visibles de
l’enveloppe convexe pour construire de nouveaux triangles.
b b
a x a x
c c
i
d d d
b b b
x x x
a a a
c c c
ii
iii
Fig. 1.3: (i) L’insertion combinatoire d’un point dans un triangle se fait en le reliant à tous
les sommets de ce triangle. (ii) L’insertion d’un point sur une arête se fait en combinant
deux opérations : (a) L’insertion de ce point dans l’un des triangles adjacents à l’arête (b)
La bascule de l’arête en question pour obtenir la bonne configuration. (iii) Si le point (en
rouge) est en dehors de l’enveloppe convexe, les sommets visibles sont retrouvés (en vert),
et reliés au nouveau point par des nouvelles arêtes (en rouge).
13
CHAPITRE 1. DÉFINITIONS ET PRÉLIMINAIRES
La topologie d’une triangulation est décrite par le graphe associé aux sommets et aux
arêtes de la triangulation[Hjel 06]. C’est donc l’ensemble des relations d’incidence entre
les simplexes de la triangulation, qui sont les sommets, les arêtes, et les faces. Tandis que
la géométrie de la triangulation représente le plongement de ce graphe en associant des
coordonnées géométriques aux sommets de la triangulation.
La modélisation de la topologie de la triangulation repose souvent sur les méthodes
développées en théorie des graphes, et c’est l’objet du chapitre suivant. La représentation
de la géométrie est restreinte à la représentation des coordonnées des points, ce qui relève
de la précision numérique, et de la représentation des nombres[Pion 99].
Le calcul d’une triangulation d’un ensemble de points, et sa mise à jour peuvent être
réalisés en utilisant trois opérations élémentaires :
– Insertion d’un nouveau point dans la triangulation.
– Suppression d’un sommet de degré trois de la triangulation.
– Bascule d’une arête de la triangulation.
Les structures de données proposées dans le reste de cette thèse supportent ces trois
opérations élémentaires.
14
Chapitre 2
État de l’art
Cette partie est consacrée aux modes de représentations qui ont été proposées pour les
modèles polygonaux en général, et pas seulement les triangulations, et dont l’objet de base
est l’arête, ou la demi-arête. Ces structures se sont développées autour de la modélisation
15
CHAPITRE 2. ÉTAT DE L’ART
des solides et des surfaces[Mant 87]. Dans ce type de structures, l’information topologique
est contenue principalement dans les arêtes de l’objet.
La première structure à base d’arêtes a été proposée par Baumgart[Baum 72, Baum 75],
qui proposa une structure qu’il nomma arête ailée (voir figure 2.1).
I
d b
X a Y
c
e II
Fig. 2.1: La structure de l’arête ailée : L’objet de base est l’arête. Pour représenter l’arête
a, ces informations sont utiles :(i) Les sommets de cette arête X et Y (ii) Les deux faces
incidentes I et II (iii) Les prédécesseurs et les successeurs pour cette arête dans les deux
faces : b, c, d, et e.
16
2.1. LES STRUCTURES DE DONNÉES À BASE D’ARÊTES
p1
F1
V1 A V2
F2
p2
Fig. 2.2: La structure DCEL : L’objet de base est l’arête. Pour représenter l’arête a,
ces informations sont utiles :(i) Les sommets de cette arête v1 et v2 (ii) Les deux faces
incidentes F 1 et F 2 (iii) Les prédécesseurs et les successeurs pour cette arête autour des
deux sommets dans le sens direct : p1, p2.
Guibas et al.[Guib 83] proposent une structure complètement à base d’arêtes, pour
modéliser à la fois une subdivision de l’espace, et sa duale (notamment la triangulation de
Delaunay et le diagramme de Voronoı̈).
17
CHAPITRE 2. ÉTAT DE L’ART
L’idée de base est de représenter chaque arête e de la structure par quatre quad-edges
e[i] (i=0..3) ; les deux quad-edges e[0] et e[1] sont les deux versions orientées de e, et les
deux quad-edges e[2] et e[3] sont les deux versions orientées de l’arête duale de e. Pour
chaque quad-edge e[i], un champ suivant est ajouté permettant de tourner autour du
même sommet dans le sens direct choisi. Des primitives sont introduites pour permettre la
navigation dans la structure, telles que la rotation d’une arête pour passer de l’arête à sa
duale, la symétrique pour passer de l’arête à son opposée, et deux primitives pour accéder
à l’arête suivante et précédente dans le sens direct choisi (voir figure2.3).
Si on considère une implémentation minimale des arêtes, incluant trois informations
pour l’arête, soit le sommet de départ, le sommet d’arrivée, et une face incidente. Le coût
global pour une triangulation de n sommets et 2n triangles est égal à 3n ∗ 4 ∗ 3 = 36n
références.
Le grand avantage de cette technique est bien évidemment la possibilité de manipuler
la subdivision primaire, et duale en utilisant la même structure.
e[2] v1
e[3] e[1] f3
e[0] e1
A v2 e2 v3
e7
v1 v6 f1 e8 f2 e3
e1
v2 e2 v3 e6 v5
e7 e4 v4
v6 f1 e8 f2 e3 f3
e6 f4
v5 e4 v4
f4 e5
e5
B C
Kevin Weiler[Weil 85] propose une série de structures de données à base d’arêtes jugées
adéquates pour la modélisation des objets en CAD (Computer Aided Design) et en CAM
18
2.1. LES STRUCTURES DE DONNÉES À BASE D’ARÊTES
La première solution qu’il propose est une modification de la structure arête ailée,
à laquelle il ajoute une information side à chaque référence d’arête pointée par l’arête
courante (les références des quatre arêtes prédécesseurs et successeurs à l’arête courante).
Cette information side indique de quel côté l’arête référencée est franchie (side doit tou-
jours indiquer le côté de la face incidente à toutes les arêtes, voir figure 2.4). Ce surcoût
en mémoire est justifié par la réduction de la complexité algorithmique pendant l’accès et
le parcours des éléments.
La seconde structure est la structure sommet-arête. C’est une structure dont l’objet
de base est la demi-arête. L’arête est alors subdivisée en deux demi-arêtes, chacune associée
à une extrémité (qu’on appelle sommet de référence). Cette demi-arête se trouve alors
adjacente à d’autres demi-arêtes autour d’un sommet. La représentation associe à chaque
demi-arête les références suivantes :
– La demi-arête suivante en tournant autour du sommet de référence.
– Le sommet opposé au sommet de référence.
– Une face incidente.
– La demi-arête associée à l’autre sommet.
– Une autre information optionnelle qui est la demi-arête précédente.
Les notions de suivante et précédente sont liées au choix d’orientation autour du sommet
de référence. Le coût global est égal à 3 ∗ 5 = 15n références pour une triangulation de la
sphère ayant n sommets.
La troisième structure est la structure face-arête. C’est aussi une structure dont l’ob-
jet de base est la demi-arête. L’arête est subdivisée en deux demi-arêtes, chacune associée
à l’une des deux faces incidentes (qu’on appelle faces de références). Les informations
associées à chaque demi-arête sont les suivantes :
– La demi-arête suivante dans la face de référence.
– Une référence vers un sommet incident.
– La face opposée à la face de référence.
– La demi-arête associée à l’autre face.
19
CHAPITRE 2. ÉTAT DE L’ART
A darête_préc_2
sommet_1 sommet_2 darête_suiv_1
darête_suiv_1 darête_suiv_2
darête_préc_1 darête_préc_2 sommet_2
face_1 face_2 face_2
face_1
B
sommet_1 sommet_2 sommet_1
darête_suiv_1 côté_suiv_1 darête_suiv_2 côté_suiv_2
darête_préc_2 côté_préc_1 darête_préc_2 côté_préc_2 darête_préc_1
face_1 face_2 darête_suiv_2
C D
sommet sommet darête_préc
darête_suiv darête_préc
darête_suiv darête_suiv
darête_préc darête_préc face
face
face face
darête_opp sommet darête_opp sommet darête_suiv
Fig. 2.4: La modélisation de l’arête dans les structures de données à base d’arêtes proposées
par Kevin Weiler[Weil 85] : (A) La structure de l’arête ailée de Baugmart[Baum 75] (B)
La version modifiée de l’arête ailée en ajoutant un entier à la référence de l’arête indiquant
de quel côté de l’arête on est arrivé (C) La structure à base de demi-arêtes Sommet-Arête
où la demi-arête est identifiée par son sommet de référence (D) La structure à base de
demi-arêtes Face-Arête où la demi-arête est identifiée par sa face de référence.
Dans le cas des triangulations, les deux structures face-arête et sommet-arête se res-
semblent, et induisent le même coût en mémoire. Néanmoins, le coût d’accès aux sommets
et aux faces diffèrent. La structure face-arête modélise la face par un simple cycle de trois
demi-arêtes, alors que la structure sommet-arête la modélise par un cycle de six demi-
arêtes. Le parcours des arêtes incidentes à un sommet est par contre deux fois plus rapide
dans la représentation sommet-arête que dans la représentation face-arête
20
2.1. LES STRUCTURES DE DONNÉES À BASE D’ARÊTES
A B
ej α0(d)
tk
α2(d)
d
d=(tk, ej, vi) α1(d)
vi
Fig. 2.5: La structure G-maps en dimension 2, les brins représentent l’objet de base dans
cette représentation : (a) le brin d est un triplet (vi , ej , tk ) (b) les applications des fonctions
α0 , α1 , et α2 permettent le parcours de la structure.
Campagna et al.[Camp 98] proposent une représentation similaire à celle utilisant les
demi-arêtes de Weiler[Weil 85] dans laquelle l’objet de base est appelé arête orientée. Pour
chaque arête orientée, on garde les informations suivantes :
21
CHAPITRE 2. ÉTAT DE L’ART
22
2.3. LES STRUCTURES À BASE DE SOMMETS
La capacité de représentation
2.3.1 Star-Vertices
Star-vertices[Kall 01b] est une structures de données dont l’objet de base est le sommet,
et qui est conçue pour représenter des maillages planaires arbitraires.
Cette structure est décrite dans la figure 2.6. L’objet de base est le sommet, et à chaque
sommet v sont associés ces attributs :
– Les coordonnées du point en question.
– Les références de tous les sommets voisins à v.
– Plus un indice pour chaque voisin v 0 indiquant lequel des voisins de v 0 , en l’occurrence
v”, forme une face avec v et v 0 .
La dernière information permet de parcourir les sommets et les arêtes d’une face de
manière directe. Mais dans la structure de base, elle peut être omise sans perturber l’accès
à l’information.
Les auteurs présentent en plus une généralisation du concept d’itérateur, qu’ils ap-
pellent travel, qui permet d’itérer sur les élément du maillage (en l’occurrence les sommets)
pour faciliter à l’utilisateur le parcours du maillage, et de considérer une représentation
implicite des faces.
Sachant que la moyenne des degrés des sommets dans une triangulation est estimée à
6, le coût global de cette structure pour la triangulation d’une sphère à n point est de 7n
références.
Cette technique souffre d’un inconvénient majeur, qui est l’absence de l’objet de base :
23
CHAPITRE 2. ÉTAT DE L’ART
V2
V1n
V0 V2n F
V0n
V1
le triangle. Ce point ne se posait pas pour les auteurs de la méthode, car leurs subdivi-
sions n’étaient pas que triangulaires[Kall 01a]. Un autre désavantage est le temps d’accès
proportionnel au degré du sommet impliqué dans une opération. Ce coût peut être cher
lorsque les degrés des sommets ne sont pas contrôlés.
Cette section est consacrée aux solutions pratiques qui ont été mise en œuvre pour
représenter les triangulations.
24
2.4. LES TRIANGULATIONS EN PRATIQUE
Polyhedron
provides ease−of−use
Halfedge
protects combinatorial integrity
Vertex
Facet
defines circulators
defines extended vertex, halfedge, facet
Halfedge_data_structure
manages storage (container class)
defines handles and iterators
Items
stores actual information Vertex Halfedge Facet
contains user added data and functions
Une caractéristique commune avec tous les composants de CGAL[CGAL 07], est la
séparation entre la géométrie (les coordonnées des points et les informations associées), et
la topologie.
– Le niveau objet ; où sont définis les concepts correspondant aux objets réellement
gardés en mémoire, avec toutes les définitions des méthodes d’accès et de mise à
jour.
– Le niveau structure de données ; où la structure globale de stockage est définie, avec
les méthodes d’insertion, de modification, et de suppression d’éléments. C’est cette
partie qui se charge de l’allocation et de la restitution de la mémoire.
– Le niveau Polyèdre ; qui est le niveau utilisateur. C’est dans ce niveau là que sont
définies les méthodes accessibles par l’utilisateur afin de conserver l’intégrité de la
structure. Les circulateurs qui permettent de visiter tous les voisins d’un sommet,
ou autour d’une face sont définis à ce niveau là.
25
CHAPITRE 2. ÉTAT DE L’ART
Dans le même contexte, l’implantation des triangulations dans la bibliothèque CGAL[Bois 02]
est à base de triangles (voir section 2.2), et repose sur la séparation entre la géométrie et
la topologie, et la programmation générique[CGAL 07, Fabr 00].
Plus de détails sur les triangulations de CGAL seront présentés dans le chapitre 3.
Øyvind Hjelle propose une conception logicielle générique pour les triangulations[Hjel 00]
basée sur la représentation GMaps[Lien 89]. Ce travail est l’extension d’une autre concep-
tion dédiée à la modélisation géologique[Halb 99].
La conception utilise les templates[Vand 02] de C++ pour définir une interface générique
implantant les algorithmes et les méthodes de parcours et de modification, ainsi que les
opérateurs αi . Cette implantation prend comme paramètre template le brin (voir sec-
tion 2.1.5), dont la définition, ainsi que les itérateurs sur les éléments de la triangulation
(les sommets, les arêtes, et les triangles) sont laissés à l’utilisateur pour satisfaire les besoins
et les spécificités de l’application.
Application
Triangulation
Template Library (TTL)
(Generic algorithms based on G-maps)
26
2.5. LA COMPRESSION DES STRUCTURES TRIANGULAIRES
la structure explicite.
Pour une étude détaillée et complète des techniques de compression de maillages et
de triangulations, une vaste gamme de publications existe[Alli 05, Gand 01, Gumh 00,
Gots 01, Isen, Lewi, Peng 05, Ross 03a, Ross 04].
Nous allons présenter dans cette section les différentes stratégies utilisées pour com-
presser les triangulations, en décrivant brièvement les algorithmes les plus connus dans
chacune d’elle.
Comme pour les structures de données explicites, la compression des structures géométriques
sépare les deux aspects de la triangulation : la topologie, et la géométrie.
La plupart des algorithmes de compression sont définis suivant un schéma comprimant
la topologie d’abord, vu que la topologie occupe la plus grande partie de la structure.
Cependant, après les progrès réalisés sur cette partie, la partie dominante après codage
est souvent la géométrie. C’est pourquoi une attention plus grande a été portée sur la
compression de la géométrie des maillages dans des travaux récents[Peng 05, Alex 01].
La compression des maillages surfaciques[Cast 06a, Isen 05c] (notamment des triangu-
lations planaires) trouve ses racines dans le codage des graphes[Tutt 62, Tura 84, Keel 95].
Le principe est quasiment le même dans toutes les approches, et consiste à définir un ordre
d’énumération sur les sommets (ou/et) les faces de la subdivision (triangulation ou autre)
suivant un schéma de parcours ; le maillage est ainsi parcouru et un code unique est généré
permettant au décodeur de reconstruire intégralement la topologie initiale.
Théoriquement, la borne inférieure pour la représentation d’une triangulation planaire
est 3, 24 bps (bits par sommet)[Tutt 62]. Turan a fourni le premier algorithme permet-
tant un codage en nombre constant de bits pour les graphes planaires[Tura 84] avec 4
bits par arête, ou 12 bits par sommet pour les triangulations, qui peut être optimisé à
6 bits par sommet[Isen 05c]. Keeler et Westbrook[Keel 95] proposent un algorithme pour
réaliser un codage de 3,58 bits par arête pour les graphes planaires, et 4, 6 bits par sommet
pour les triangulations.
Compression de maillages
Le passage du codage des graphes planaires à la compression des maillages a été inau-
guré par Taubin et Rossignac[Taub 98]. Le format comprimé du maillage est défini par
deux arbres couvrants, l’un pour les sommets, l’autre pour les faces, codé en longueurs
27
CHAPITRE 2. ÉTAT DE L’ART
de chemins. Les taux pratiques présentés sont autour de 4 bits par sommet. Les travaux
suivant dans la compression des maillages peuvent être classés comme ceci :
16 15 16 15 16 15
12 11 10 11 10 11 10
13 4 12 4 13 12 4
13
3 3 3
5 102 0 5 1 02
6 9 65 1 2 9 6 9
14 7 8 14 7 8 14 7 8
a b c
16 15 16 15 16 15
12 11 10 12 11 10 12 10
11
4 13 4 13 4
13 3 3 3
5 10 5 10 5 10
6 2 9 6 2 9 6 2 9
14 7 8 14 7 8 14 7 8
d e f
Fig. 2.9: Le parcours des faces d’un maillage en profondeur d’abord pour le codage de la
traingulation[Gumh 98].
28
2.5. LA COMPRESSION DES STRUCTURES TRIANGULAIRES
a b
Fig. 2.10: Les splits dans le codage des triangulations : auto-intersection du bord de la
région conquise lors du codage d’une triangulation[Gumh 98].
29
CHAPITRE 2. ÉTAT DE L’ART
c.v
c.l c.r
c
c.n c.t c.p
c.o
Fig. 2.11: La structure Corner Table représente chaque corner c par son sommet c.v, son
corner suivant c.n, son corner précédent c.p, son corner gauche c.l, son corner droit c.r, et
son corner opposé c.o[Ross 03b].
faces de genres différents de zéro[Lope 02], une généralisation pour les surfaces arbi-
traires (en genre et en nombre de composantes)[Lewi 04], une spécialisation pour les
maillages réguliers[Szym 01], des optimisations apportées au décodeur[Ross 99b][Isen 05c],
une généralisation pour les maillages tétraèdriques[Szym 00], et non-triangulaires[Kron 01].
Une étude des bornes et des taux réalisés de l’algorithme a été également publiée[King 99].
x C x
P x x
S
P
x L x x
P x E
P
x x R
P
a b
Fig. 2.12: Les règles de parcours du codeur edgebreaker exprimées comme des états : (a)
Le triangle à visiter à une étape du parcours est représenté par x ; son parent dans l’arbre
couvrant est P ; les sommets et les faces conquis sont colorés en rouge ; et le code émis est
exprimé dans le triangle courant après son déplacement vers la zone conquise (b) Lorsque
une auto-intersection apparaı̂t dans le bord de la zone conquise, un triangle est mis dans
la pile, et l’autre détermine le chemin à explorer, quand le chemin est traité en entier, le
premier triangle est tiré de la pile, et le reste des triangles est traité[Ross 99b].
30
2.5. LA COMPRESSION DES STRUCTURES TRIANGULAIRES
31
CHAPITRE 2. ÉTAT DE L’ART
0 0
7 3 1 0
1 3 0 1 2 1
7 3 1 0 0 1 3 001 2 1
32 bits 3 2 2.3 1 1.6 2.3 1 1 1 2 1
log 8 log 4 log 5 log 2 log 3 . . .
Fig. 2.13: Compression progressive sans perte : La première étape consiste à coder les
coordonnées des points sur un nombre arbitraire de bits (32 par exemple). La deuxième
étape subdivise récursivement les cellules en deux, et code le nombre de points contenus
dans l’une des deux cellules sur un nombre de bits optimal. L’algorithme termine lorsqu’il
n’y a plus de cellules subdivisibles. La sortie de l’algorithme est la suite des nombres de
points situés sur les cellules successives.[Gand 02].
Autres approches
Le codage progressif[Hopp 96] ou multi-résolution[EDan 05] vise à compresser le maillage
tout en produisant des niveaux de détails permettant de passer d’une représentation éparse
à des représentations plus détaillés. Ces techniques sont souvent combinées à des techniques
de simplification[Alli 01a, Cohe 99, Khod 00, Paja 00].
Une approche générale pour les maillages à faces arbitraires[Khod 02] consiste à coder
simultanément les degrés des faces et des sommets. Dans[Lee 02], un parcours à base
d’arêtes est associé à un critère géométrique pour la sélection de la bonne arête à franchir
lors du passage de la zone visitée à la zone non-visitée.
Il est à noter que des progrès dans le codage optimal des graphes planaires ont été
réalisés récemment[He 99][Chia 01], basés dans la plupart d’entre eux sur le travail de
Schnyder[Schn 90]. Une décomposition particulière de Schnyder d’une triangulation en
trois arbres couvrants peut donner lieu à un codage optimal des triangulations en temps
linéaire[Poul 03, Poul 06].
32
2.5. LA COMPRESSION DES STRUCTURES TRIANGULAIRES
La quantification
Le but de cette étape est de prédire la position d’un sommet à partir des positions
des sommets déjà visités. Plusieurs schémas ont été introduits dans la littérature, comme
la prédiction delta[Deer 95, Chow 97], où les différences entre les positions des sommets
voisins sont gardées au lieu des positions originales. La prédiction linéaire[Taub 98] consiste
à remplacer la position actuelle par une combinaison linéaire des sommets déjà visités. La
règle du parallélogramme[Toum 98] code l’erreur entre la position actuelle du sommet et
celle estimée au quatrième sommet du parallélogramme construit par les trois sommets
d’un triangle opposé (voir figure2.14). La prédiction d’ordre deux[Baja 99] est réalisée en
deux phase : une prédiction simple, suivie d’une prédiction sur les prédictions.
33
CHAPITRE 2. ÉTAT DE L’ART
Le codage d’entropie
Les représentations utilisées pour les données géométriques (dont les formats commer-
cialisés comme OBJ de Wavefront Technologies et standards comme VRML[ISOIa]) sont
souvent indexées : les sommets sont énumérés en premier, avec leurs coordonnées, ensuite
les faces sont listées et représentées par les indices de leurs sommets.
Cependant le traitement des maillages gigantesques de l’ordre de milliards de triangles
se trouve limité par ces représentations. En effet, à partir d’une face, l’indirection nécessaire
pour accéder à ses sommets peut être très coûteuse lorsque le volume à indexer est très
large, voire impossible quand ceci dépasse la plage adressable dans la mémoire de la ma-
chine. D’où l’intérêt des méthodes suivantes appelées généralement Out of Core.
Les techniques de traitement de structures géométriques en mémoire auxiliaire[Cran 06,
Silv] sont analogues à celles développées pour minimiser les défauts de pages en mémoire
vive[Arge 04]. Et nécessitent souvent un ré-arrangement des données effectué généralement
en mémoire externe[Vitt 99].
Une solution intuitive consiste à ne pas énumérer les sommets, et à inclure directement
les coordonnées des sommets dans les faces. Cette solution permet de traiter les faces
d’un maillage de manière indépendante, et d’éviter l’étape d’indirection. Mais la mise à
jour des sommets, et le parcours de son voisinage n’est pas aussi facile que dans le for-
mat indexé. Cette technique a été introduite pour plusieurs types d’applications[Lind 00,
Lind 01, Wu 03]. La représentation explicite des parties du maillage présentes en mémoire
de travail est généralement indexée.
34
2.7. LES STRUCTURES DE DONNÉES COMPACTES
External Memory Mesh. Cette structure repose sur une décomposition du cube englobant
la triangulation récursivement jusqu’à ce que la taille désirée des cubes élémentaires (ex-
primée en nombre de sommets par cube, qui sont indexés localement dans le cube) soit
atteinte. Ces cubes élémentaires sont les feuilles de l’arbre, et sont stockées sur le disque
externe, et chargées en mémoire à la demande. Une variante de la représentation par octree
a été adaptée à la multi-résolutions des maillages[Garl 05], dans laquelle les nœuds internes
de l’arbre gardent des représentants épars des sommets du niveau inférieur pour permettre
une construction grossière à ce niveau là. Dans ces structures, l’occupation mémoire per-
manente se restreint à l’arbre de recherche des blocs, tandis que les données réelles sont
chargées en fonction des besoins.
Pour avoir une structure de données adaptée au traitement de maillage, dans le cas où
ceci se fait séquentiellement, Isenburg et al.[Isen 05a] ont proposée une structure ordonnée,
qu’il appelaient Streaming Mesh. Le but est d’avoir un format qui permet de passer le
maillage en flot dans la mémoire de travail pour pouvoir le traiter sans avoir besoin de
charger des parties résidentes dans la mémoire auxiliaire. Pour ce faire, les sommets et
les faces du maillage sont intercalés dans la même structure. Au fur et à mesure que les
faces défilent dans la structure, les sommets sont introduits dans le flots (lorsqu’une face
les référence), ou finalisés lorsqu’ils ne sont plus référencés par aucune face. Ce format
a été utilisé pour la compression des gros maillages[Isen 05b, Isen 03b, Isen 06a], pour la
simplification des maillages[Isen 03c], et aussi pour la construction de la triangulation de
Delaunay[Isen 06b].
Blandford et al.[Blan 03a, Blan 05] ont proposé des structures de données pour les
maillages bidimensionnels et tridimensionnels.
35
CHAPITRE 2. ÉTAT DE L’ART
La structure de données proposée peut être à base de sommets, ou à base d’arêtes[Blan 06] :
La structure stocke une paire (cle, donnee) pour chaque arête, où la clé est une paire
(a, b), et la donnée est la paire (c, d). Cette paire modélise l’arête partagée par les deux faces
voisines abc et bad. Si l’une des deux faces n’existe pas (le cas du bord de la triangulation), le
sommet de cette face manquante est remplacé par une notation spécifique (0 par exemple).
Ce qui revient à coder les liens des arêtes (qui ne sont que deux sommets dans le cas
bidimensionnel).
Une seule arête est gardée entre les deux arêtes (a, b) et (b, a), c’est le sommet ayant
le point le plus petit qui est toujours en premier par exemple (au sens lexicographique de
la comparaison).
Les opérations supportées par cette structure sont :
– rechercher(a, b) : rechercher les faces ayant (a, b) comme arête.
– inserer(a, b, c) : insérer la face (a, b, c) dans le maillage.
– supprimer(a, b, c) : supprimer la face (a, b, c) du maillage.
Le gain en mémoire est obtenu en utilisant les différences d’étiquettes au lieu des
étiquettes réelles, ce qui permet de minimiser le nombre de bits nécessaire à la représentation
des numéros.
Pour chaque arête, on stocke alors la paire ((a, −a), (c−a, d−a)). Ensuite, les différences
b−a, c−a et da sont codés avec un code gamma[Elia 75] avec un bit de signe pour indiquer
les différences négatives. Les entrées du dictionnaire global sont enfin codées en utilisant
un code à longueur variable.
Cette structure est basée sur le stockage du cycle de voisins d’un sommet (appelé
aussi lien) pour chaque sommet. Le cycle est orienté dans le sens du complexe, et les
éléments de ce cycle sont les étiquettes des voisins et non pas les références (ou pointeurs)
réelles.
Le dictionnaire global contient des entrées, chacune associée à un sommet. L’entrée du
sommet a commence par le code gamma[Elia 75] de |a|, le degré de ce sommet.
Les opérations supportées par cette structure sont :
– rechercher(a, b) : rechercher les faces ayant (a, b) comme arête.
– inserer(a, b, c) : insérer la face (a, b, c) au maillage.
– supprimer(a, b, c) : supprimer la face (a, b, c) au maillage.
Comme pour la structure à base d’arêtes, les différences des étiquettes sont utilisées
au lieu des étiquettes elles mêmes, et ce pour gagner en mémoire. Le lien du sommet a :
36
2.7. LES STRUCTURES DE DONNÉES COMPACTES
(a0 , a1 ,.. an ) sera représenté par (a, a1 − a0 ,.. an − a0 ) (voir la figure 2.15).
317
315
319
6 3 5 −2 −8 −5 1 314
309
306 312
Dans ses travaux, Castelli Aleardi[Cast 06a] a travaillé sur les représentations com-
pactes des triangulations et des graphes planaires. Sa structure pour les triangulations
fera l’objet du travail décrit dans le chapitre 4.
La structure est hiérarchique, et utilise deux niveaux. Le premier niveau est une
décomposition de la triangulation en régions de taille Θ((log m)2 ), où m est le nombre
37
CHAPITRE 2. ÉTAT DE L’ART
Fig. 2.16: Une représentation en plusieurs niveaux d’une triangulation (de haut en bas,
de droite à gauche) : la triangulation est subdivisée en plusieurs micro-triangulations.
Ces micro-triangulations sont ensuite regroupées dans des mini-triangulations. Les micro-
triangulations sont représentées par des pointeurs vers un catalogue contenant toutes les
configurations possibles.
38
2.8. CONCLUSION
2.8 Conclusion
Ce chapitre a présenté les grandes lignes des structures de données utilisées pour
la représentation des triangulations. Ces structures sont en majorité issues des besoins
spécifiques liées aux applications. Ces structures couvrent les représentations explicites où
l’accès direct est garanti aux éléments de la structure ; les représentations hiérarchiques,
où la structure est subdivisée en blocs, et l’accès se fait au besoin, et ce sont les structures
adaptées pour les traitements en mémoire externe et l’ajustement en niveaux de détails. Le
codage des triangulation a été aussi présenté, car c’est la solution directe pour gagner en
espace mémoire sans se soucier de l’accessibilité aux données. Le reste de la thèse va être
consacré aux travaux visant à développer des structures de données pour la représentation
des triangulations qui augmentent la capacité de ces structures tout en restant dans les
limites de la taille de la mémoire de travail.
39
CHAPITRE 2. ÉTAT DE L’ART
40
Deuxième partie
41
Chapitre 3
3.1 Introduction
43
CHAPITRE 3. REPRÉSENTATION À BASE D’INDICES DANS CGAL
classes instanciées par deux paramètres template, l’un pour la topologie, et l’autre pour la
géométrie. La définition est de la forme :
template < class GT, class TDS_3 > class Triangulation_3;
Les instanciations de ces deux paramètres (GT et TDS_3) doivent satisfaire un certain
nombre de règles, ces règles sont rassemblées dans des concepts[CGAL 07]. Le concept est
la définition du type abstrait de la classe utilisée pour instancier le paramètre template
correspondant.
Le concept du premier paramètre (GT) définit les types de données des objets géométriques
tels que le point, le vecteur, et le segment, ainsi que les prédicats nécessaires à la construc-
tion de la triangulation tels que le prédicat pour calculer l’orientation de trois points. Le
cadre de cette thèse, et de ce chapitre notamment, ne couvre pas cet aspect géométrique,
c’est donc le deuxième concept qui nous est intéressant. Le travail concerne alors la topo-
logie, qui est décrite en détail dans la section suivante.
Le deuxième concept est appelé Triangulation Data Structure. Dans le reste de ce
chapitre, cette appellation est remplacée par son acronyme TDS 3.
La validité d’une triangulation en dimension 3 dans CGAL est définie par ce qui suit :
– La validité de sa structure de données, qui sera détaillée dans la section suivante.
– L’orientation positive de toutes les cellules de la triangulation.
– Dans le cas dégénéré : chaque deux facettes adjacentes (u, v, w1) et (u, v, w2) ayant
l’arête (u, v) en commun, w1 et w2 sont sur deux côtés opposés de (u, v).
– Si tous les points sont colinéaires, pour chaque deux arêtes (u, v) et (u, w), v et w
sont à deux côtés opposés de v.
44
3.2. LA REPRÉSENTATION DE LA TDS 3 DE CGAL
A B
Fig. 3.1: Les conventions des triangulations de CGAL en dimension 2 (A) et en dimension
3 (B) : Les sommets sont numérotés dans l’ordre direct, et chaque voisin est opposé au
sommet du même indice[CGAL 07]. la fonction ccw(i) retourne le numéro suivant de i
dans le sens direct de l’orientation, et la fonction cw(i) retourne le numéro suivant dans
le sens opposé.
Facettes et arêtes : Les arêtes et les facettes ne sont pas explicitement représentées
dans la triangulation :
– une facette est définie par une cellule et un indice (la facette i de la cellule c, est la
facette de c opposée au sommet d’indice i)
– une arête est définie par une cellule c, et deux indices (l’arête (i, j) de la cellule c est
l’arête dont les extrémités sont les sommets de c d’indice i et j).
45
CHAPITRE 3. REPRÉSENTATION À BASE D’INDICES DANS CGAL
3.2.1 L’implémentation
La TDS 3 est définie en utilisant deux paramètres template, sous cette forme :
template < class VB, class CB > class TDS_3;
Le premier paramètre VB sert pour définir le type des sommets de la triangulation,
et le deuxième CB sert pour définir le type des cellules. Le diagramme dans la figure 3.2
illustre les dépendances entre les types de la TDS 3, et entre la TDS 3 et la géométrie de
la triangulation.
locate(), insert(),..
Types
Triangulation
Geometric
Functionality
Vertex Cell
Data Structure
Triangulation
Combinatorial
Functionality
Optional
UserVB User UserCB
Template Additioons
Parameters
Derivation
Geometric VertexBase CellBase
Traits
46
3.3. REPRÉSENTATION À BASE D’INDICES
Une composante très importante en ce qui nous concerne dans cette classe est le conte-
neur. Les conteneurs de sommets et de cellules maintiennent l’essentiel de la triangulation
puisque on y trouve les objets eux mêmes. Et toutes les opérations d’accès et de mise à
jour portent sur ces éléments. C’est donc cette composante qui définit la manière dont la
mémoire est utilisée. Pour réduire le coût en mémoire, deux directions sont envisagées :
– Modifier le mode de représentation de l’information, en changeant les définitions des
types abstraits de données.
– Modifier les représentations internes de ces objets en mémoire, ainsi que l’implémentation
des méthodes d’accès, et des méthodes d’allocation et de restitution de la mémoire.
Cette partie de travail explore la deuxième piste. Et c’est donc la structure du conteneur
qui sera modifiée pour qu’elle soit adaptée à des nouvelles représentations internes des
données que sont les sommets et les cellules de la triangulation.
L’idée présentée ici consiste à éviter l’utilisation des références absolues de la taille du
mot mémoire de la machine (32 ou 64 bits), en utilisant des numéros ou indices comme
références sur une taille arbitraire de bits. L’idée en elle même est triviale en termes de
codage, mais le passage à la pratique pour des représentations explicites de triangulation
nécessite quelques considérations, en particulier :
– Ces indices vont référencer des emplacements mémoire dans des conteneurs différents,
ce qui implique le besoin de localisation de ces conteneurs, avec l’ajout d’un niveau
d’indirection supplémentaire.
– L’alignement en mémoire est sur 8 bits, d’où la nécessité de recourir à des opérations
élémentaires sur les bits pour pouvoir stocker des indices sur des tailles arbitraires
de bits.
La représentation interne
Les conteneurs standards[Muss 95, Brey 97, Stan 05] manipulent les données qu’ils
contiennent sans se soucier de leurs définitions. Il sont définis de manière générique sous
la forme :
template < class T, class Allocator = allocator<T> > class vector;
L’utilisateur définit le type T de données stockées dans les conteneurs, et peut fournir
l’allocateur Allocator définissant l’aménagement mémoire : comment l’espace est alloué,
et comment il est restitué.
Le Compact container de CGAL[CGAL 07] adapte cette définition à la spécificité des
objets de la triangulation. La gestion des espaces de la mémoire, notamment le repérage
47
CHAPITRE 3. REPRÉSENTATION À BASE D’INDICES DANS CGAL
des positions libres et occupées dans une plage mémoire allouée pour le conteneur est basée
sur une information fournie par l’objet en mémoire lui même1 .
Les types abstraits associés aux données des conteneurs correspondent aux objets de la
triangulation : les sommets et les cellules. Ces sommets et cellules ne sont qu’une suite de
champs, chacun contenant une référence (de sommet ou de face). Dans la représentation
de CGAL, ces références sont absolues et représentant directement des adresses mémoire
(ou pointeurs) avec lesquelles (sans aucune information supplémentaire) l’objet déréférencé
(sommet ou face) peut être localisé directement, et lu ou modifié.
Dans notre travail, la définition des types ne change pas, mais la représentation interne
de ces types dans le conteneur change. Les champs des sommets et cellules ne seront plus
des références absolues, mais des indices dans un conteneur. Par conséquent, les conteneurs
des sommets et des cellules ne sont plus que des suites d’indices sans contexte. Cette suite
d’indices est stockée en mémoire sous forme d’une chaı̂ne de bits. Pour accéder à un objet
à partir d’un champ donné, l’indice seul ne fournit pas l’information complète. L’informa-
tion supplémentaire est le contexte permettant le passage de cet indice à l’objet réel.
C’est alors une couche supérieure qui assure l’extraction de l’information d’une simple
chaı̂ne de bits et sa modification. La structure du conteneur n’est plus analogue à celles
des conteneurs standards.
L’architecture
1
Les références étant des pointeurs, sont alignés sur 4 octets en mémoire, ce qui implique que les deux
bits les moins significatifs sont toujours à zéro. Ces deux bits sont utilisés pour cacher l’information libre
et occupée indiquant respectivement si la case en question est libre ou occupée.
48
3.3. REPRÉSENTATION À BASE D’INDICES
Vertex_handle Cell_handle
Container <Gt, Compact_TDS_3, VetexWord , CellWord >
Vertex_iterator<Compact_TDS_3> Cell_iterator<Compact_TDS_3>
Vertex<Gt, Compact_TDS_3> Cell<Gt, Compact_TDS_3>
Vertex_base_iterator Cell_base_oterator
Bit_container <Word>
49
CHAPITRE 3. REPRÉSENTATION À BASE D’INDICES DANS CGAL
50
3.3. REPRÉSENTATION À BASE D’INDICES
Comme les itérateurs standards sont analogues aux références absolues que sont les
pointeurs, les itérateurs dans la classe Container sont analogues aux nouvelles références
que sont les indices. Ces itérateurs ne sont plus liés à des conteneurs, car il n’y a pas
réellement de conteneurs, mais sont définis globalement dans la Compact T DS 3 comme
une surcharge des objets de la triangulation : les sommets et les cellules. Cette surcharge
fournit les opérateurs de base de tout itérateur bidirectionnel[ISOIb] qui sont :
– L’opérateur de déréférencement ∗ qui retourne une valeur du type spécifié par la
définition de l’itérateur (V ertex pour les sommets et Cell pour les cellules).
– Les opérateurs d’incrémentation et de decrémentation permettant le parcours des
éléments stockés en mémoire du type spécifié par la définition de l’itérateur.
Ces itérateurs fournissent l’interface entre les chaı̂nes de bits contenant les sommets cel-
lules, et les algorithmes de la triangulation. De manière générale, l’accès réalise le passage
d’un indice i à une valeur t de type T (sommet ou cellule) :
– la position de l’élément dans la suite de bits (les données réelles en mémoire) est
calculée à partir de l’indice i. Et la suite de bits bj représentant l’objet en question
tbrut est retournée.
– Les champs dans cette suite tbrut sont extraits, et sont convertis pour construire la
valeur t lisible par la Compact T DS 3.
Pour des raisons d’efficacité en occupation mémoire, les tableaux de données sont à
deux étages (voir figure 3.4). Le premier étage est un tableau de pointeurs vers les tableaux
de données. Ces tableaux de données sont alloués suivant le besoin, un par un. La taille
√
de ces tableaux de données est N , où N est le nombre maximal d’éléments. La perte de
√
mémoire c’est à dire l’espace alloué mais non utilisé, est alors au pire N . Ceci dit que la
taille maximale de la triangulation doit être connue d’avance.
Bien que cette technique fige la taille des blocs alloués, elle épargne l’utilisation de
délimiteurs de début et de fin de bloc dans le cadre d’une allocation dynamique. Sachant
que ceci nécessite la connaissance au préalable de la taille maximale de la triangulation.
Cette contrainte s’avère raisonnable lors de la manipulation de gros jeux de données. Elle
peut quand même être contournée en choisissant une taille arbitraire si celle-ci n’est pas
connue par l’utilisateur.
La taille du conteneur est exprimée en nombre d’éléments qu’il contient, c’est à dire le
nombre de sommets ou de faces :
– Le conteneur des sommets contient les informations stockées dans les sommets :
les indices des faces incidentes à ces sommets (voir figure 3.5).
51
CHAPITRE 3. REPRÉSENTATION À BASE D’INDICES DANS CGAL
indice
N
01101000101
010............01
√
Fig. 3.4: Tableau à deux étages, où les éléments sont loués par blocs de N . Pour repérer
les emplacements libres dans un bloc, un bit est réservé dans chaque case pour indiquer
sa disponibilité.
– Le conteneur des cellules contient les informations stockées dans les cellules : des
suites de 8 indices (voir figure 3.5) :
– 4 indices pour les sommets de la cellule.
– 4 indices pour les voisins de cette cellule.
– Les conteneurs des informations supplémentaires contiennent des éléments
géométriques pour les sommets, ainsi que d’autres informations dont le type est
défini par l’utilisateur.
Le stockage au bit près n’est fait que pour les deux premiers conteneurs. Ces deux
conteneurs sont déclarés comme des blocs d’octets, et la mémoire est allouée aussi par
blocs d’octets. Pour les autres conteneurs, les éléments sont alignés sur un nombre entier
d’octets, et sont gérés comme des conteneurs standards.
52
3.4. ANALYSE ET DISCUSSION
M N
cellule sommet
M N
V V V VC C C C C
référence sommet référence cellule
référence cellule
A B
Fig. 3.5: Les conteneurs de sommets et de faces ne sont que des suites de bits, inutilisables
en soi.
– La lecture et l’écriture des éléments est indirecte. La suite de bits qui représentent
l’information brute est extraite par des opérations de décalage, à chaque accès, qu’il
soit en lecture ou en écriture.
Le gain en mémoire est lié au nombre de bits utilisés pour représenter les indices des
cellules et des sommets, et par conséquent au nombre de ces derniers.
53
CHAPITRE 3. REPRÉSENTATION À BASE D’INDICES DANS CGAL
triangulations (de quelques dizaines de milliers de points), ou encore pour coder une grande
triangulation en plusieurs sous-triangulations (par exemple pour des algorithmes out-of-
core), où un codage local des entités est utilisé. Ce qui fera l’objet du dernier chapitre de
cette thèse.
54
3.5. CONCLUSION
La figure 3.6 illustre les résultats détaillés dans les tableaux 3.1 et 3.2.
Tab. 3.1: L’espace mémoire alloué par la structure de données Triangulation pour
différents jeux de données. Le rapport entre les espaces mémoire est exprimé en pour-
centage. On lit aussi le facteur de détérioration du temps d’exécution lors du passage au
codage par indices. Ces résultats sont obtenus sur une machine avec un processeur Intel(R)
Pentium(R) 4 Core Duo CPU 3.60 GHz avec 2Go de mémoire vive. Les coordonnées des
points sont en format flottant, représentées sur 4 octets chacune.
3.5 Conclusion
La manipulation de gros jeux de données géométriques nécessite le recours à un codage
local des entités. Le but de ce chapitre est de présenter les contraintes techniques lors de
l’application de la solution théorique utilisant des indices pour référencer des entités sur
le nombre de bits minimal au bit prés.
Le surcoût en termes de temps d’exécution est le premier préjudice de cette méthode,
à cause de la phase d’extraction des données brutes de la mémoire. Ce qui peut être
extrêmement coûteux par rapport à l’accès direct par des pointeurs.
Toutefois, le retardement du transfert entre la mémoire et les périphériques de sto-
ckage est aussi d’un grand intérêt. Les algorithmes à mémoires externes, et les algorithmes
hiérarchiques tentent toujours de diminuer les commutations des blocs de travail. L’utili-
sation d’un codage relatif local avec un codage au bit prés est une solution justifiée qui
renforce ce but.
55
CHAPITRE 3. REPRÉSENTATION À BASE D’INDICES DANS CGAL
pointeurs
pointeurs
58% 65 %
indices
indices
pointeurs
40 % 36%
40 fois plus lent
indices
10.000.000
20.000.000 points
points
Fig. 3.6: Représentation graphique des gains apportés par l’utilisation des indices comme
références dans les triangulations. Les rectangles représentes l’espace mémoire alloué par
les différentes structures.
56
3.5. CONCLUSION
Tab. 3.2: L’espace mémoire alloué par la structure de données Triangulation pour
différents jeux de données. Le rapport entre les espaces mémoire est exprimé en pour-
centage. On lit aussi le facteur de détérioration du temps d’exécution lors du passage au
codage par indices. Ces résultats sont obtenus sur une machine 64 bits Bi-Processor In-
tel(R) Xeon(R) Quad Core CPU 2.33 GHz avec 16 Go de mémoire vive. Les coordonnées
sont en format double représentées sur 8 octets chacune.
57
CHAPITRE 3. REPRÉSENTATION À BASE D’INDICES DANS CGAL
58
Chapitre 4
4.1 Introduction
Des travaux récents entrepris par Castelli Aleardi et al[Cast 04, Cast 05, Cast 06c] ont
permis l’élaboration d’une représentation optimale pour les triangulations de la sphère à n
points utilisant uniquement 3, 24 n bits par sommet, avec un coût supplémentaire asymp-
totique négligeable (dans le cas des triangulations à bord polygonal de taille arbitraire, le
coût global de la représentation est de 2, 17 bits par triangle).
L’idée de base est le rassemblement des triangles dans des micro-triangulations de
tailles comprises entre log n
12 et 4 ,
log n
et de définir un graphe d’incidence entre ces micro-
triangulations.
Une micro-triangulation n’est pas représentée explicitement, mais par un lien vers
le bon élément dans une table contenant toutes les configurations possibles de tailles
inférieures ou égales à 4 .
log n
La somme des tailles des références vers le catalogue représente
le terme dominant exprimé par 3, 24 bps, alors que le graphe occupe un espace à coût
négligeable (voir figure 4.1).
Toutefois, le terme asymptotique est de la forme O n logloglogn n avec une constante qui
fait que ce terme n’est négligeable que pour des valeurs de n de l’ordre de dizaines de
milliards. Ce qui rend cette approche purement théorique.
Néanmoins, l’idée en elle même est très intéressante, et peut être appliquée en y ap-
portant quelques simplifications [Cast 06b, Cast 07].
Ce chapitre, présente quelques résultats non asymptotiques basés sur les constatations
suivantes :
– bien que le coût du graphe d’incidence ne soit pas négligeable, il est toujours plus
économique que le graphe original entre les triangles. Et ce, parce que les tailles des
59
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
références entre les morceaux de triangulations sont de toute façon plus petites que
les tailles des références explicites entre les triangles.
– log n
12 est en fait un petit nombre ( (log 70 millliards)
12 ≈ 4), ce qui justifie l’étude de
petits catalogues de taille fixe, pour pouvoir évaluer l’impact sur l’espace mémoire
nécessaire à la représentation de la triangulation.
Fig. 4.1: Une représentation en plusieurs niveaux d’une triangulation (de haut en bas, de
droite à gauche) : la triangulation est subdivisée en plusieurs micro-triangulations. Ces
micro-triangulations sont ensuite regroupées dans des mini-triangulations.
60
4.2. DÉFINITIONS
4.2 Définitions
61
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
C1
C‘1
C2
C‘2 C3
Fig. 4.2: Cinq catalogues stables pour les opérations de base (insertion, suppression, et
bascule d’arêtes) : (1) Le catalogue trivial C1 ne contenant qu’une micro-triangulation
à triangle unique (2) Le catalogue Triangle-Quadrangle C10 (3) Le catalogue minimal C2
contenant au moins 2 triangles par micro-triangulation (4) Un catalogue non minimal C20
à au moins 2 triangles par micro-triangulation (5) Le catalogue minimal C3 à au moins 3
triangles par micro-triangulation.
Il est intéressant de voir maintenant l’intérêt que peuvent apporter les catalogues à la
représentation des triangulations en termes d’espace mémoire. Pour ce faire, il est souhai-
table de calculer quelques bornes supérieures sur la mémoire requise par cette structure.
Le premier catalogue trivial est celui contenant un triangle unique. Une triangulation
de n points peut être codée en utilisant 13n références.
La conception d’une telle structure est directe et simple. L’indexation est directe,
chaque référence f ace déréférence un objet unique dans le tableau des triangles. Un second
tableau pour les sommets est nécessaire.
62
4.3. CATALOGUES SIMPLES
Il est évident que ce catalogue C10 est stable pour les trois opérations considérées, mais
il n’est pas minimal.
Une triangulation représentée par ce catalogue est un ensemble de trois tableaux : un
pour les sommets de la triangulation, un deuxième pour les triangles, et un troisième pour
les quadrangles.
La représentation des triangles reste inchangée :
– trois références vers les sommets du triangle.
– trois références vers les voisins de ce triangle.
La représentation des quadrangles est la suivante :
– quatre références vers les sommets du quadrangle.
– quatre références vers les voisins de ce quadrangle.
Ce qui nous permet de gagner 4 références pour chaque quadrangle (8 références au
lieu de 12 dans le cas où les deux triangles sont représentés séparément).
Le codage des diagonales des quadrangles se fait implicitement en fixant un ordre
conventionnel des sommets. L’ordre choisi est de fixer la diagonale entre les sommets 1 et
3, voir la figure 4.3 gauche.
1 1 2
2
0 2 2
0 3
1 0 0 1
1 3 1
2 3
4 0
3 4 5 0
Fig. 4.3: Les diagonales des petites micro-triangulations peuvent être codées implicite-
ment en fixant un ordre conventionnel relatif à la diagonale. La diagonale du quadrangle
relie les sommets 1 et 3. Celles du pentagone relient les sommets 1 à 3, et 1 à 4. Et les
diagonales de l’hexagone relient les sommets 1, 3 et 5. Les triangles internes peuvent aussi
être implicitement numérotés sans ambiguı̈té.
63
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
et quadrangles).
Plusieurs approches ont été proposées pour la conversion de triangulations en quadran-
gulations [Heig 83][Rama 98]. Ou pour créer des quadrangulations à partir d’un ensemble
de points[Tous 95].
Il n’existe pas une méthode rigoureuse pour réaliser cette conversion, et c’est même
impossible dans certains cas (lorsque la taille du bord est impaire par exemple[Bose 97]).
Toutefois, il est toujours possible de convertir une triangulation d’une sphère topologique
(une triangulation sans bord) en une quadrangulation. Ceci est directement déductible du
théorème de Petersen[Pete 91]. Le théorème garantit pour chaque graphe régulier de degré
3, sans isthme, l’existence d’un appariement complet. Ces conditions étant satisfaites par
le graphe dual d’une triangulation d’une sphère topologique, il est alors, toujours possible
de regrouper tous les triangles en quadrangles deux à deux.
Dans le mode dynamique (ou incrémental), les opérations de mise à jour sont prises en
compte, vu que la triangulation est construite et modifiée à la demande. On doit pouvoir
insérer de nouveaux points, supprimer des sommets de degré 3, et basculer des arêtes.
Pour réaliser ces opérations en temps constant, la modification doit affecter une partie
de taille fixe de la triangulation (voir juste le voisinage direct du triangle impliqué dans la
mise à jour).
Cette contrainte nous empêche de profiter du résultat dans le cas statique, et l’utili-
sation uniquement des quadrangles pour représenter une triangulation n’est plus possible,
même pour les triangulations sans bord. La figure 4.4 illustre les cas de conflit pour les
opérations de mise à jour, où on ne peut se restreindre à des quadrangles.
? ?
?
? ? ?
?
?
Fig. 4.4: Une triangulation en mode dynamique ne peut pas être représentée que par
des quadrangles. La bascule d’arêtes et la suppression d’un sommet de degré 3 peuvent
produire une configuration qui ne peut être décomposée en quadrangles (les cas d’un
triangle entouré de trois triangles voisins).
64
4.3. CATALOGUES SIMPLES
dynamique.
2n − b − 2 = t + 2q; (4.1)
où aint est le nombre d’arêtes internes aux quadrangles (le nombre de diagonales), atr/quad
est le nombre d’arêtes partagées entre triangles et quadrangles, et aquad/quad est le nombre
d’arêtes entre quadrangles ; puisque la décomposition ne contient pas de triangles adja-
cents, il n’y a pas d’autres types d’arêtes.
Sachant que
aint = q
atr/quad = 3t
On arrive à
aquad/quad = 3n − 3t − q − b − 3 ≥ 0 (4.3)
3 2 3
q > n− b+ (4.4)
5 5 5
65
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
Le catalogue minimal
La stabilité Ce catalogue est stable pour les opérations de mise à jour : insertion d’un
nouveau point, suppression d’un sommet de degré 3, et bascule d’arêtes. Les figures 4.6,
4.7, et 4.8 illustrent la stabilité pour ces trois opérations.
Il est clair que le nombre maximal de quadrangles que la décomposition d’une triangu-
lation peut avoir est égal à n, ce qui permet d’épargner deux pointeurs sur chaque triangle,
passant de 13n référence à 9n références, induisant un gain d’au moins 13% sur l’espace
mémoire. Mais on peut encore garantir mieux.
66
4.3. CATALOGUES SIMPLES
2 2
0
3 2 0
2 1
3 1 1 1 0
0 3
1
4
5
4
Fig. 4.5: Les pentagones et les hexagones du catalogue minimal C2 peuvent avoir des
sommets internes, et ce en étant des voisins à eux mêmes. Ceci induit la coı̈ncidence des
sommets 0 et 2 pour les pentagones, et de deux sommets pour les hexagones (0 et 2, 2 et
4, ou 4 et 6).
Fig. 4.6: Le catalogue C2 est stable pour l’insertion d’un nouveau point : l’insertion dans
un triangle, ou sur une arête produit toujours une configuration décomposable en micro-
triangulations du catalogue C2 ; L’insertion en dehors de l’enveloppe convexe de l’ensemble
des points construit des nouveaux triangles connexes qui peuvent toujours être décomposés
en micro-triangulations, comme par exemple les regrouper deux à deux en quadrangles,
et regrouper les trois derniers en pentagone. Cette illustration définit un schéma qui est
utilisé pour mettre à jour la triangulation après chaque insertion d’un nouveau point.
67
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
? ?
a b c 1
X
? X X
a b c 2
?
? ? ? ?
? ? ?
?
3
? ? ?
?
?
4
68
4.3. CATALOGUES SIMPLES
Fig. 4.8: Les cas de figure pour le résultat de l’application de l’opération de bascule
d’arêtes aux micro-triangulations du catalogue C2 . Cette illustration définit un schéma qui
est utilisé pour mettre à jour la triangulation après chaque bascule d’arête.
69
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
Fig. 4.9: Si deux quadrangles sont voisins à un autre quadrangle, et si ces deux quadrangles
sont incidents à un sommet de la diagonale, les trois quadrangles peuvent être convertis
en deux pentagones.
2n − b − 2 = 2q + 3p (4.5)
Où aint = 2p + q est le nombre d’arêtes internes aux quadrangles et aux pentagones (les
diagonales) ; et arest est la somme des nombres d’arêtes partagées entre pentagones, et
entre pentagones et quadrangles.
Et puisqu’il n’y a pas plus que deux quadrangles adjacents à chaque quadrangle,
aquad/quad est borné par 2q/2, et par conséquent arest est au moins 2q, ce qui donne :
arest = 3n − 2q − 2p − b − 3 ≥ 2q (4.7)
70
4.3. CATALOGUES SIMPLES
1 1 1
p> n− b− (4.8)
4 4 4
Une alternative consiste à utiliser le catalogue non minimal C20 décrit dans la figure 4.2.
Ce catalogue incorpore en plus des micro-triangulations du catalogue précédent (voir le pa-
ragraphe 4.3.2) les configurations restantes de l’hexagone. Ce catalogue permet d’imposer
en plus que deux quadrangles ne soient jamais voisins, vu que chaque paire de quadrangles
voisins peut être convertie en un hexagone. Cette hypothèse, avec la même approche de
calcul que le catalogue minimal C2 , et supposant aussi que la décomposition ne contienne
aucun hexagone (dans le cas le pire), permet de borner le nombre de quadrangles par 5
11 n,
ce qui mène à une représentation qui nécessite 91
11 n = 8.27n références, avec un gain d’au
moins 36%.
Dans une décomposition qui utilise le catalogue non minimal C20 , le nombre de penta-
gones et le nombre de quadrangles sont inférieurs à 12 n. La taille de la référence pentagone
et quadrangle est alors −1 + log n bits pour référencer chaque face.
Si on impose la même taille (−1 + log n) pour les hexagones, on doit alors limiter
le nombre de chaque type d’hexagone à 1
3n (on utilise deux bits dans la référence pour
distinguer le type d’hexagone).
Le codage des diagonales peut toujours se faire en choisissant un ordre conventionnel
pour chaque micro-triangulation (voir figure 4.3).
Un nombre de bits additionnel est nécessaire pour le codage de l’indice réciproque
d’une face dans la face voisine et du type de cette face voisine, et puisque nous avons
4 + 5 + 6 = 15 cas, ce nombre est égal à 4.
La taille des références est alors à nouveau 3 + log n bits.
Le catalogue minimal C2 ne donne malheureusement pas de bornes qui peuvent aider
à respecter la taille précédente. La taille des références faces de chaque type est log n. En
ajoutant les 4 bits pour les types des micro-triangulations et l’indice réciproque, la taille
des références des faces est 4 + log n. Soit un bit supplémentaire par rapport aux autres
cas vus jusqu’à présent.
71
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
La figure 4.2 illustre le catalogue minimal C3 qui est stable pour les opérations de mise
à jour considérées. Ce catalogue contient des micro-triangulations qui ont au moins trois
triangles. Le catalogue contient donc : des pentagones, des hexagones, des heptagones, des
octogones, et des ennéagones. Ces micro-triangulations permettent de gagner respective-
ment 8, 12, 16, 20, et 24 références sur les triangles qu’ils regroupent. Ce qui produit des
gains respectifs de 3,
8
3, 5 , 3
16 10
and 24
7 références pour chaque triangle converti en une
micro-triangulation de ce catalogue.
Le cas le pire en termes d’espace mémoire pour une décomposition en utilisant le
catalogue C3 est obtenu quand cette décomposition ne contient que des pentagones. Le
coût global de stockage dans le cas le pire est donc 23
3 n = 7.67n références pour une
triangulation de n points. Le gain correspondant est donc au moins égal à 41% par rapport
à la représentation explicite de base.
A B C
Fig. 4.10: Illustration de trois représentations d’une même triangulation (A) La trian-
gulation à base de triangles explicite, ou la représentation par le catalogue C1 (B) Une
représentation de la même triangulation en utilisant le catalogue C10 (C) Une représentation
de la même triangulation en utilisant le catalogue C2 .
Trois catalogues sont implémentés pour pouvoir estimer l’impact pratique sur l’espace
mémoire nécessaire à la représentation d’une triangulation en utilisant cette approche :
– Le catalogue trivial C1 , qui est la représentation explicite à base de triangles.
– Le catalogue Triangle-Quadrangle C10 .
– Le catalogue minimal avec au moins deux triangles par micro-triangulation C2 .
Le catalogue Triangle-Quadrangle C10 est implanté comme un module de la bibliothèque
CGAL[CGAL]. L’obligation de garder la même interface, et la même architecture logicielle
a limité les optimisations en termes de temps de calcul pour ce catalogue. Ceci explique
les temps de calcul relativement supérieurs par rapport au temps de calcul du troisième
72
4.4. IMPLÉMENTATION ET RÉSULTATS
Les résultats dans les tableaux évaluent l’espace mémoire consommé par une triangu-
lation de Delaunay d’un ensemble de points en dimension 2, et l’impact sur le temps de
calcul en deux phases :
– La construction de la triangulation où on mesure le temps nécessaire pour
construire la triangulation.
– La manipulation de la triangulation où on lance un certain nombre de requêtes
de localisation dans cette triangulation (détermination de la face contenant un point
donné dans cette triangulation).
La triangulation est construite incrémentalement (les points sont insérés un par un).
L’insertion d’un point se fait en trois étapes :
– localiser le triangle qui contient géométriquement le nouveau point à insérer. Le
point peut se situer dans un triangle, sur une arête, ou en dehors de l’enveloppe
convexe des points déjà insérés.
– Insérer le point :
– L’insertion dans un triangle se réalise en créant trois nouveaux triangles (le produit
de la liaison de ce nouveau point aux sommets du triangle qui le contient), et en
supprimant le triangle englobant.
– L’insertion d’un point sur une arête est faite de la même manière, sauf que le
nombre de triangles créés est quatre (produit de la liaison du point au deux som-
mets opposés à cette arête), et le nombre de triangles supprimés est deux (les deux
triangles incidents à cette arête).
– L’insertion en dehors de l’enveloppe convexe se fait en créant des nouveaux tri-
angles connexes et adjacents à la triangulation.
– Propager la propriété de Delaunay : effectuer une série de bascules d’arêtes en
partant du nouveau sommet pour rétablir la propriété du cercle vide sur toute la
triangulation.
La structure de données proposée dans ce travail doit fournir l’interface définie par les
spécifications suivantes :
– Définition unique à partir d’une référence : On doit pouvoir accéder à un
73
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
74
4.4. IMPLÉMENTATION ET RÉSULTATS
T
N
√
Fig. 4.11: Tableau à deux étages, où les éléments sont alloués par blocs de N.
L’itération sur les triangles dans le cas des catalogues, se fait en choisissant un ordre
entre les différentes micro-triangulations (en taille par exemple), et d’itérer successivement
sur les différents tableaux associés aux micro-triangulations en énumérant à chaque lecture
d’une micro-triangulation ses triangles internes.
Les résultats présentés dans les tableaux 4.1 et 4.2 expriment ce qui suit :
– La taille de la mémoire résidente que la triangulation d’un nombre n de points
occupe.
– Le temps nécessaire à la construction de cette triangulation, sachant que les points
sont triés suivant une courbe de Hilbert[Dela 07] pour améliorer la performance de la
localisation des points, ce qui permet d’accélérer la construction de la triangulation.
– Le pourcentage des différentes micro-triangulations du catalogue dans la triangula-
tion.
Les temps de calculs pour chaque catalogue sont en deux modes :
– mode brut, où les points sont insérés, et la décomposition de la triangulation est
mise à jour suivant un schéma identique aux cas de figures exprimés dans les fi-
gures 4.6 et 4.8 sans aucune opération supplémentaire.
75
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
Sommets
Triangulation
Faces
face_incidente() sommet(i)
voisin(i) A
Sommets
Triangulation
Micro-triangulation k
...
Faces
Tr
...
face_incidente()
sommet(i)
référence = Type + Numéro + Triangle voisin(i)
B
76
4.4. IMPLÉMENTATION ET RÉSULTATS
? ?
? ?
* * 1
? ?
* 2
4.4.4 Discussion
Les gains pratiques en termes de mémoire reflètent les estimations de calcul présentées
ci-dessus. Ces gains permettent la manipulation sans utilisation de mémoires auxiliaires
de jeux de données beaucoup plus grands que ceux dans le cas de la représentation à base
de triangles explicite. Ceci permet également de retarder davantage le recours au transfert
de données en mémoire externe (disque dur en l’occurrence).
Cependant, ce gain ne peut être obtenu sans une perte en matière de performance.
Ce surcoût en temps de calcul est dû à l’indirection d’accès aux éléments introduite dans
la structure de données dans le cas des catalogues pour réaliser l’interface entre les objets
réels en mémoire (les micro-triangulations) et les faces (qui sont des triangles) manipulées
au niveau le plus haut.
77
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
10 Millions de points
(20 Millions de triangles)
Catalogues C1 C10 C10 avec C2 C2 avec
optimisation optimisation
Triangles 19999954 8047832 2946606 - -
Triangles 100% 40% 15% - -
Quadrangles - 5976083 8526696 6046211 2296674
Quadrangles - 60% 85% 61% 23%
Pentagones - - - 2159780 2285542
Pentagones - - - 32% 34%
Hexagones - - - 357048 2137495
Hexagones - - - 7% 43%
Gain minimum
sur la - - 19% - 35%
combinatoire(%)
Le gain
effectif sur - 19% 26% 35% 41%
combinatoire(%)
Mémoire
Résidante 1,11 Go 481,1 Mo 442,1 Mo 401,6 Mo 374,3 Mo
Taux de
mémoire - 42% 39% 35% 33%
nécessaire (%)
Temps 2,12 minutes 8 minutes 12,8 minutes 5,33 minutes 13,32 minutes
Tab. 4.1: Résultats sur une machine 32 bits avec un processeur Intel(R) Pentium(R) 4
Core Duo CPU 3.60 GHz avec 2Go de mémoire vive
78
4.4. IMPLÉMENTATION ET RÉSULTATS
Tab. 4.2: Résultats sur une machine 64 bits Bi-Processor Intel(R) Xeon(R) Quad Core
CPU 2.33 GHz avec 16 Go de mémoire vive
79
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
t
C1 C’1
C’1 avec
optimisations
C2 C 2 avec
optimisations
Fig. 4.14: Représentation graphique des gains apportés par l’utilisation des catalogues
pour représenter les triangulations. Les résultats présentés dans les tableaux 4.1 et 4.2
sont exprimés sur cette illustration.
Les hauteurs des rectangles représentent les espaces en mémoire alloués par les différentes
structures.
Les pointillés représentent les estimations de l’espace mémoire calculées dans les sec-
tions précédentes (correspondant aux gains théoriques minimaux). Les rectangles roses
représentent le temps de construction de chaque structure.
80
4.5. CONCLUSION
Ce surcoût peut être modulé par le niveau de tassement voulu. Ceci est traduit par
l’optimisation qui vise à minimiser les micro-triangulations ayant un nombre inférieur de
triangles, et aussi par le nombre de triangles par micro-triangulation dans le catalogue (les
micro-triangulations ayant un nombre élevé de triangles nécessitent plus de traitement
pour accéder aux triangles internes).
On constate que le catalogue C2 réalise le meilleur taux de mémoire par rapport à la
perte en temps d’exécution. Ce catalogue réduit l’espace mémoire utilisé par un facteur
de 3, pour une augmentation du temps de calcul par un facteur de 2, 5.
4.5 Conclusion
Ce chapitre a été consacré à l’utilisation des catalogues stables pour représenter les
triangulations en 2D. La mise à jour de la triangulation et sa construction dynamique
se font en temps constant tout en maintenant une décomposition économique en micro-
triangulations. Plusieurs catalogues ont été définis et étudiés en termes de calcul de bornes
inférieures, et en matière de complexité pratique, en l’occurrence l’impact sur le temps de
calcul.
En pratique, le gain en mémoire peut être maximisé en maintenant un ratio faible entre
le nombre de micro-triangulations ayant un nombre élevé de triangles et le nombre des
micro-triangulations ayant moins de triangles. Ceci se réalise en effectuant une étape d’op-
timisation locale après chaque opération de mise à jour. Cependant, cette phase introduit
un surcoût en temps de calcul.
81
CHAPITRE 4. CODAGE DE TRIANGULATIONS PAR CATALOGUES
82
Chapitre 5
Codage en sous-triangulations
5.1 Introduction
L’utilisation des indices pour référencer les sommets et les faces de la triangulation en
dimension 2, sur une taille contrôlée au bit près s’est avérée très coûteuse en matière de
temps de calcul (voir chapitre 3). Ceci est dû en grande partie aux opérations élémentaires
de lecture et d’écriture appelées en permanence, et incluant des opérations de décalage de
bits qui se révèlent plutôt lentes.
Ce chapitre tente de réduire la complexité de cette technique, en alignant les références
sur un nombre entier d’octets, sans être obligé à utiliser la taille du mot mémoire en entier.
Ceci ne peut se faire dans le cas des grandes triangulations, sans réduire les tailles des
références.
Pour ce faire, la triangulation est subdivisée en sous-triangulations, ce qui permet d’uti-
liser des références locales de taille réduite au sein de la même sous-triangulation. La taille
de ces références locales dépendra bien évidemment de la taille de la sous-triangulation.
Les références de la sous-triangulation ne sont pas toutes internes, celles qui référencent
des voisins n’appartenant pas à la même sous-triangulation sont obligatoirement globales,
et sont de taille supérieure à la taille des références internes. Le nombre de ces références
globales présente un surcoût, et est proportionnel à la taille des frontières entre les sous-
triangulations.
Le gain apporté par cette méthode est relatif au taux de remplissage des sous-triangulations.
Ce taux doit être maintenu élevé, pour pouvoir profiter du gain apporté par l’utilisation
des références locales. Les stratégies de décomposition d’une sous-triangulation en deux ou
plusieurs morceaux quand cette sous-triangulation atteint la taille maximale, ainsi que la
distribution des points jouent des rôles importants en cette direction. Bien que le deuxième
facteur ne puisse être contrôlé, le premier peut être ajusté pour donner des résultats assez
satisfaisants.
La taille maximale des sous-triangulations est aussi un paramètre déterminant. Des
83
CHAPITRE 5. CODAGE EN SOUS-TRIANGULATIONS
La décomposition de triangulations est utilisée pour les représentations des triangulations[Cast 06a],
ou pour la compression[Lavo 05]. L’idée consiste à partitionner les simplexes de la trian-
gulation en plusieurs parties connexes, induisant des ensembles plus petits, ce qui permet
d’utiliser moins de bits pour référencer ses éléments.
84
5.2. LA CONCEPTION DE LA TRIANGULATION EN PLUSIEURS NIVEAUX
Définitions
– On appelle le nombre de sommets dans une sous-triangulation, la taille de la sous-
triangulation.
– On appelle le nombre de sommets maximal que la sous-triangulation peut contenir,
la capacité de la sous-triangulation. Cette capacité correspond bien à l’espace alloué
en mémoire pour la sous-triangulation en question.
– On appelle taux de remplissage τ , pour une sous-triangulation t, de capacité non
taille(t)
nulle c, contenant taille(t) éléments, le ratio c .
La taille des références locales reff ace locale dépend de la capacité de la sous-triangulation.
Pour augmenter le gain, tout en minimisant les surcoûts du temps de calcul, les règles sui-
vantes sont considérées :
– Une capacité fixe et uniforme : La capacité est fixe pour toutes les sous-
triangulations. Et l’espace mémoire associé à chaque sous-triangulation est contigu,
et alloué statiquement à la création de la sous-triangulation en question. Une perte
est alors inévitable lorsque la triangulation est construite incrémentalement, due
au non remplissage très probable des sous-triangulations. Le choix de l’utilisation
de sous-triangulations de capacités variables, où l’allocation de l’espace mémoire
pour les éléments de ces sous-triangulations est dynamique, ne fait qu’augmenter la
complexité de la structure, et impose l’ajout d’informations supplémentaires pour
spécifier la capacité de la sous-triangulation, et marquer la disposition des éléments
en mémoire.
– Des références locales sur n octets : La capacité est choisie de manière à ce que
le nombre de bits nécessaire à la représentation des références locales soit un multiple
de 8 bits, pour éviter un gaspillage inutile de bits, ou le recours à des représentations
au bit près augmentant ainsi la complexité des méthodes d’accès.
85
CHAPITRE 5. CODAGE EN SOUS-TRIANGULATIONS
un schéma combinatoire unique qui représente toute la triangulation, pour pouvoir bénéficier
du gain que peut apporter l’utilisation des références locales.
Les faces de la triangulation gardent la même représentation, et par conséquent le
même type de références, qu’elles soient des faces internes, des faces limites, ou des faces
du bord.
On considère une triangulation de n sommets, représentée par une décomposition en
sous-triangulations de m sommets chacune. Le nombre de triangles dans chaque sous-
triangulation est borné par 2m. Une face est alors représentée par :
– 3 références sommets de taille log m bits.
– 3 références faces de taille 1 + 1 + log m bits.
La taille des références des sommets est égale à log m bits, car tous les sommets sont
référencés par des faces de la même sous-triangulation, la référence est donc locale dans
tous les cas.
La taille des références des faces dans les sommets est égale à 1 + log m bits, car on
peut toujours imposer que les faces référencées par les sommets soient de la même sous-
triangulation.
La taille des références de faces voisines est égale à 1 + 1 + log m bits. Le bit additionnel
détermine l’interprétation de la référence en séparant deux cas :
– La référence est locale : dans ce cas-là, cette référence renvoie un élément de
la même sous-triangulation, qui est déréférencé par le numéro représenté par les
1 + log m bits restants.
– La référence est globale : la référence renvoie un élément dans une autre sous-
triangulation. Dans ce cas-là, les 1 + log m bits restants renvoient l’indice d’une
case dans un tableau spécial ; et cette case contient la référence globale, qui est une
composition de deux parties, le numéro de la sous-triangulation en question tj , et le
numéro de l’élément déréférencé dans cette sous-triangulation.
Par conséquent, la taille des références des sommets et des faces est bornée par 2 + log m.
Pour gérer les références globales, un tableau supplémentaire doit être associé à chaque
sous-triangulation. Les éléments de ce tableau sont des références globales de la taille de
log ( m
n
) + 1 + log (m) = 1 + log n. La taille de ce tableau dépend de la taille du bord de la
sous-triangulation, ce qui rend la gestion de ce tableau complexe et imprévisible.
Une alternative consiste à exploiter la formule suivante, déduite de la formule d’Euler-
Poincaré[Bond 76, Dies 00] :
2m − 2 = t + k; (5.1)
Où t est le nombre de triangles, k est le nombre des triangles du bord. Il est clair que la
86
5.2. LA CONCEPTION DE LA TRIANGULATION EN PLUSIEURS NIVEAUX
face (6 références)
référence globale
Fig. 5.1: Un seul tableau de taille 2m triangles suffit pour représenter à la fois les faces
de la sous-triangulation, en partant de la gauche ; et les références externes de cette même
sous-triangulation vers les autres sous-triangulations en partant de la droite.
87
CHAPITRE 5. CODAGE EN SOUS-TRIANGULATIONS
On ne peut pas non plus maximiser le nombre de sommets internes, ce qui produit la
coı̈ncidence de la référence locale avec la référence globale, et de même, nous conduit à la
représentation explicite globale.
C’est donc un compromis à gérer entre la capacité des sous-triangulations, et le nombre
de sommets internes.
Le coût de la représentation dépend d’autres facteurs, comme la distribution des points,
et les stratégies de construction et de mise à jour de la triangulation.
La disposition des points joue un rôle primordial dans la détermination de la décomposition
possible d’une triangulation en sous-triangulations. Dans notre travail, on considère que les
points sont généralement bien distribués (ce qui veux dire que les points sont uniformément
distribués).
Pour ce qui est de la stratégie de construction et de mise à jour, la section suivante y
est entièrement dédiée.
Cas pratique Considérons maintenant le cas d’une triangulation de n points, où les
références faces et sommets sont de taille 7 bits. Ceci nous permet d’avoir des sous-
triangulations de taille 26 = 64 sommets chacune. Un bit est réservé dans chaque octet à
l’usage interne du tableau (pour le marquage des cases libres).
Si toutes les sous-triangulations sont pleinement remplies (ignorant que les sommets
se partagent), le gain est de 3
4 = 75% par rapport à la représentation classique. Ceci est
déduit du fait qu’on passe d’une représentation des références sur des entiers de 4 octets
à des références d’un octet.
Toutefois, les sous-triangulations ne sont pas toujours pleinement remplies. En moyenne,
elles sont remplies à 3
4 = 75% (au mieux, le taux de remplissage est à 100%, et au pire,
il est à 50%, lorsque une sous-triangulation atteint la limite, elle est subdivisée en deux
sans que les deux moitiés ne reçoivent de nouvelles insertions), ce qui nous donne un gain
moyen de 2
3 = 66%.
La triangulation est construite incrémentalement, c’est à dire que les points sont insérés
un à un. Et les sous-triangulations sont, par conséquent, construites l’une après l’autre.
Tout au début, la triangulation ne contient qu’une seule sous-triangulation, où toutes
les opérations sont entreprises comme s’il n’y avait qu’une seule triangulation. Dès que la
taille de cette sous-triangulation atteint la capacité de la sous-triangulation, une nouvelle
sous-triangulation est créée pour permettre l’insertion de nouveaux points. Et la construc-
tion de la triangulation continue jusqu’à l’insertion de tous les points.
88
5.3. LA CONSTRUCTION ET LA MISE À JOUR DE LA TRIANGULATION
L’algorithme d’insertion est celui de la bascule d’arêtes, présenté dans la section 1.2.2.
On considère que la capacité d’une sous-triangulation est c, et que le nombre d’éléments
d’une sous-triangulation t à un instant donnée est taille(t). Les cas de figures qui se
présentent sont comme suit :
Insertion dans une face f Cette insertion produit deux faces supplémentaires dans la
sous-triangulation t en question. Si l’insertion de ces deux faces ne déborde pas la capacité
de la sous-triangulation, ce qui revient à taille(t)+2 ≤ c, l’insertion se réalise normalement.
Si par contre, la sous-triangulation déborde après l’insertion des deux nouvelles faces
(taille(t) + 2 > c), cette sous-triangulation est subdivisée d’abord en deux nouvelles sous-
triangulations t1 et t2 , et l’insertion se fait dans la nouvelle sous-triangulation contenant
la face f .
Les stratégies de décomposition seront détaillées dans la section 5.4
Insertion sur une arête L’insertion sur une arête produit aussi deux nouvelles faces, le
même raisonnement est suivi pour la mise à jour de la décomposition de la triangulation.
L’insertion sur une arête peut bien évidemment se faire sur la frontière entre deux
sous-triangulations. Ce cas ne se pose pas en pratique, vu que l’insertion sur une arête
est détournée combinatoirement en combinant l’insertion dans une face avec une bascule
d’arête (voir figure 1.3).
Définition On dit qu’une face f de la triangulation est une face d’étranglement dans
sa sous-triangulation t, si la suppression de cette face, engendre une singularité (voir sec-
tion 1.1.2) dans la sous-triangulation, ou divise la sous-triangulation en deux composantes
connexes, ce qui d’ailleurs, fausse l’équation 5.1 (voir figure 5.2).
89
CHAPITRE 5. CODAGE EN SOUS-TRIANGULATIONS
X X
Fig. 5.2: Le triangle X est une face d’étranglement dans la sous-triangulation rouge, c’est
un triangle dont la suppression génère une singularité.
Dans le cas où l’arête à basculer est adjacente à une face d’étranglement f (ou à
deux faces d’étranglement f1 et f2 ), et que la face opposée ne peut être transférée,
une décomposition spéciale doit être entreprise. La sous-triangulation t contenant la face
d’étranglement est décomposée en deux sous-triangulations t1 et t2 , de telle sorte que la face
f appartienne à la sous-triangulation t1 , et est adjacente à la sous-triangulation t2 . Après
cette décomposition, la face f n’est plus une face d’étranglement dans sa sous-triangulation,
et peut être transférée à l’une de ces sous-triangulations voisine (voir figure 5.3).
Les deux solutions peuvent être combinées dans certains cas pour permettre la bascule
d’arête. Par exemple, lorsque les deux sous-triangulations sont pleines, et que les deux
faces incidentes à l’arête à basculer sont des faces d’étranglement.
90
5.4. STRATÉGIES DE DÉCOMPOSITION
f f
Les pseudocodes 5.2 et 5.3 décrivent les décompositions d’une sous-triangulation t sui-
vant cette stratégie en utilisant deux parcours différents de la triangulation (en profondeur
et en largeur, en partant du sommet). La procédure crée une nouvelle sous-triangulation,
et supprime les triangles de l’ancienne sous-triangulation l’un après l’autre, en les insérant
au fur et à mesure dans la nouvelle.
Pour ce faire, une face du bord doit être désignée pour commencer la recherche, le
choix de cette face peut être aléatoire, ce qui mène à des décompositions différentes. On
peut envisager plusieurs heuristiques pour sélectionner la première face, sur le bord :
– Choisir la face extrême suivant l’axe d’allongement de la triangulation (c’est ce qui
est choisi dans l’implémentation).
– Choisir la face avec le sommet ayant le degré minimal
91
CHAPITRE 5. CODAGE EN SOUS-TRIANGULATIONS
Subdiviser(sous-triangulation t)
début
// initialisation
triangle f = t.sélectionner une face ;
sous-triangulation t bis = créer une nouvelle sous-triangulation() ;
liste<triangle> liste t ;
// Remplir la nouvelle sous-triangulation
tant que(taille(t bis) < taille(t))
transférer(f, t, t bis) ;
si(liste t.est vide)
arrêter la décomposition() ;
fin si
f = liste t.suivant() ;
fin tant que
fin.
Subdiviser 2(sous-triangulation t)
début
// initialisation
triangle f = t.sélectionner une face du bord() ;
sous-triangulation t bis = créer une nouvelle sous-triangulation() ;
liste<triangle> liste t ;
// Remplir la nouvelle sous-triangulation
tant que(taille(t bis) < taille(t))
transférer(f, t, t bis) ;
si(triangle gauche(f ) est dans t)
liste t.insérer à la fin(triangle gauche(f )) ;
fin si
si(triangle droit(f ) est dans t)
liste t.insérer à la fin(triangle droit(f )) ;
fin si
transférer(f, t, t bis) ;
f = liste t.début() ;
fin tant que
fin.
92
5.4. STRATÉGIES DE DÉCOMPOSITION
Subdiviser 2(sous-triangulation t)
début
// initialisation
triangle f = t.sélectionner une face du bord() ;
sous-triangulation t bis = créer une nouvelle sous-triangulation() ;
liste<triangle> liste t ;
// Remplir la nouvelle sous-triangulation
tant que(taille(t bis) < taille(t))
transférer(f, t, t bis) ;
si(triangle droit(f ) est dans t)
liste t.insérer au début(triangle droit(f )) ;
fin si
si(triangle gauche(f ) est dans t)
liste t.insérer au début(triangle gauche(f )) ;
fin si
f = liste t.début() ;
fin tant que
fin.
93
CHAPITRE 5. CODAGE EN SOUS-TRIANGULATIONS
Dans le but d’obtenir des sous-triangulations équilibrées, un parcours par balayage pour
extraire les triangles à insérer dans la nouvelle sous-triangulation peut être plus efficace. La
triangulation est parcourue de gauche à droite ou de haut en bas (suivant l’axe le plus long)
par une ligne, et à chaque fois que la ligne franchit un triangle, ce triangle est transféré
à la nouvelle sous-triangulation. Cette technique est analogue à plusieurs algorithmes en
géométrie algorithmique comme pour le calcul de la triangulation de Delaunay, ou le calcul
des arrangements de segments[Chen 96].
La décomposition progressive à partir d’une face sur le bord ne conduit pas toujours à
une décomposition équitable. En effet, la décomposition ne s’arrête pas toujours lorsque les
deux sous-triangulations sont de tailles équivalentes, mais peut s’arrêter prématurément.
Ce cas se produit quand le parcours se trouve sur une face d’étranglement dans la sous-
triangulation, et résulte souvent une sous-triangulation allongée ayant un bord très large,
ce qui induit un taux de remplissage très faible. Les résultats obtenus ainsi peuvent être
améliorés en appliquant un traitement supplémentaire.
Ce traitement vise deux buts :
– Maximiser l’équilibre de taille entre les sous-triangulations.
– Minimiser au maximum la taille du bord de la sous-triangulation, c’est à dire le
nombre d’arêtes partagées avec les sous-triangulations voisines.
Pour ce faire, les triangles du bord de la sous-triangulation sont parcourus. Et chaque
fois qu’on trouve un triangle ayant deux arêtes partagées avec la même sous-triangulation,
ce triangle est transféré vers cette sous-triangulation. Ceci permet de maximiser le nombre
de ses sommets internes, et minimiser en même temps la taille du bord de la sous-
triangulation courante.
Cette opération est réalisée avant chaque subdivision. Si ce traitement n’aboutit pas à
une réduction de la taille de la triangulation, la subdivision aura lieu. Cette étape d’optimi-
sation de la forme de la sous-triangulation peut être réalisée aussi après la décomposition
pour les deux sous-triangulations : l’ancienne et la nouvelle.
94
5.6. MISE EN ŒUVRE.
Certains niveaux de représentation sont admis dans le cas ou des vrais pointeurs sont
utilisés, du fait que le coût en temps d’exécution est négligeable. Cependant, lorsqu’il
s’agit de séparer la représentation mémoire (ce qui est stocké en mémoire) de l’interface
utilisateur, il est conseillé de limiter au maximum les couches inutiles. Car dans ce modèle
là, des accès multiples sont faits à chaque accès aux éléments de la structure en lecture,
comme en écriture (voir chapitre 3 pour plus de détails).
5.6.1 L’interface
La triangulation doit garder son interface classique vis à vis de l’utilisateur. Ceci im-
plique une invariance par rapport au modèle imposé au début de notre travail, à savoir :
– Construction d’une triangulation : par le constructeur par défaut, et le constructeur
par copie.
– Insertion d’un point dans la triangulation.
– Suppression d’un sommet de la triangulation.
– Bascule d’une arête de la triangulation.
– Parcours des sommets et des triangles de la triangulation.
Cette couche est intermédiaire entre la couche la plus basse et la couche d’interface
avec l’utilisateur. Pratiquement, une classe appelée (Container ) est créée pour regrouper
toutes les fonctionnalités et les méthodes nécessaires à la création et à la manipulation des
objets.
On définit dans cette classe ce qui suit :
95
CHAPITRE 5. CODAGE EN SOUS-TRIANGULATIONS
Les faces (triangles) stockées en mémoire ne contiennent que des informations locales,
et pour pouvoir les manipuler comme des triangles réels, elles ont besoin d’inclure :
– le numéro de la sous-triangulation.
– les références globales pour les champs pointant vers des faces externes.
Les faces sont donc représentées comme suit :
– La structure contient un pointeur vers la face dans le tableau, le numéro de la sous-
triangulation en question, et une référence du tableau global (en cas d’utilisation de
plusieurs triangulations).
– Adapter toutes les méthodes d’accès aux sommets et aux voisins à cette définition.
– Le seul inconvénient est que les faces implémentées ainsi ne sont plus utilisables en
soi. On ne peut manipuler que les faces réelles (qui sont déjà dans la triangulation, i.e.
insérées dans le tableau). On ne peut donc plus déclarer une face sans qu’elle ait une
image dans le tableau. Ce qui paraı̂t un peu restrictif au niveau de l’implémentation,
mais en pratique, c’est tout à fait cohérent. Car on peut envisager de définir un type
Triangle, pour en faire usage dans une telle situation, et garder le type Face pour
les faces de la triangulation (ayant un voisinage).
Cette définition est le type de valeur de l’itérateur sur les faces. Cet itérateur est quasi-
ment identique à son type de valeur, en le surchargeant par les opérateurs d’incrémentation
et de decrémentation. On peut donc itérer sur tous les éléments, via ces itérateurs, en te-
nant en compte le passage d’une petite triangulation à une autre.
Les définitions des sommets et des itérateurs sur ces sommets sont analogues à ceux
présentés pour les faces.
Le niveau le plus bas est celui qui représente la mémoire ou l’espace de stockage.
La taille des pointeurs utilisés pour représenter toutes les références de la triangulation
(sommets et faces) est un octet. Ce qui implique de construire des structures de données
reflétant cette réalité.
On distingue à ce stade les types et les instances suivants :
– Les sommets de base : les sommets où les références de faces incidentes sont codées
sur un octet, et contiennent évidemment l’information géométrique (les points).
– Les faces de base : les structures où les champs (sommets et faces) sont codés sur un
octet chacun. Ces faces ne peuvent avoir une existence en soi, parce que les champs
de voisins ne déréférencent pas toujours des triangles, mais peuvent être des indices
dans le même tableau dont la case correspondante contient la vraie référence du
voisin en question.
– Les tableaux de sommets et de faces : la triangulation est subdivisée en sous-triangulations.
96
5.7. RÉSULTATS ET IMPLÉMENTATION
5.7.1 Expérimentations
Les résultats dans le tableau 5.1 sont obtenus en calculant une triangulation de Delau-
nay d’un million de points, générés aléatoirement suivant une loi uniforme. La triangulation
est calculée en utilisant l’algorithme de la bascule d’arête décrits dans la section 1.2.2. Les
résultats présentent plusieurs paramètres :
– Le nombre de sous-triangulations dans la triangulation.
– Le facteur de redondance des sommets. Ce facteur est le ratio entre le nombre de
points de la triangulation, et la somme des sommets des sous-triangulations. Et
donne une estimation du nombre de sommets partagés entre les sous-triangulations.
– Le nombre de subdivisions (1) : ce nombre est égal au nombre de fois ou une sous-
triangulation est subdivisée parce qu’elle a atteint la taille maximale.
– Le nombre de bascules d’arêtes établis pendant la construction de la triangulation.
– Le nombre de subdivisions (2) : ce nombre est égal au nombre de fois ou une sous-
triangulation est subdivisée à partir d’une face d’étranglement pour permettre la
bascule d’arête.
– Le nombre de subdivisions (3) : ce nombre est égal au nombre de fois ou une sous-
triangulation est subdivisée parce qu’elle a atteint la taille maximale pour permettre
la bascule d’arête.
– Le taux de remplissage (1) : la moyenne des taux de remplissage des tableaux de
sommets.
– Le taux de remplissage (2) : la moyenne des taux de remplissage des tableaux de
triangles.
– Le gain en termes de tailles de structures, qui est le facteur entre les deux tailles de
structures précédentes.
97
CHAPITRE 5. CODAGE EN SOUS-TRIANGULATIONS
Tab. 5.1: Statistiques d’utilisation de la mémoire 5.7.1. Ces résultats sont obtenus sur
une machine 32 bits Processor Genuine Intel(R) CPU T2300 1.66 GHz Core Duo avec
2 Go de mémoire vive. Les coordonnées sont en format flottant et représentées sur 4 octets
chacune. Le gain dans le tableau est exprimé par rapport au coût de représentation d’une
représentation à base de triangles explicite.
98
5.7. RÉSULTATS ET IMPLÉMENTATION
54675 42299
sous-triangulations sous-triangulations
41533
sous-triangulations
43738 47592
sous-triangulations sous-triangulations
Fig. 5.4: Représentation graphique des gains apportés par l’utilisation des sous-
triangulations pour représenter les triangulations. Les rectangles noirs représentent l’espace
mémoire alloué par la structure de base. Les rectangles verts représente l’espace mémoire
alloué par la structure à sous-triangulations.
99
CHAPITRE 5. CODAGE EN SOUS-TRIANGULATIONS
5.8 Conclusion
Ce chapitre a été consacré à la représentation des triangulations en utilisant des sous-
triangulations, pour pouvoir bénéficier de l’utilisation des références locales sur un nombre
réduit de bits. La stratégie de mise à jour de la triangulation après l’application de chaque
opération de mise à jour détermine les taux de remplissage des différents tableaux. Ceci
détermine le gain apporté par la méthode. Ces stratégies doivent maximiser le nombre
de sommets internes tout en réduisant les tailles des frontières entre les différentes sous-
triangulations. Cette technique peut être combinée avec d’autres techniques tel que le
codage par différences. En effet, l’allocation statique des tableaux des sous-triangulations
fournit une plage d’étiquettes limitée. Les objets peuvent alors être insérés tout en impo-
sant un étiquetage cohérent minimisant les différences entre les sommets voisins.
100
Conclusion
101
Conclusion générale
Cette thèse a été entamée dans le but de concevoir des solutions pratiques et exploi-
tables en réponse aux problèmes de limitations d’espace mémoire lors de la manipulation
de grandes triangulations. Les travaux entrepris ont suivi trois axes :
1. L’utilisation des indices comme références, pour économiser un nombre de bits sur
chaque référence utilisée par la structure.
2. La définition des catalogues stables pour représenter les triangulations, dans le but de
réduire le nombre des références multiples vers les mêmes sommets, et les références
réciproques entre voisins.
La première idée pour réduire la taille de l’espace mémoire, est de limiter aux maximum
le gaspillage des bits, en représentant les références des objets de la triangulation par des
indices occupant exactement le nombre de bits nécessaire. Cette idée, bien que triviale sur
le plan théorique, nécessite une attention particulière lors de sa mise en œuvre.
Le coût d’une telle structure s’est avéré très élevé en termes de temps d’exécution.
Ceci est dû à l’accès répétitif aux cases mémoires contenant les informations relatives aux
sommets et aux objets géométriques. Cet accès est réalisé à chaque écriture, et à chaque
lecture pour garder l’intégrité et la cohérence entre les variables manipulées par l’utilisateur
et les données réelles en mémoire.
L’implantation à été conçue suivant le schéma de la bibliothèque CGAL, en gardant
toutes les fonctionnalités et l’interface proposée par les triangulations de CGAL. Cette
contrainte a limité la marge pour les optimisations en termes de temps de calcul. Cepen-
dant, le gain en mémoire n’est pas négligeable, surtout pour les machines à 64 bits.
103
CONCLUSION
L’idée des catalogues stables est de regrouper les triangles en micro-triangulations. Ces
micro-triangulations sont des structures redondantes, et la triangulation est alors conçue
comme une subdivision de ces structures. Ces micro-triangulations sont définies dans des
catalogues qui doivent être stables pour les opérations utilisées par la structure de données
afin de garantir la construction et la mise à jour de la triangulation.
L’utilisation des catalogues stables permet d’éliminer quelques références vers les som-
mets et entre les voisins. Le nombre minimal de triangles par micro-triangulation détermine
le gain en mémoire. Les catalogues ayant un nombre élevé de triangles par micro-triangulation
réalisent des gains très intéressants.
Cependant, cette décomposition induit un niveau d’indirection supplémentaire, lorsque
les triangles sont consultés, et/ou modifiés. Les résultats sont prometteurs, les gain pra-
tiques sont conformes aux estimations de calculs établis suivant certaines contraintes. Ces
gains sont obtenus tout ayant une augmentation limitée du temps de calcul.
La décomposition en sous-triangulations
Dans cette partie, les références ne sont plus des pointeurs absolus sur la taille du
mot mémoire de la machine, mais des indices sur un nombre de bits multiples de 8. Ce
qui nous épargne quelques bits pour chaque référence. D’un point de vue architectural, la
triangulation est décomposée en sous-triangulations de tailles moyennes.
Les références entre voisins ne sont donc pas de même nature. Les références entre
différentes sous-triangulations nécessitent un traitement spécifique. Ces références globales
sont stockées dans la même structure utilisée pour stocker les faces de la sous-triangulation.
Plusieurs facteurs ont été étudiés pour améliorer les taux de remplissages des sous-
triangulations, qui sont liés au gain apporté par la méthode. Le passage le plus important
est la stratégie de décomposition d’une sous-triangulation en plusieurs sous-triangulations.
Le gain est amélioré aussi par des heuristiques visant à maximiser le nombre de som-
mets internes aux sous-triangulations. Ces heuristiques sont appliquées sur les bords des
sous-triangulations en appliquant des transferts de triangles entre les sous-triangulations
voisines.
Travaux futurs
Le sujet n’est toujours pas traité en entier, surtout que les tailles de triangulations
ne cessent d’augmenter. Des solutions pratiques ont été proposées dans cette thèse, et
méritent un suivi avec attention.
104
CONCLUSION
105
CONCLUSION
106
Bibliographie
107
Bibliographie
[Alex 01] A. Alexandrescu. Modern C++ Design : Generic Programming and Design
Patterns Applied. Addison-Wesley Professional, February 2001.
[Alli 01a] P. Alliez and M. Desbrun. “Progressive Compression for Lossless Trans-
mission of Triangle Meshes”. In : SIGGRAPH ’01 : Proceedings of the
28th annual conference on Computer graphics and interactive techniques,
pp. 195–202, ACM Press, New York, NY, USA, 2001.
[Alli 01b] P. Alliez and M. Desbrun. “Valence-Driven Connectivity Encoding for 3D
Meshes”. Computer Graphics Forum, Vol. 20, No. 3, 2001.
[Alli 05] P. Alliez and C. Gotsman. “Recent Advances in Compression of 3D Me-
shes”. In : N. A. Dodgson, M. S. Floater, and M. A. Sabin, Eds., Advances
in Multiresolution for Geometric Modelling, pp. 3–26, Springer, Berlin, Hei-
delberg, 2005.
[Arge 04] L. Arge, G. S. Bordal, and R. Fagerberg. Handbook Of Data Structures
And Applications, Chap. Cache-Oblivious Data Structures. Chapman &
Hall/Crc Computer and Information Science, Chapman & Hall/CRC, 2004.
[Atte 03] M. Attene, B. Falcidieno, M. Spagnuolo, and J. Rossignac. “SwingWrap-
per : Retiling Triangle Meshes for Better Edgebreaker Compression”. ACM
Trans. Graph., Vol. 22, No. 4, pp. 982–996, 2003.
[Baja 99] C. L. Bajaj, V. Pascucci, and G. Zhuang. “Single Resolution Compression of
Arbitrary Triangular Meshes with Properties”. In : DCC ’99 : Proceedings
of the Conference on Data Compression, p. 247, IEEE Computer Society,
Washington, DC, USA, 1999.
[Baum 72] B. G. Baumgart. “Winged Edge Polyhedron Representation”. Tech. Rep.,
Stanford University, Stanford, CA, USA, 1972.
[Baum 74] B. G. Baumgart. Geometric Modeling for Computer Vision. PhD thesis,
Stanford University, USA, August 1974.
[Baum 75] B. G. Baumgart. “Winged-Edge Polyhedron Representation for Computer
Vision”. In : National Computer Conference, May 1975.
109
BIBLIOGRAPHIE
[Blan 06] D. K. Blandford. Compact Data Structures with Fast Queries. PhD thesis,
Carnegie Mellon University, USA, February 2006.
[Bois 02] J.-D. Boissonnat, O. Devillers, S. Pion, M. Teillaud, and M. Yvinec. “Tri-
angulations in CGAL”. Computational Geometry Theory and Applications,
Vol. 22, No. 1-3, pp. 5–19, May 2002.
[Bond 76] J. A. Bondy. Graph Theory With Applications. Elsevier Science Ltd, 1976.
[Bose 97] P. Bose and G. Toussaint. “Characterizing and Efficiently Computing Qua-
drangulations of Planar Point Sets”. Computer Aided Geomtric Design,
Vol. 14, No. 8, pp. 763–785, 1997.
[Brey 97] U. Breymann. Designing Components with the C++ STL : A New Approach
to Programming. Addison-Wesley Longman Publishing Co., Inc., Boston,
MA, USA, 1997.
[Camp 98] S. Campagna, L. Kobbelt, and H.-P. Seidel. “Directed edges A scalable
representation for triangle meshes”. Journal of Graphic Tools, Vol. 3, No. 4,
pp. 1–11, 1998.
110
BIBLIOGRAPHIE
111
BIBLIOGRAPHIE
112
BIBLIOGRAPHIE
113
BIBLIOGRAPHIE
[Halb 99] Y. Halbwachs and Ø. Hjelle. Advances in Software Tools for Scientific Com-
puting, Chap. Generalized maps in geological modeling : Object-oriented
design of topological kernels, pp. 339–356. Vol. 10 of Lecture Notes in
Computational Science and Engineering, Langtangen, Hans P. ; Bruaset,
Are M. ; Quak, Ewald (Eds.). Springer-Verlag, editors, 1999.
[He 99] X. He, M.-Y. Kao, and H.-I. Lu. “Linear-Time Succinct Encodings of Planar
Graphs via Canonical Orderings”. SIAM J. Discret. Math., Vol. 12, No. 3,
pp. 317–325, 1999.
[Heig 83] E. Heighway. “A Mesh Generator for Automatically Subdividing Irregular
Polygons into Quadrilaterals”. IEEE Transactions on Magnetics, Vol. 19,
No. 6, pp. 2535–2538, November 1983.
[Hjel 00] Ø. Hjelle. “A Triangulation Template Library (TTL) : Generic Design
of Triangulation Software”. Tech. Rep. STF42 A00015, SINTEF Applied
Mathematics, Oslo, 2000.
[Hjel 06] Ø. Hjelle and M. Dæhlen. Triangulations and Applications (Mathematics
and Visualization). Springer-Verlag New York, Inc., Secaucus, NJ, USA,
2006.
[Hopp 96] H. Hoppe. “Progressive Meshes”. In : SIGGRAPH ’96 : Proceedings of the
23rd annual conference on Computer graphics and interactive techniques,
pp. 99–108, ACM Press, New York, NY, USA, 1996.
[Isen] M. Isenburg. Compression and Streaming of Polygon Meshes. PhD thesis,
University of North Carolina at Chapel Hill, Chapel Hill, NC, USA.
[Isen 00a] M. Isenburg. “Triangle Fixer : Edge-based Connectivity Compression”. In :
EWCG’00 : Proceedings of the 16th European Workshop on Computational
Geometry, pp. 18–23, 2000.
[Isen 00b] M. Isenburg and J. Snoeyink. “Face Fixer : Compressing Polygon Meshes
with Properties”. In : SIGGRAPH ’00 : Proceedings of the 27th annual
conference on Computer graphics and interactive techniques, pp. 263–270,
ACM Press/Addison-Wesley Publishing Co., New York, NY, USA, 2000.
[Isen 02a] M. Isenburg. “Compressing Polygon Mesh Connectivity with Degree Dua-
lity Prediction”. In : Proceedings of Graphics Interface 2002, Calgary, Al-
berta, Canada, 27-29 May 2002, pp. 161–170, 2002.
[Isen 02b] M. Isenburg and P. Alliez. “Compressing Hexahedral Volume Meshes”. In :
PG ’02 : Proceedings of the 10th Pacific Conference on Computer Graphics
and Applications, p. 284, IEEE Computer Society, Washington, DC, USA,
2002.
114
BIBLIOGRAPHIE
[Isen 02c] M. Isenburg and P. Alliez. “Compressing Polygon Mesh Geometry with
Parallelogram Prediction”. In : VIS ’02 : Proceedings of the conference on
Visualization ’02, IEEE Computer Society, Washington, DC, USA, 2002.
[Isen 03a] M. Isenburg and P. Alliez. “Compressing Hexahedral Volume Meshes”.
Graph. Models, Vol. 65, No. 4, pp. 239–257, 2003.
[Isen 03b] M. Isenburg and S. Gumhold. “Out-of-Core Compression for Gigantic Po-
lygon Meshes”. ACM Trans. Graph., Vol. 22, No. 3, pp. 935–942, 2003.
[Isen 03c] M. Isenburg, P. Lindstrom, S. Gumhold, and J. Snoeyink. “Large Mesh
Simplification using Processing Sequences”. In : VIS ’03 : Proceedings of
the 14th IEEE Visualization 2003 (VIS’03), p. 61, IEEE Computer Society,
Washington, DC, USA, 2003.
[Isen 05a] M. Isenburg and P. Lindstrom. “Streaming Meshes”. In : Proceedings of
the 16th IEEE Visualization Conference (VIS 2005), 23-28 October 2005,
Minneapolis, MN, USA, p. 30, IEEE Computer Society, 2005.
[Isen 05b] M. Isenburg, P. Lindstrom, and J. Snoeyink. “Streaming Compression of
Triangle Meshes”. In : SGP ’05 : Proceedings of the third Eurographics
symposium on Geometry processing, p. 111, Eurographics Association, Aire-
la-Ville, Switzerland, Switzerland, 2005.
[Isen 05c] M. Isenburg and J. Snoeyink. “Graph Coding and Connectivity Com-
pression”. In : Proceedings of the China-Japan Joint Conference on Dis-
crete Geometry, Combinatorics and Graph Theory (CJCDGCGT) Nankai
University, Tianjin, China ; Northwestern Polytechnical University, Xi’an,
China and Tokai University, Japan, November 18-24 2005.
[Isen 06a] M. Isenburg, P. Lindstrom, S. Gumhold, and J. Shewchuk. “Streaming
Compression of Tetrahedral Volume Meshes”. In : GI ’06 : Proceedings
of Graphics Interface 2006, pp. 115–121, Canadian Information Processing
Society, Toronto, Ont., Canada, Canada, 2006.
[Isen 06b] M. Isenburg, Y. Liu, J. Shewchuk, and J. Snoeyink. “Streaming Computa-
tion of Delaunay Triangulations”. In : SIGGRAPH ’06 : ACM SIGGRAPH
2006 Papers, pp. 1049–1056, ACM Press, New York, NY, USA, 2006.
[ISOIa] ISO/IEC 14772-2 :2004. “Virtual Reality Modeling Language (VRML)”.
International Organisation for Standardisation, Geneva, Switzerland.
[ISOIb] ISO/IEC 14882 :2003. “Programming Languages c++”. International Or-
ganisation for Standardisation, Geneva, Switzerland.
[Kall 01a] M. Kallmann. Object Interaction in Real-Time Virtual Environments. PhD
thesis, Swiss Federal Institute of Technology (EPFL), January 2001. thesis
number 2347.
115
BIBLIOGRAPHIE
[Keel 95] K. Keeler and J. Westbrook. “Short Encodings of Planar Graphs and
Maps”. Discrete Appl. Math., Vol. 58, No. 3, pp. 239–252, 1995.
[Kett 07] L. Kettner. Halfedge Data Structures, CGAL User and Reference Manual.
3.3 Ed., 2007.
[Kett 99] L. Kettner. “Using Generic Programming for Designing a Data Structure
for Polyhedral Surfaces”. Computational Geometry Theory and Applica-
tions, Vol. 13, No. 1, pp. 65–90, 1999. Elsevier Science Publishers B. V.
Amsterdam, The Netherlands.
[King 99] D. King and J. Rossignac. “Guaranteed 3.67V bit Encoding of Planar
Triangle Graphs”. In : Proceedings of the Canadian Conference on Compu-
tational Geometry, 1999.
[Lavo 05] G. Lavoué. Compresson de surfaces, basée sur la subdivision inverse, pour la
transmission bas débit et la visualisation progressive. PhD thesis, Université
Claude Bernard Lyon 1, France, December 2005.
[Lee 00] E.-S. Lee and H.-S. Ko. “Vertex Data Compression for Triangular Meshes”.
In : PG ’00 : Proceedings of the 8th Pacific Conference on Computer Gra-
phics and Applications, p. 225, IEEE Computer Society, Washington, DC,
USA, 2000.
116
BIBLIOGRAPHIE
117
BIBLIOGRAPHIE
118
BIBLIOGRAPHIE
119
BIBLIOGRAPHIE
120
Index
121
Index
123
INDEX
124
INDEX
arête orientée, 21
compacte, 15, 35
DCEL, 17
face-arête, 19
G-maps, 20
quad-edge, 18
sommet-arête, 19
succincte, 15
taille, 85
taux de remplissage, 83
template, 25
Template Triangulations Library, 26
théorème de Petersen, 64
topologie, 14, 27
triangulation, 43
dimension, 44
micro-triangulation, 39, 59
mini-triangulation, 39, 60
représentation par indices, 47
validité, 44
triangulation de Delaunay, 12
Triangulation Data Structure, 43
types abstraits de données, 14
VRMLR, 34
Kevin Weiler, 18
125