Triangulation
Triangulation
Triangulation
Une triangulation d’une région polygonale du plan est une décomposition de cette région
en triangles dont les sommets sont ceux du bord de la région. Une triangulation permet
souvent de résoudre plus facilement des problèmes portant sur la région qu’elle triangule.
Le problème du gardiennage d’une galerie d’art en est un bel exemple.
Au début du XXe siècle N. J. Lennes montre de manière constructive que tout polygone
simple admet une triangulation [Len11]. Cette construction fournit de fait un algorithme
de complexité quadratique en fonction du nombre de sommets. Du temps de l’émergence
de la géométrie algorithmique, Garey et al. (1978) ont proposé un algorithme de com-
plexité O(n log n) pour trianguler un polygone à n côtés. Après diverses améliorations
(cf. notes historiques du livre de [dBCvKO08]), Bernard Chazelle montre en 1991 qu’un
polygone simple peut être triangulé en temps linéaire. L’algorithme de Chazelle [Cha91]
est réputé très complexe. Une version plus simple et randomisée est décrite par Amato
et al. [AGR01].
Le problème de la triangulation de l’intérieur d’un polyèdre dans R3 est beaucoup plus
compliqué. Contrairement au cas bidimensionnel le nombre de tétraèdre d’une triangula-
tion d’un polyèdre (même convexe) à n sommets peut varier suivant la triangulation. De
plus, tous les polyèdres ne sont pas triangulables, à moins d’ajouter des sommets intérieurs
(dits de Steiner), comme le montre le cas du polyèdre de Schönhardt sur la figure 3.1. Ce
polyèdre est obtenu à partir d’un prisme de base triangulaire en tournant légèrement le
triangle supérieur par rapport au triangle inférieur. Du coup, les faces verticales du prisme
(des quadrilatères) ne sont plus planes et il faut ajouter une diagonale pour trianguler
Figure 3.1 – La face supérieure du prisme à base triangulaire de gauche est légèrement
pivotée pour obtenir le polyèdre de Schönhardt, à droite.
42
Notes Géométrie Algorithmique. December 3, 2014. Francis Lazarus. 43
3.1 Existence
Définitions Une ligne polygonale de sommets (s1 , . . . , sn ) est la suite de segments
(s1 s2 , . . . , sn−1 sn ). Cette ligne polygonale est fermée si s1 = sn ; elle est simple si les
sommets sont deux à deux distincts et si les intérieurs de ses segments sont disjoints
des sommets et disjoints entre eux. Un polygone est une ligne polygonale simple et fer-
mée. On appelle arêtes les segments d’un polygone. Par le théorème de Jordan (version
polygonale), un polygone P sépare le plan en deux régions connexes appelées intérieur
et extérieur de P . Dans ce chapitre, on notera respectivement IntP et extP ces régions
(ce sont des ouverts du plan).
Une diagonale d’un polygone P est un segment dont l’intérieur relatif (i.e. le segment
privé de ses extrémités) est intérieur à P et dont les extrémités sont des sommets de
P . Une triangulation de P est un recouvrement de son intérieur (au sens large, i.e. de
IntP ) par des triangles d’intérieurs disjoints et dont les côtés sont soit des arêtes soit des
diagonales de P .
Lemme 3.1 Tout polygone ayant au moins 4 sommets admet une diagonale.
P
p
r
s
q
On montre par récurrence sur n que toute triangulation d’un polygone à n sommets a
exactement n − 2 triangles et n − 3 diagonales.
Exercice 3.4 La preuve de Lennes pour l’existence d’une triangulation est proche de la
précédente quoique légèrement différente. Soit spq un triangle et soit R un ensemble de
points intérieurs à ce triangle. Montrer qu’il existe r ∈ R tel que rsp ∩ R = {r} (ici rsp
désigne le bord et l’intérieur du triangle). Compléter la preuve de Lennes.
3.2 Algorithmes
Si un polygone P est décrit sous forme d’une liste doublement chaînée de sommets, la
recherche d’une diagonale selon la preuve du lemme 3.1 prend un temps O(n), où n = |P |
est le nombre de sommets de P . On en déduit aisément un algorithme de triangulation
de complexité quadratique. Nous allons voir deux algorithmes plus efficaces.
Théorème 3.5 Il existe un algorithme qui triangule tout polygone à n sommets en temps
O(n log n) et espace O(n).
Nous proposons ci-dessous deux preuves – c’est-à-dire deux algorithmes – pour ce théorème.
Elles sont décrites dans les articles [Cha82, GJPT78].
Théorème 3.6 (du polygon cutting, Chazelle 1982) Soit P un polygone à n som-
mets et soient L et V les listes associées (respectivement des sommets triés selon l’ordre
lexicographique des coordonnées et des paires d’arêtes verticalement visibles). Il existe un
algorithme de complexité O(n) pour calculer une diagonale de P qui coupe P en deux
polygones P1 et P2 tels que
2
|P1 |, |P2 | ≤ d ne + 1.
3
De plus, les listes Pi , Li et Vi relatives à chacun des deux polygones pour i = 1, 2 peuvent
être calculées en temps O(n) également.
On montre dans un premier temps qu’il existe un segment vertical intérieur à P et qui le
coupe en deux polygones de tailles approximativement égales.
T
p
Preuve : Soit a une arête de T . Si une composante C de T − a est telle que |C| < b n3 c
alors il existe une arête b de T telle que
1. ou bien une composante K de T − b vérifie
n
|C| < |K| < b c
3
2. ou bien chaque composante de T − b est de taille au moins b n3 c.
En effet, soit C 0 la composante complémentaire de C dans T − a et x le sommet incident
à C 0 et a. Par les hypothèses sur T , x est de degré d ≤ 2 dans C 0 .
– On ne peut avoir d = 0 car dans ce cas on aurait |C 0 | = 1 > d 2n 3
e, en contradiction
avec n ≥ 2.
– Si d = 1, on choisit pour b l’unique arête incidente x dans C 0 . Alors T − b a une
composante K (de fait C + a) de taille |C| + 1. On se retrouve alors dans le cas 1 ou 2
ci-dessus selon que |C| + 1 est respectivement strictement inférieur ou égal à b n3 c.
– Sinon d = 2. Soient a1 , a2 les deux arêtes incidentes à x dans C 0 et soit C1 (resp. C2 )
la composante de C 0 − a1 (resp. de C 0 − a2 ) qui n’est pas incidente à x. Si |C1 | > d 2n 3
e
alors on se retrouve dans le cas 1 en choisissant b = a1 (et K = C + a + C2 ). De
même en choisissant b = a2 si |C2 | > d 2n 3
e. On peut donc supposer |C1 | ≤ d 2n 3
e et
|C2 | ≤ d 3 e. Puisqu’on ne peut avoir à la fois |C1 | < b 3 c et |C2 | < b 3 c, on a |C1 | ≥ b n3 c
2n n n
Preuve du théorème 3.6 : On sait d’après le lemme 3.7 qu’il existe une verticale dont
les extrémités coupent P en deux lignes polygonales contenant chacune au plus d 2n 3
e
sommets. En parcourant la liste V des paires d’arêtes verticalement visibles on trouvera
Notes Géométrie Algorithmique. December 3, 2014. Francis Lazarus. 47
a
Pc Pd Q0
c Q Cd0
d
Cc0
b
Figure 3.4 – (Gauche) Le polygone P est coupé en deux chaînes Pc et Pd par la paire
(a, b) de segments visibles. (Droite) Une triangulation de la zone Q0 bordée par a, b, Cc0
et Cd0 .
donc nécessairement une paire (a, b) telle que tout segment vertical de visibilité entre les
deux arêtes a et b coupe P comme ci-dessus. Fixons un sommet s de P et indexons les
sommets de P de 0 à n − 1 dans l’ordre direct le long de P à partir de s. À partir de ces
indices on peut calculer en temps constant la longueur de la ligne polygonale entre deux
sommets d’indices i et j : en incluant les deux sommets et en considérant la ligne de i
vers j dans le sens direct, cette longueur vaut j − i + 1 si j ≥ i et n − j + i − 1 sinon. On
peut donc tester en temps constant si une paire d’arêtes convient et de ce fait déterminer
(a, b) en temps linéaire.
Il n’est en général pas possible de relier deux des extrémités de a et de b par une diagonale
car celle-ci peut recouper P . Considérons le quadrilatère Q formé par a, b et les deux
segments c et d reliant les extrémités de a et b situés d’un même côté d’une “verticale
de visibilité” entre a et b. Le quadrilatère Q forme bien un polygone (simple) de par
l’existence d’un segment de visibilité qui sépare c et d. Soit Pc (resp. Pd ) la sous-ligne
polygonale de P bordés par les extrémités de c (resp. de d) et ne contenant ni a ni b.
L’objectif est de calculer une diagonale entre un sommet de Pc intérieur à Q et un sommet
de Pd intérieur à Q de sorte que cette diagonale sépare P comme voulu. Pour cela on
considère l’ensemble Sc et Sd des composantes de P ∩ IntQ qui s’appuient respectivement
sur c et d. On pose Cc = Conv(Sc ) et Cd = Conv(Sd ) (voir figure 3.4, gauche).
Affirmation I : Cc et Cd sont disjointes. De plus, les sommets de Cc (resp. de Cd ) sont
les sommets de Pc (resp. de Pd ).
Preuve de l’affirmation II : Supposons qu’une arête γi de Cc0 ou de Cd0 ne soit pas une
arête de P (et soit donc une diagonale de P ) et que
n
|Γi | ≥ b c + 1.
3
On a alors, en notant Γ0i l’autre chaîne de P joignant les extrémités de γi
– d’une part : |Γi | ≤ max{|Pc |, |Pd |} ≤ d 2n
3
e,
– d’autre part : |Γi | + |Γ0i | = n + 2, d’où |Γ0i | ≤ d 32 ne + 1.
L’affirmation est donc vérifiée en choisissant γi comme diagonale de P .
Supposons maintenant à l’inverse que pour toute arête γi de Cc0 ou de Cd0 on ait
n
|Γi | ≤ b c.
3
On a en particulier
n
|∆1 | = |Γ1 + a| ≤ b c + 1.
3
1. Chazelle utilise un autre argument. Il extrait de Sc une ligne polygonale simple joignant les ex-
trémités de c et dont l’enveloppe convexe est Cc Cette ligne est constituée de composantes de Sc et de
segments de c. Il utilise ensuite l’algorithme de complexité linéaire pour calculer l’enveloppe convexe
d’une ligne polygonale simple.
Notes Géométrie Algorithmique. December 3, 2014. Francis Lazarus. 49
Par ailleurs si pour un certain i ∈ [1, k] on a |∆i | ≤ b n3 c alors δi n’est pas la dernière
diagonale de T (i.e. i < k) et
2
|∆i | < |∆i+1 | ≤ d ne + 1.
3
En effet, on a
n
|∆i+1 | = |∆i + Γi | = |∆i | + |Γi | − 1 ≤ 2b c − 1.
3
Alors que |∆k | ≥ d 23 ne + 1 (faire un raisonnement analogue à la majoration de |∆1 |). On
conclut par récurrence sur k que l’une au moins des diagonales δi vérifie
n 2
b c + 1 ≤ |∆i | ≤ d ne + 1.
3 3
Ceci permet également de confirmer l’affirmation en choisissant δi comme diagonale de
P. 2
pour un certain k > 0. Montrons que C(n) = O(n log n). Soit α tel que 2/3 < α < 1.
Choisissons N assez grand pour que n > N =⇒ d 32 ne + 1 < αn et n2 log α1 > 2 log n.
Choisissons ensuite K suffisamment grand pour que n ≤ N =⇒ C(n) ≤ Kn log n et
pour que K log α1 > 2k.
Pour n ≤ N on a donc par hypothèse C(n) ≤ Kn log n. Supposons par récurrence
C(m) ≤ Km log m pour m inférieur à un certain n > N . Pour n1 , n2 ≤ d 32 ne + 1 tels que
n1 + n2 = n + 2 on a
Polygones monotones
Définition 3.9 On considère une direction du plan qu’on appelle verticale. La direction
orthogonale est dite horizontale. La hauteur d’un point est sa projection horizontale sur
Notes Géométrie Algorithmique. December 3, 2014. Francis Lazarus. 51
q u
p
A B C t
Figure 3.5 – (A) Une ligne polygonale non monotone. (B) Une ligne polygonale stricte-
ment monotone. (C) Un polygone monotone, mais pas strictement. Les sommets p q sont
des extrema stricts, r et s sont des extrema non stricts, t est un minimum strict et u n’est
pas un extremum. Les sommets p, r et u sont réflexes.
Lemme 3.10
– une ligne polygonale ayant au moins 3 sommets est strictement monotone si et seule-
ment si aucun de ses sommets intérieurs n’est extremum.
– Un polygone est strictement monotone si et seulement si il a exactement deux extrema.
Définition 3.11 Un sommet d’un polygone est dit réflexe si l’angle intérieur au polygone
formé par les deux arêtes incidentes au sommet est strictement plus grand que π. Une
sous-chaîne d’un polygone est dite concave si ses sommets intérieurs sont réflexes.
q C q
h+ x ~h
b
C a
PD Cb q
h w=v p v
u v p
D
−
h PG y
q
A p B C
Figure 3.6 – (A) Le polygone P est supposé sans extremum réflexe (B) Une composante
C de PG ∩ h+ . (C) L’extrémité v de C sépare C de q le long de PG ; le sommet y est un
minimum réflexe.
lignes polygonales PG et PD telles que PG est à gauche de PL . Supposons par l’absurde que
P n’est pas monotone. Alors par définition, PG ou PD n’est pas monotone. On suppose
sans perte de généralité que PG n’est pas monotone. Il existe donc une droite horizontale
h coupant PG en deux composantes au moins. On note h+ et h− les demi-plans ouverts
respectivement au dessus et au dessous de h. Par connexité de PG , l’une des composantes,
C, de h+ ∩ PG ou de h− ∩ PG a ses deux extrémités dans h. On note u et v ces deux
extrémités avec u à gauche de v. Supposons à nouveau sans perte de généralité C ⊂ h+
comme sur la figure 3.6.A.
J’affirme que
(A) le long de C, l’intérieur de P est situé du même côté que l’intérieur du polygone
délimité par C et le segment uv de h.
Par ailleurs, puisque PG est à gauche de PD , l’intérieur de P est à droite de PG lorsque
PG est parcourue du bas vers le haut (i.e. de p vers q). Par conséquent, en admettant
(A), le sommet u est avant v dans ce parcours. Soit D la composante de PG \ C joignant
v à q. J’affirme que
(B) le sommet le plus à gauche parmi les sommets de hauteur minimale de D est extremum
réflexe (cf. figure 3.6.C).
Cette dernière contradiction permet de conclure la monotonicité de PG et donc de P . Il
reste à montrer les affirmations (A) et (B).
Pour (A), on considère le sommet x de C le plus à droite parmi les sommets de hauteur
maximale. Les directions des deux arêtes d’origine x et la direction horizontale ~h vers la
droite sont donc deux à deux distinctes. Soit a l’arête issue de x dont la direction suit celle
de ~h dans le sens indirect (le sens des aiguilles d’une montre). On note b la seconde arête
issue de x. Comme x est extremum, il ne peut être réflexe, ce qui montre que l’intérieur
de P est entre b et a dans le sens direct, ou encore à droite de a. Montrons que c’est
également le cas pour l’intérieur de la courbe de Jordan uv ∪ C. Pour cela, on note Ca et
Cb les deux composantes de C \{x} contenant respectivement a et b et on note w ∈ {u, v}
l’extrémité de Ca autre que x (cf. figure 3.6.B). Il est clair qu’on ne peut avoir w = u,
Notes Géométrie Algorithmique. December 3, 2014. Francis Lazarus. 53
Figure 3.7 – Le polygone P est décomposé en polygones monotones par ajout de diag-
onales incidentes à ses extrema réflexes.
Théorème 3.13 Il existe un algorithme de complexité O(n log n) pour décomposer tout
polygone à n sommets, par l’ajout de diagonales au polygone, en polygones monotones .
Notons que la décomposition trapézoïdale peut s’obtenir en temps O(n log n) et que
l’ajout de chaque diagonale s’obtient en temps constant par diagonale (en utilisant une
structure de carte planaire en demi-arêtes), ce qui achève la démonstration. 2
σ0 σ0 σ0
Π Π
Π σ1 Π σ1
ν0 ν0 ν0
P0 P1 P1
ν1 ν1
a b c d e
σ2 = σ1
Π Π Π Π
P2
ν2 = ν1 ν2 ν2 ν2
e f g h i
P = ∪x∈X VP (x)
i.e. si l’union des zones de visibilités des points de X recouvre P . Le problème de la galerie
d’art revient donc à chercher un ensemble X de taille minimale couvrant P . Le problème
de Klee était plus précisément de trouver la taille minimale g(n) telle que tout polygone
à n sommets est couvert par un ensemble de taille g(n).
g(n) = bn/3c.
La preuve suivante due à Fisk en 1978 utilise la notion de coloriage. Un coloriage d’un
ensemble E par une ensemble C est une application de E dans C. Si le cardinal de C est
k on parle d’un k-coloriage de E.