isocaedre.jps

isocaedre.jps [ retouréditionsource ]

Conversion au format PDF de isocaedre.jps
%% Pour passer en pur postscript, decommenter la ligne suivante 

%% 294 420 translate


%% puis commenter les 3 suivantes

-10 10 setxrange
-10 10 setyrange
20 setxunit

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Manuel Luque                                                 %%

%% juin 2006                                                    %%

%% poour le dessin de l'icosaedre                %%

%% c'est une adaptation du fichier MatLab de Jean-Bernard ROUX :%%

%%  http://hypo.ge-dip.etat-ge.ch/www/math/html/node45.html     %%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

/cm {28.45 mul} def
%% les transformations de l'objet

%% translation

/CX 5 def
/CY -5 def
/CZ 5 def
%% rotation autour des axes

/RotX 0 def
/RotY 36 def
/RotZ 72 def
/c2 {RotY cos} bind def
/s2 {RotY sin} bind def
/c3 {RotZ cos} bind def
/s3 {RotZ sin} bind def
/c1 {RotX cos} bind def
/s1 {RotX sin} bind def
%% les coefficients de la matrice de transformation

%% de l'objet

/M11 {c2 c3 mul} bind def
/M12 {c3 s1 mul s2 mul c1 s3 mul sub} bind def
/M13 {c1 c3 mul s2 mul s1 s3 mul add} bind def
/M21 {c2 s3 mul} bind def
/M22 {s1 s2 mul s3 mul c1 c3 mul add} bind def
/M23 {s3 s2 mul c1 mul c3 s1 mul sub} bind def
/M31 {s2 neg} bind def
/M32 {s1 c2 mul} bind def
/M33 {c1 c2 mul} bind def
%% définir le point de vue

%% par ses coordonnées sphériques

/THETA 20 def
/PHI 30 def
/Dobs 100 def % distance observateur

/Decran 60 def % distance de l'écran

%% calcul des coefficients de la matrice

%% de transformation

/Sin1 {THETA sin} bind def
/Sin2 {PHI sin} bind def
/Cos1 {THETA cos} bind def
/Cos2 {PHI cos} bind def
/Cos1Sin2 {Cos1 Sin2 mul} bind def
/Sin1Sin2 {Sin1 Sin2 mul} bind def
/Cos1Cos2 {Cos1 Cos2 mul} bind def
/Sin1Cos2 {Sin1 Cos2 mul} bind def
%%

/CalculsPointsAfterTransformations{%

  /Xabscisse  M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add CX add def
  /Yordonnee  M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add CY add def
  /Zcote      M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add CZ add def
  }
def
%% pour la 3D conventionnelle

%% Dony : graphisme scientifique : page 187

/formulesTroisD{%

  /xObservateur Xabscisse Sin1 mul neg Yordonnee Cos1 mul add def
  /yObservateur Xabscisse Cos1Sin2 mul neg Yordonnee Sin1Sin2 mul sub Zcote Cos2 mul add def
  /zObservateur Xabscisse neg Cos1Cos2 mul Yordonnee Sin1Cos2 mul sub Zcote Sin2 mul sub Dobs add def
  /Xi Decran xObservateur mul zObservateur div def
  /Yi Decran yObservateur mul zObservateur div def
  }
def
/XpointVue {Dobs Cos1Cos2 mul} bind def
/YpointVue {Dobs Sin1Cos2 mul} bind def
/ZpointVue {Dobs Sin2 mul} bind def
%% dessin de l'icosaedre

%% C'est une adaptation du fichier MatLab de Jean-Bernard ROUX :

%%  http://hypo.ge-dip.etat-ge.ch/www/math/html/node45.html

/radius 3 def % rayon de la sphère circonscrite

/m 5 def % nombre d'arêtes sur un sommet

/n 3 def % nombre de côtés de chaque face

/sina {180 m div cos 180 n div sin div} bind def
/cosa {1 sina dup mul sub sqrt} bind def
/al {sina cosa atan} bind def
/l {radius 2 mul 180 m div cos mul al cos mul 180 m div sin al sin mul div} bind def
/k {2 radius dup mul mul l dup mul sub 2 radius mul div} bind def
/r {radius dup mul k dup mul sub sqrt} bind def
%% les sommets

%% abscisses

/x1 {r 0 cos mul} bind def
/x2 {r 72 cos mul} bind def
/x3 {r 144 cos mul} bind def
/x4 {r 216 cos mul} bind def
/x5 {r 288 cos mul} bind def
/x6 0 def
/x7 0 def
/x8 {x1 neg} bind def
/x9 {x2 neg} bind def
/x10 {x3 neg} bind def
/x11 {x4 neg} bind def
/x12 {x5 neg} bind def
%% ordonnées

/y1 {r 0 sin mul} bind def
/y2 {r 72 sin mul} bind def
/y3 {r 144 sin mul} bind def
/y4 {r 216 sin mul} bind def
/y5 {r 288 sin mul} bind def
/y6 0 def
/y7 0 def
/y8 {y1 neg} bind def
/y9 {y2 neg} bind def
/y10 {y3 neg} bind def
/y11 {y4 neg} bind def
/y12 {y5 neg} bind def
%% les cotes

/z1 k def
/z2 k def
/z3 k def
/z4 k def
/z5 k def
/z6 radius def
/z7 radius neg def
/z8 k neg def
/z9 k neg def
/z10 k neg def
/z11 k neg def
/z12 k neg def
%% les sommets : 12 sommets = 36 coordonnées

/S [x1  y1  z1  % 0->2

    x2  y2  z2  % 3->5

    x3  y3  z3  % 6->8

    x4  y4  z4  % 9->11

    x5  y5  z5  % 12->14

    x6  y6  z6  % 15->17

    x7  y7  z7  % 18->20

    x8  y8  z8  % 21->23

    x9  y9  z9  % 24->26

    x10 y10 z10 % 27->29

    x11 y11 z11 % 30->32

    x12 y12 z12 % 33-->35

    ] def
%% les 20 faces

%% tableau des faces

/FacesIco [       % No

     2  6  1      % 0

     2  3  6      % 1

     6  3  4      % 2

     4  5  6      % 3

     5  1  6      % 4

     1  5  10     % 5

     1  10 11     % 6

     11 2  1      % 7

     11 12 2      % 8

     2  12 3      % 9

     3  12 8      % 10

     8  4  3      % 11

     8  9  4      % 12

     9  5  4      % 13

     5  9  10     % 14

     12 11 7      % 15

     12 7  8      % 16

     9  8  7      % 17

     7  10 9      % 18

     7  11 10     % 19

    ] def
%% dessin de l'icosaedre

1 setlinejoin
%%294 420 translate

%% les axes

gsave
0 0 moveto
/Zcote 0 def
/Yordonnee 0 def
/Xabscisse 10 def
formulesTroisD
Xi cm Yi cm lineto
2 setlinewidth
1 0 0 setrgbcolor
stroke
0 0 moveto
/Zcote 0 def
/Yordonnee 10 def
/Xabscisse 0 def
formulesTroisD
Xi cm Yi cm lineto
2 setlinewidth
0 1 0 setrgbcolor
stroke
0 0 moveto
/Zcote 10 def
/Yordonnee 0 def
/Xabscisse 0 def
formulesTroisD
Xi cm Yi cm lineto
2 setlinewidth
0 0 1 setrgbcolor
stroke
grestore

%% dessin de l'icosaedre

/RED 0 def
0 3 FacesIco length 3 sub {
/i exch def
FacesIco i get 1 sub 3 mul /j exch def
   S j get %

  /Xpoint exch def
   S j 1 add get %

  /Ypoint exch def
   S j 2 add get %

  /Zpoint exch def
CalculsPointsAfterTransformations
     /X1 Xabscisse def
     /Y1 Yordonnee def
     /Z1 Zcote def
FacesIco i 1 add get 1 sub 3 mul /j exch def
   S j get %

  /Xpoint exch def
   S j 1 add get %

  /Ypoint exch def
   S j 2 add get %

  /Zpoint exch def
CalculsPointsAfterTransformations
     /X2 Xabscisse def
     /Y2 Yordonnee def
     /Z2 Zcote def
FacesIco i 2 add get 1 sub 3 mul /j exch def
   S j get %

  /Xpoint exch def
   S j 1 add get %

  /Ypoint exch def
   S j 2 add get %

  /Zpoint exch def
CalculsPointsAfterTransformations
     /X3 Xabscisse def
     /Y3 Yordonnee def
     /Z3 Zcote def
%% condition de visibilite

%% centre de la facette

/xF X1 X2 X3 add add 3 div def
/yF Y1 Y2 Y3 add add 3 div def
/zF Z1 Z2 Z3 add add 3 div def
%% vecteur : centre de la face -> point de vue

/xV {XpointVue xF sub } bind def
/yV {YpointVue yF sub } bind def
/zV {ZpointVue zF sub } bind def
%% normale à la face : produit vectoriel

/xN {Y2 Y1 sub Z3 Z1 sub mul Z2 Z1 sub Y3 Y1 sub mul sub} bind def
/yN {Z2 Z1 sub X3 X1 sub mul X2 X1 sub Z3 Z1 sub mul sub} bind def
/zN {X2 X1 sub Y3 Y1 sub mul Y2 Y1 sub X3 X1 sub mul sub} bind def
% le produit scalaire des 2 vecteurs

/PS xV xN mul yV yN mul add zV zN mul add def
PS 0 ge {
newpath
% tracé de la facette

/Zcote Z1 def
/Yordonnee Y1 def
/Xabscisse X1 def
formulesTroisD
Xi cm Yi cm  moveto
/Zcote Z2 def
/Yordonnee Y2 def
/Xabscisse X2 def
formulesTroisD
Xi cm Yi cm lineto
/Zcote Z3 def
/Yordonnee Y3 def
/Xabscisse X3 def
formulesTroisD
Xi cm Yi cm lineto
closepath
gsave
    0 RED RED 0 setcmykcolor
    fill
grestore
%1 setlinewidth

    0 setgray
      stroke
} if
/RED RED 0.04 add store
} for