%% auteur :
%% auteur :
%% trace d'un cube de cubes
%% les parametres
-3 5 setxrange
-1 6 setyrange
/alpha 30 def %% angle de la perspective cavaliere
/beta 90 def %% angle que fait l'arete (BC) avec l'horizontale
/L .5 def
/l L def
/h L def
/A {0 .5} def
/n 5 def
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% vecteur pour la translation verticale
/u {
h beta cos mul
h beta sin mul
} def
%% vecteur pour la translation sur la profondeur
/v {
l alpha cos mul 1.5 div
l alpha sin mul 1.5 div
} def
%% vecteur pour la translation horizontale
/w {
L 1.5 mul
0
} def
%% syntaxe : M cube
/cube {
20 dict begin
/A defpoint %% le coin inférieur gauche de la face avant
%% la face avant, obtenue par translations du point A
/B {A L 0 addv} def
/C {B u addv} def
/D {A u addv} def
%% on translate la face avant vers l'arriere
[A B C D] %% le tableau de la face avant
%% dup points %% on le duplique puis on marque les sommets
%% (pendant la mise au point)
{v addv} papply %% on additionne le vecteur v (que les matheux
%% me pardonnent) a tous les points du tableau
aload pop %% on vide le tableau sur la pile
/H defpoint %% et on recupere les points en les nommant
/G defpoint
/F defpoint
/E defpoint
%% on dessine les faces
/fillstyle {bleu fill} def
[A B C D] polygone*
/fillstyle {jaune fill} def
[C G F B] polygone*
/fillstyle {orange fill} def
[D H G C] polygone*
%% %% les aretes en pointille
%% gsave
%% jpegmode
%% pointilles
%% [A E H] ligne
%% [F E] ligne
%% grestore
end
} def
%% syntaxe : A rangee
/rangee {
[ 3 1 roll
n {
dupp
w addv
} repeat
] {cube} papply
} def
%A rangee
%% syntaxe : A plan
/plan {
[ 3 1 roll
n {
dupp
v -1.5 mulv addv
} repeat
] {rangee} papply
} def
%A plan
%% syntaxe : A groscube
/groscube {
[ 3 1 roll
n {
dupp
u 1.5 mulv addv
} repeat
] {plan} papply
} def
A groscube
|