• Aucun résultat trouvé

Strat´ egies de d´ ecomposition

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.