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