Enveloppe convexe d`un ensemble fini de points dans l`espace

Enveloppe convexe d’un ensemble fini de points dans l’espace
Jérôme Feret
Résumé
Nous nous intéressons aujourd’hui au calcul de l’enveloppe convexe en dimension 3. Nous voulons
modéliser, étant donné un ensemble fini Sde points dans l’espace, la plus petite partie convexe de
l’espace qui contient tous les points de S. Nous savons que l’enveloppe convexe d’un ensemble fini
et non vide de points dans l’espace, est un polyhèdre convexe. Nous proposons un algorithme basé
sur la caractérisation des faces de l’enveloppe convexe.
1 Définition du problème
Définition 1.1 Soit Sun ensemble de points dans un espace affine E. Nous appeleons enveloppe
convexe de S, la plus petite partie convexe de Econtenant S, et nous la notons conv(S).
Question 1.1 Justifier cette définition.
Nous ne traitons que le cas où Eest un espace affine et Sest un ensemble fini. Dans ce cas, conv(S)
est un polyhèdre. Nous modélisons ce polyhèdre par la liste de ses faces, chaque face étant codée par
la liste de ses sommets. Nous supposons de plus, pour l’implantation, que les coordonnées des points
de Ssont entières. De plus, nous supposons que Scontient au moins 4points distincts, que jamais 3
points distincts ne sont alignés, et que jamais 4points distincts ne sont coplanaires.
2 Algorithme
2.1 Principe
Nous cherchons à construire l’enveloppe convexe de S, en caractérisant, les faces de ce polyhèdre.
Nous utilisons pour cela le théorème ci-dessous :
Theorem 2.1 Soit Eun espace affine et Sune partie finie de Esans que ni quatre points ne soient
jamais coplanaires, ni trois points ne soient jamais alignés, alors pour toute triplet (A, B, C)S3de
points distincts 2à2, le triangle ABC est une face de l’enveloppe convexe conv(S)si et seulement si
l’ensemble Sest inclus dans un demi-espace fermé délimité par le plan (ABC).
2.2 Algorithme glouton
Nous déduisons du Thm. 2.1 l’algorithme glouton suivant, qui construit l’enveloppe convexe conv(S),
face par face :
supposons que ABC soit une face de conv(S),
nous savons qu’il existe un unique point DS\ {A, B, C}tel que ABD soit une face de conv(S),
ce point est en fait le minimum sur S\ {A, B, C}pour l’ordre total pdéfinit par : p(A,B,C)(D, E)
si et seulement si, Cet Esont dans un demi-espace ouvert délimité par le plan (ABD).
Ainsi, si nous connaissons une face de conv(S), nous sommes capable de construire ses faces voisines,
puis de proche en proche, nous pouvons calculer toutes les faces de l’enveloppe convexe conv(S).
2.3 Calcul de la première face
Pour déterminer un premier sommet de l’enveloppe convexe conv(S), nous prenons le point de
S, maximal pout l’ordre lexicographique sur les coordonnées, nous le notons A. Nous savons que A
est le sommet d’une face de conv(S). Nous choisissons alors un point O1à l’extérieur de l’enveloppe
convexe conv(S). Nous cherchons alors un point BSde sortes que tous les points de Ssoit dans
un même demi-espace fermé délimité par le plan (AO1B). Pour cela, nous prenons O1et O2tels
1
que ~
AO1= (1,0,0) et ~
AO2= (1,1,0), puis nous calculons B, le point minimum pour la relation
p(A,O1,O2). Nous choisissons alors un troisième point Cde sortes que tous les points de Ssoit dans un
même demi-espace fermé délimité par le plan (ABC).
2.4 Implantation
Question 2.1 Proposer une modélisation pour les points et les vecteurs de l’espace.
Question 2.2 Écrire une procédure vector, qui prend en argument la modélisation de deux points dans
l’espace, et retourne la modélisation du vecteur formé par ces deux points.
Question 2.3 Écrire deux procédures produit_scalaire et produit_vectoriel, qui prennent en argument
la modélisation de deux vecteurs, et retournent respectivement, le produit scalaire et le produit vectoriel
de deux vecteurs modélisés.
Question 2.4 Écrire une procédure signe tel que le résultat de signe(n) est défini par :
0si n= 0,
1si n>0,
1sinon.
Question 2.5 Écrire une fonction du_meme_cote, qui prend en argument la modélisation de cinq
points A,B,C,Det E, et qui retourne true si et seulement si les points Det Esont dans un même
demi-espace délimité par le plan (ABC).
Question 2.6 Écrire une fonction plus_proche, qui prend en argument la modélisation de cinq points
A,B,C,Det E, et qui retourne true si et seulement si pA,B,C (D, E)est défini et est vrai.
2.5 Itérateur
Toutes les arêtes de l’enveloppe convexe figurent dans deux faces de cette enveloppe. Nous allons
recourir à une liste de travail ; cette liste contiendra toutes les arêtes pour lequelles une et une seule
face à été calculée, jusqu’à maintenant.
Nous utiliserons trois ressources (M, vue, L)qui seront soit des variables globales, soit des variables
passées en argument aux procédures :
Mest la liste de la modélisation des points de S;
vue est une matrice telle que la valeur dans la case vue[i, j]est le nombre de faces déjà calculées
qui ont le segment délimité par les points modélisés par M[i]et M[j]comme arête ;
Lsera une liste d’arêtes à visiter, les éléments de Lsont de la forme (i, j, k)avec i < j, tel que la
face délimitée par les points modélisés par M[i],M[j]et M[k]soit une face calculée de l’enveloppe
convexe conv(S).
Question 2.7 Écrire une procédure grand_angle, qui prend en argument une liste de points et 5
indices, et tel que l’appel grand_angle(M,i,j,k,l,m) retourne exactement la même valeur que l’appel
plus_proche(M[i],M[j],M[k],M[l],M[m]).
Question 2.8 Écrire une procédure pick_item, qui prend en argument un prédicat et un tableau, et
qui retourne l’indice du plus petit élément du tableau pour le prédicat.
Question 2.9 Écrire une procédure set_arete, qui prend en argument trois indices, et qui ajoute 1aux
cases de la matrice vue qui sont associées aux arêtes délimitées par les points correspondant.
Question 2.10 Déduire une procédure convex dont le principe est le suivant :
chaque fois qu’une face est calculée, nous ajustons la matrice vue, et nous plaçons dans la liste de
travail les arêtes dont les faces voisines n’ont pas toutes été calculées ;
à chaque étape, nous prenons une arête dans la liste de travail, et si ce n’est pas déjà, nous
calculons sa face voisine.
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !