École de technologie supérieure
Génie de la production automatisée
GPA665
Structures de données et algorithmes
Laboratoire 3
Décomposition d’un polygone concave en polygones convexes
Responsable du cours : Mohamed Cheriet, ing., Ph. D.
Rédaction du laboratoire : Jean-Christophe Demers
Révision et barème de correction : Yan Levasseur & Mathieu Binette
Temps alloué pour ce laboratoire : 4 périodes de laboratoire
Résumé
En trois comme en deux dimensions, la gestion de formes à géométrie complexes
nécessite beaucoup de manipulations mathématiques. Souvent, ces manipulations seront
simplifiées par la décomposition d’une forme concave en plusieurs formes convexes, pour
lesquelles les algorithmes d’optimisation sont rapides et efficaces. Le graphisme et la
planification de trajectoire d’un robot mobile sont des exemples où la décomposition en
formes convexes est très avantageuse.
Ce laboratoire vous donnera l’occasion de réaliser un algorithme simple de décomposition
en formes convexes. Ce sera l’occasion de mettre en pratique les notions relatives à
l’utilisation du TDA arbre. De plus, par ce laboratoire, vous expérimenterez des notions
telles que les types structurés, types énumérés, pointeurs, tableaux dynamiques,
récursivité, et l’utilisation de structures de données et de fonctions existantes.
Il vous incombera donc de développer un algorithme efficace pour résoudre le problème
concret de la concavité d’une forme en adoptant une méthode de programmation
rigoureuse qui tient compte des concepts fondamentaux de qualité logiciel.
GPA665 STRUCTURES DE DONNEES ET ALGORITHMES AUTOMNE 2002
LABORATOIRE 3 2 / 13
Énoncé du problème
La description d’une entité par un polygone apporte des solutions à une multitude de
problèmes de différentes natures. Ainsi, il est pertinent de développer une panoplie
d’outils algorithmiques et géométriques servant à la manipulation de polygones. Or, il
existe plusieurs propriétés particulières aux polygones convexes qui permettent le
développement d’outils puissants, efficaces et uniques, qui sont très lourds ou simplement
irréalisables pour le cas de polygones concaves.
Pour cette raison, il est souvent préférable de diviser un polygone concave en plusieurs
polygones convexes et ainsi pouvoir utiliser les différentes propriétés de ces polygones
particuliers. Malgré tout, la décomposition d’un polygone n’est pas une tâche triviale et
demande l’élaboration d’un algorithme d’une certaine complexité.
Dans ce laboratoire vous aurez à implanter une solution fonctionnelle à ce problème.
Finalement, la nature récursive du problème sera exploitée.
Définitions d’un polygone convexe
Soit P, un polygone formé de n sommets et n segments. P est convexe s’il répond à la
définition suivante (sinon P est concave) :
il est impossible de tracer une droite à l’intérieur du polygone qui traverse le
contour de ce dernier.
Une autre définition utile est :
tous les angles intérieurs du polygone sont inférieurs à 180°.
142,1°
121,5°
77,9°
131,6°
125,8°
121,0°
121,5°
77,9°
131,6°
44,0°
52,8°
292,2°
Polygone convexe Polygone concave
Sommets convexes
Sommets concaves
Segments défini par deux sommets
Figure 1 : Exemples de polygone convexe et de polygone concave
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
1
.
L’algorithme de décomposition
2
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
3
:
1
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 !
2
L’algorithme qui est décrit ici est la version simplifiée, sans optimisation.
GPA665 STRUCTURES DE DONNEES ET ALGORITHMES AUTOMNE 2002
LABORATOIRE 3 4 / 13
a. le sommet Si+d est un sommet convexe (ceci implique que le polygone formé par les
trois sommets
didii SSS 2
est un polygone convexe);
b. le sommet Si+3d est à l’extérieur (la frontière étant incluse) du polygone formé par les
sommets
didii SSS 2
;
c. le segment formé par les sommets Si et Si+2
d n’entre pas en collision avec le
polygone à scinder.
ii. On parcourt les sommets du polygone à partir de Si+j
d (j = 2) jusqu’à ce qu’on atteigne un
sommet Si+j
d qui correspond à l’un des cinq critères suivants :
a. Si+j
d est un sommet correspondant à une concavité;
b. le sommet Si+(j+1)
d est à l’intérieur (la frontière étant exclue) du polygone formé par
les sommets Si à Si+j
d;
c. le segment formé par les sommets Si+(j+1)
d et Si entre en collision avec le polygone à
scinder;
d. le polygone créé par les sommets Si à Si+(j+1)
d est concave;
e. le polygone créé par les sommet Si à Si+(j+1)
d entre en collision avec un des
sommets restants du polygone à scinder.
iii. On scinde le polygone concave P en deux polygones : le polygone convexe Pconvexe
formé par les sommets Si à Si+j
d et le polygone indéfini Pindéfini formé par les sommets
Si+(j+1)
d à Si (en respectant la définition circulaire des sommets décrivant les polygones).
iv. On recommence récursivement le processus avec Pindéfini
Voici un exemple pas à pas de cet algorithme pour le polygone suivant (les nombres
indiquent l’ordre dans lequel sont définis les sommets) :
1
2
3
4
5
67
8
9
10
11
12 13
14
Sommets convexes
Sommets concaves
Segments défini par deux sommets
Figure 2 : Polygone concave
3
d est la direction du voisin considéré, c’est-à-dire 1 ou -1. Pour ce laboratoire on simplifie l’algorithme en posant
d = 1.
GPA665 STRUCTURES DE DONNEES ET ALGORITHMES AUTOMNE 2002
LABORATOIRE 3 5 / 13
Polygone convexe résultat de l’appel
récursif précédent
Polygone indéfinie résultat de l’appel
récursif précédent
Description de l’algorithme pour
passer de l’appel récursif courant
au suivant
1
2
3
4
5
67
8
9
10
11
12 13
14
Polygone initial.
nc = 4
Si = 2
j = 2 défini par la contrainte 2c
1
2
3
1
2
34
5
6
7
8
910
11
12
13
Ces polygones sont le résultat de
l’algorithme appliqué au polygone
initial après le premier appel de la
fonction de décomposition.
nc = 4
Si = 1
j = 2 défini par la contrainte 2c
1
2
3
12
3
4
78
9
5
6
10
11
12
nc = 4
Si = 1
j = 3 défini par la contrainte 2a
12
3
4
7
8
9
10
1
45
6
2
3
nc = 4
Si = 3
j = 4 défini par la contrainte 2d
5
23
4
1
1
2
3
4
5
6
7
nc = 3
Si = 3
j = 2 défini par la contrainte 2a
1 / 13 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!