f f
Fig. 5.3: La sous-triangulation rouge est d´ecompos´ee en deux sous-triangulations (verte et bleue) en partant de la face d’´etranglement f. Apr`es la d´ecomposition, la face f n’est plus une face d’´etranglement.
5.4 Strat´egies de d´ecomposition
Lorsque la sous-triangulation atteint la taille maximale autoris´ee, elle doit ˆetre sub-divis´ee en deux parties. Pour ce faire, on d´efinit un ensemble de faces `a supprimer de la sous-triangulation et `a ins´erer dans la nouvelle sous-triangulation.
5.4.1 Une d´ecomposition progressive
Pour d´ecomposer une sous-triangulation t en deux sous-triangulations, on parcourt l’arbre couvrant de la sous-triangulation, et on transf`ere les triangles un par un `a la nouvelle sous-triangulation. L’arbre couvrant n’est pas construit, le parcours est implicite et direct. Le sch´ema g´en´eral pour une d´ecomposition progressive est d´ecrit dans le pseudocode5.1.
Les pseudocodes5.2et5.3d´ecrivent les d´ecompositions d’une sous-triangulation t sui-vant cette strat´egie en utilisant deux parcours diff´erents de la triangulation (en profondeur et en largeur, en partant du sommet). La proc´edure cr´ee une nouvelle sous-triangulation, et supprime les triangles de l’ancienne sous-triangulation l’un apr`es l’autre, en les ins´erant au fur et `a mesure dans la nouvelle.
Pour ce faire, une face du bord doit ˆetre d´esign´ee pour commencer la recherche, le choix de cette face peut ˆetre al´eatoire, ce qui m`ene `a des d´ecompositions diff´erentes. On peut envisager plusieurs heuristiques pour s´electionner la premi`ere face, sur le bord :
– Choisir la face extrˆeme suivant l’axe d’allongement de la triangulation (c’est ce qui est choisi dans l’impl´ementation).
CHAPITRE 5. CODAGE EN SOUS-TRIANGULATIONS
Subdiviser(sous-triangulation t) d´ebut
// initialisation
triangle f = t.s´electionner une face ;
sous-triangulation t bis = cr´eer une nouvelle sous-triangulation() ; liste<triangle> liste t ;
// Remplir la nouvelle sous-triangulation
tant que(taille(t bis) < taille(t)) transf´erer(f, t, t bis);
si(liste t.est vide)
arrˆeter la d´ecomposition(); fin si
f = liste t.suivant() ; fin tant que
fin.
Pseudo 5.1: Algorithme de d´ecomposition progressive de sous-triangulations. Subdiviser 2(sous-triangulation t)
d´ebut
// initialisation
triangle f = t.s´electionner une face du bord() ;
sous-triangulation t bis = cr´eer une nouvelle sous-triangulation() ; liste<triangle> liste t ;
// Remplir la nouvelle sous-triangulation
tant que(taille(t bis) < taille(t)) transf´erer(f, t, t bis);
si(triangle gauche(f) est dans t)
liste t.ins´erer `a la fin(triangle gauche(f)) ; fin si
si(triangle droit(f) est dans t)
liste t.ins´erer `a la fin(triangle droit(f)) ; fin si
transf´erer(f, t, t bis); f = liste t.d´ebut() ; fin tant que
fin.
Pseudo 5.2: Algorithme de d´ecomposition de sous-triangulations par parcours en largeur d’abord.
5.4. STRAT´EGIES DE D´ECOMPOSITION
Subdiviser 2(sous-triangulation t) d´ebut
// initialisation
triangle f = t.s´electionner une face du bord() ;
sous-triangulation t bis = cr´eer une nouvelle sous-triangulation() ; liste<triangle> liste t ;
// Remplir la nouvelle sous-triangulation
tant que(taille(t bis) < taille(t)) transf´erer(f, t, t bis);
si(triangle droit(f) est dans t)
liste t.ins´erer au d´ebut(triangle droit(f)) ; fin si
si(triangle gauche(f) est dans t)
liste t.ins´erer au d´ebut(triangle gauche(f)) ; fin si
f = liste t.d´ebut() ; fin tant que
fin.
Pseudo 5.3: Algorithme de d´ecomposition de sous-triangulations par parcours en profon-deur d’abord.
CHAPITRE 5. CODAGE EN SOUS-TRIANGULATIONS
5.4.2 Un parcours par balayage
Dans le but d’obtenir des sous-triangulations ´equilibr´ees, un parcours par balayage pour extraire les triangles `a ins´erer dans la nouvelle sous-triangulation peut ˆetre plus efficace. La triangulation est parcourue de gauche `a droite ou de haut en bas (suivant l’axe le plus long) par une ligne, et `a chaque fois que la ligne franchit un triangle, ce triangle est transf´er´e `a la nouvelle sous-triangulation. Cette technique est analogue `a plusieurs algorithmes en g´eom´etrie algorithmique comme pour le calcul de la triangulation de Delaunay, ou le calcul des arrangements de segments[Chen 96].
5.4.3 L’ajustement du bord d’une sous-triangulation
La d´ecomposition progressive `a partir d’une face sur le bord ne conduit pas toujours `a une d´ecomposition ´equitable. En effet, la d´ecomposition ne s’arrˆete pas toujours lorsque les deux sous-triangulations sont de tailles ´equivalentes, mais peut s’arrˆeter pr´ematur´ement. Ce cas se produit quand le parcours se trouve sur une face d’´etranglement dans la sous-triangulation, et r´esulte souvent une sous-triangulation allong´ee ayant un bord tr`es large, ce qui induit un taux de remplissage tr`es faible. Les r´esultats obtenus ainsi peuvent ˆetre am´elior´es en appliquant un traitement suppl´ementaire.
Ce traitement vise deux buts :
– Maximiser l’´equilibre de taille entre les sous-triangulations.
– Minimiser au maximum la taille du bord de la sous-triangulation, c’est `a dire le nombre d’arˆetes partag´ees 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ˆetes partag´ees avec la mˆeme sous-triangulation, ce triangle est transf´er´e vers cette sous-triangulation. Ceci permet de maximiser le nombre de ses sommets internes, et minimiser en mˆeme temps la taille du bord de la sous-triangulation courante.
Cette op´eration est r´ealis´ee avant chaque subdivision. Si ce traitement n’aboutit pas `a une r´eduction de la taille de la triangulation, la subdivision aura lieu. Cette ´etape d’optimi-sation de la forme de la sous-triangulation peut ˆetre r´ealis´ee aussi apr`es la d´ecomposition pour les deux sous-triangulations : l’ancienne et la nouvelle.