TP : recherche d’une enveloppe convexe Option info MPSI

publicité
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.
P3
P4
P2
Q
P1
P0
Figure 1 – Un ensemble de points avec son enveloppe convexe
I
Fonctions utilitaires
−−→ −→
1. Écrire une fonction det prenant 3 points P , Q, R en arguments et renvoyant det(P Q, P R).
−−→ −→
2. En déduire une fonction direct qui prend 3 points P , Q, R en 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 (P0 P1 , P0 Q) est direct sur la
−−−→ −−→
Figure 1 mais pas (P0 P4 , P0 Q)).
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 P0 dont on sait qu’il est sur l’enveloppe convexe, puis à trouver le point
−−−→ −−→
P1 tel que (P0 P1 , P0 Q) 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 l et un point p en arguments et qui renvoie le
prochain point q de l, à partir de p, en suivant la marche de Jarvis. Pour cela on pourra remarquer que la
−
−
relation q ≺ r ⇐⇒ det(→
pq, →
pr) > 0 est une relation d’ordre, et que q est le minimum pour cette relation.
3. Écrire une fonction jarvis renvoyant l’ensemble des points de l’enveloppe convexe, dans l’ordre trigonomé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 h de points sur l’ensemble
convexe et du nombre total n de points ?
1
III
Intersections
1. On veut déterminer informatiquement si deux segments [P1 P2 ] et [P3 P4 ] se croisent. Que peut-on dire des
−−−→ −−−→
−−−→ −−−→
angles (P1 P2 , P1 P3 ) et (P1 P2 , P1 P4 ) dans ce cas ? En déduire une condition nécessaire et suffisante pour
que [P1 P2 ] et [P3 P4 ] s’intersectent et écrire une fonction le déterminant.
Vérifier avec les 4 points de la Figure 2, puis en échangeant P4 et P2 .
P4 (1, 2)
P2 (3, 2)
P3 (4, 1)
P1 (0, 0)
Figure 2 – [P1 P2 ] et [P3 P4 ] s’intersectent
2. Écrire une fonction ayant un point P et une liste ` de n points en arguments et déterminant si P est situé
à l’intérieur de l’enveloppe convexe de `.
Indice : on pourra considérer un point P∞ « à l’infini » ((1000., 0.) suffira pour nous) et regarder le
nombre de fois que [P P∞ ] intersecte l’enveloppe convexe de `.
Vérifier que (2, 2) est dans l’enveloppe des points sur la Figure 2, mais que (2, 2.5) n’y est pas.
3. Quelle est la complexité de l’algorithme précédent ?
IV
Compléments
La marche de Graham est une autre méthode qui permet de trouver l’enveloppe convexe d’un ensemble de
n points, et qui a comme complexité O(n log(n)).
1. Montrer qu’un algorithme en complexité C(n) pour la recherche d’une enveloppe convexe peut être utilisé
pour trier un tableau de n entiers en complexité C(n). En déduire la complexité optimale d’un algorithme
de recherche d’enveloppe convexe.
Indice : si t est un tableau d’entiers, considérer les points (t.(i), t.(i)2 ).
On s’intéresse à une application de la recherche d’une enveloppe convexe : trouver les deux points les plus
éloignés parmi n points.
2. Quelle est la complexité de la méthode naïve ? L’implémenter.
3. Améliorer l’algorithme précédent en remarquant que les deux points les plus éloignés sont forcément sur
l’enveloppe convexe.
4. Quelle est la complexité de l’algorithme précédent si on utilise la marche de Graham pour trouver l’enveloppe convexe ?
2
Téléchargement