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