
GPA665 STRUCTURES DE DONNEES ET ALGORITHMES AUTOMNE 2002
LABORATOIRE 3 3 / 13
Nature récursive du problème et structure de données
Intuitivement, il est facile de décomposer un polygone concave en deux sous-polygones
dont un est convexe et l’autre indéfini. Développer un tel algorithme de décomposition
peut être très pratique puisque la nature récursive du problème apparaît dès le départ. En
effet, il suffit d’utiliser simplement ce même algorithme de décomposition sur le
sous-polygone indéfini si ce dernier est concave. De cette façon, en appliquant
récursivement cet algorithme de décomposition sur tous les sous-polygones indéfinis qui
sont concaves, on obtient une décomposition complète du polygone concave initial en
plusieurs polygones convexes.
Puisque cette approche de décomposition donne pour chaque sous-polygone concave
deux sous-polygones pour le décrire, on utilise un arbre binaire permettant de représenter
cette structure de données. Dans ce type d’arbre, chacun des noeuds correspond à un
polygone. Ainsi, la racine correspond au polygone concave initial qui est décrit par toutes
les feuilles de l’arbre (correspondant aux sous-polygones convexes de l’arbre). Il est
intéressant de remarquer que l’arbre obtenu n’est aucunement équilibré puisque ce
dernier possède pour chaque noeud un enfant avec un seul et unique descendant.
Néanmoins, cette représentation d’un polygone concave par des polygones convexes
reste performante et très bien adaptée étant donné la nature récursive du problème.
La figure 4 montre un exemple du résultat obtenu par une telle approche.
Algorithme de décomposition
Il existe plusieurs approches pour décomposer un polygone concave en polygones
convexes. L’approche présentée ici offre certaines caractéristiques intéressantes.
Premièrement elle permet une solution élégante en utilisant l’approche récursive
précédemment expliquée. Deuxièmement, elle permet une décomposition du polygone
initiale en sous-polygones de n sommets et non pas des polygones triangulaires formés
de 3 sommets uniquement (comme plusieurs autres algorithmes le font). De cette façon,
le nombre de sous-polygones convexes nécessaires à la représentation du polygone
concave peut être beaucoup moindre. Finalement, il est possible d’optimiser l’algorithme
de façon à décomposer le polygone concave en un nombre optimal de sous-polygones
convexes. Cette optimisation se fait en prenant, pour chaque appel récursif, le
sous-polygone convexe qui minimise le nombre de sommets du sous-polygone indéfini.
Cette optimisation n’est pas demandée dans le cadre de ce travail
.
L’algorithme de décomposition
d’un polygone concave en sous-polygones convexes est
réalisé en 2 étapes principales :
1. On identifie tous les sommets Si correspondant aux concavités Ci du polygone P.
2. On détermine si le polygone est concave par le nombre de sommets correspondant aux
concavités (nc). Si nc = 0 alors le polygone est convexe et on arrête le processus, sinon on
divise le polygone concave en deux polygones : un polygone convexe et un polygone indéfini.
Cette division est la partie la plus délicate du travail à faire et se fait en 4 étapes.
i. On identifie un sommet Si pour lequel il existe deux voisins consécutifs, Si+d et Si+2d qui
respectent les trois critères suivants
:
Les étudiants qui trouveront la façon de faire cette optimisation et qui prendront le temps de l’implanter se
mériteront une évaluation plus clémente !
L’algorithme qui est décrit ici est la version simplifiée, sans optimisation.