TP : recherche d’une enveloppe convexe
Option info MPSI
Étant donné un ensemble de points, on cherche leur ensemble convexe, c’est à dire le plus petit ensemble
convexe contenant ces points.
On représentera un point par un couple de flottants et un ensemble de points par une liste.
P0
P2
P3
P1
Q
P4
Figure 1 – Un ensemble de points avec son enveloppe convexe
I Fonctions utilitaires
1. Écrire une fonction det prenant 3 points P,Q,Ren arguments et renvoyant det(−−→
P Q, −→
P R).
2. En déduire une fonction direct qui prend 3 points P,Q,Ren arguments et renvoie true ssi (−−→
P Q, −→
P R)
est un angle dans le sens direct (i.e dans le sens trigonométrique, par ex (−−−→
P0P1,−−→
P0Q)est direct sur la
Figure 1 mais pas (−−−→
P0P4,−−→
P0Q)).
II Marche de Jarvis
La marche de Jarvis est un algorithme permettant de calculer une enveloppe convexe d’un ensemble de
points. Elle consiste à partir d’un point P0dont on sait qu’il est sur l’enveloppe convexe, puis à trouver le point
P1tel que (−−−→
P0P1,−−→
P0Q)soit direct pour tout Q(voir Figure 1), et ainsi de suite jusqu’à revenir sur le point
initial P0.
1. Écrire une fonction mini_y qui prend une liste de points en arguments et renvoie le point ayant une
ordonnée minimum (si plusieurs points ont la même ordonnée minimum, on renverra celui qui est d’abscisse
minimum).
2. Écrire une fonction next qui prend une liste de points let un point pen arguments et qui renvoie le
prochain point qde l, à partir de p, en suivant la marche de Jarvis. Pour cela on pourra remarquer que la
relation q≺r⇐⇒ det(−→
pq, −→
pr)>0est une relation d’ordre, et que qest le minimum pour cette relation.
3. Écrire une fonction jarvis renvoyant l’ensemble des points de l’enveloppe convexe, dans l’ordre trigono-
métrique, d’une liste de points donnée en argument.
Le fichier tp_enveloppe.ml contient une fonction affiche telle que affiche lp enveloppe affiche les
points lp et relie les points de enveloppe. L’utiliser pour vérifier votre fonction.
On fermera la fenêtre graphique en appuyant sur une touche quelconque et non pas en cliquant sur la croix.
4. Quelle est la complexité de la fonction précédente, en fonction du nombre hde points sur l’ensemble
convexe et du nombre total nde points ?
1