%% syntaxe : array1 M ordonnepoints3d --> array2
%% array1 = tableau de points 3d coplanaires (plan P)
%% M = point3d indiquant la direction de la normale a P
%% array2 = les indices des points de depart, ranges dans le
%% sens trigo par rapport a la normale
/ordonnepoints3d {
5 dict begin
/M defpoint3d
/table exch def
table isobarycentre3d /G defpoint3d
%% calcul de la normale
table 0 getp3d /ptref defpoint3d
table 1 getp3d /A defpoint3d
G ptref vecteur3d
G A vecteur3d
vectprod3d /vecteurnormal defpoint3d
vecteurnormal G M vecteur3d scalprod3d 0 lt {
vecteurnormal -1 mulv3d /vecteurnormal defpoint3d
} if
%% la table des angles
table duparray exch pop
{1 dict begin
/M defpoint3d
G ptref vecteur3d
G M vecteur3d
vecteurnormal angle3doriente
end} papply3d
% [0 1 table length 3 idiv 1 sub {} for]
% exch
doublebubblesort pop
end
} def
|