%% 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