%% 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 et du ballon %% %% 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 0 def % centre du ballon /CY 5 def /CZ 2 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 30 def /PHI 60 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 et du ballon %% 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 %% indice des autres sommets voisins de chaque sommet /co [ 6 2 11 10 5 % voisins du sommet 1 3 6 1 11 12 % " de 2 2 8 12 4 6 % " de 3 6 5 9 8 3 % " de 4 6 4 10 9 1 % " de 5 1 2 3 4 5 % " de 6 10 9 8 12 11 % " de 7 12 3 4 9 7 % " de 8 8 4 5 10 7 % " de 9 11 7 9 5 1 % " de 10 1 2 12 7 10 % " de 11 11 2 3 8 7 % " de 12 ] def %% dessin de l'icosaedre tronqué 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 tronqué /i 0 def /Sico [ % les coordonnées des sommets de % l'icosaèdre tronqué 0 5 co length 5 sub { /j exch def S i get /xt1 exch def S i 1 add get /yt1 exch def S i 2 add get /zt1 exch def % co j get 1 sub 3 mul /k exch def S k get /xt2 exch def xt1 2 mul xt2 add 3 div % S k 1 add get /yt2 exch def yt1 2 mul yt2 add 3 div % S k 2 add get /zt2 exch def zt1 2 mul zt2 add 3 div %% co j 1 add get 1 sub 3 mul /k exch def S k get /xt2 exch def xt1 2 mul xt2 add 3 div % S k 1 add get /yt2 exch def yt1 2 mul yt2 add 3 div % S k 2 add get /zt2 exch def zt1 2 mul zt2 add 3 div %% co j 2 add get 1 sub 3 mul /k exch def S k get /xt2 exch def xt1 2 mul xt2 add 3 div % S k 1 add get /yt2 exch def yt1 2 mul yt2 add 3 div % S k 2 add get /zt2 exch def zt1 2 mul zt2 add 3 div %% co j 3 add get 1 sub 3 mul /k exch def S k get /xt2 exch def xt1 2 mul xt2 add 3 div % S k 1 add get /yt2 exch def yt1 2 mul yt2 add 3 div % S k 2 add get /zt2 exch def zt1 2 mul zt2 add 3 div %% co j 4 add get 1 sub 3 mul /k exch def S k get /xt2 exch def xt1 2 mul xt2 add 3 div % S k 1 add get /yt2 exch def yt1 2 mul yt2 add 3 div % S k 2 add get /zt2 exch def zt1 2 mul zt2 add 3 div /i i 3 add def } for ] def % %% les sommets des faces pentagonales /FP [ % 12 pentagones 1 5 4 3 2 6 7 8 9 10 15 11 13 12 14 16 17 18 19 20 23 25 21 22 24 26 27 28 29 30 35 31 32 33 34 36 37 38 39 40 41 42 43 44 45 46 50 49 48 47 51 52 53 54 55 56 57 58 59 60 ] def /FH [ % 20 hexagones 14 15 28 29 16 20 17 16 29 30 21 22 11 15 28 27 7 6 27 26 1 2 8 7 26 30 21 25 5 1 4 5 25 23 49 50 55 51 3 4 50 46 9 8 2 3 51 52 56 57 10 9 52 53 13 11 6 10 57 58 36 37 12 13 58 59 19 20 14 12 37 38 41 42 18 19 38 39 24 22 17 18 42 43 48 49 23 24 43 44 53 54 35 34 60 56 59 60 34 33 40 36 39 40 33 32 45 41 44 45 32 31 47 48 46 47 31 35 54 55] def /RED 0 def 0 5 FP length 5 sub { % le dessin des pentagones /i exch def FP i get 1 sub 3 mul /k exch def Sico k get /Xpoint exch def Sico k 1 add get /Ypoint exch def Sico k 2 add get /Zpoint exch def CalculsPointsAfterTransformations /X1 Xabscisse def /Y1 Yordonnee def /Z1 Zcote def %% FP i 1 add get 1 sub 3 mul /k exch def Sico k get /Xpoint exch def Sico k 1 add get /Ypoint exch def Sico k 2 add get /Zpoint exch def CalculsPointsAfterTransformations /X2 Xabscisse def /Y2 Yordonnee def /Z2 Zcote def %% FP i 2 add get 1 sub 3 mul /k exch def Sico k get /Xpoint exch def Sico k 1 add get /Ypoint exch def Sico k 2 add get /Zpoint exch def CalculsPointsAfterTransformations /X3 Xabscisse def /Y3 Yordonnee def /Z3 Zcote def %% FP i 3 add get 1 sub 3 mul /k exch def Sico k get /Xpoint exch def Sico k 1 add get /Ypoint exch def Sico k 2 add get /Zpoint exch def CalculsPointsAfterTransformations /X4 Xabscisse def /Y4 Yordonnee def /Z4 Zcote def %% FP i 4 add get 1 sub 3 mul /k exch def Sico k get /Xpoint exch def Sico k 1 add get /Ypoint exch def Sico k 2 add get /Zpoint exch def CalculsPointsAfterTransformations /X5 Xabscisse def /Y5 Yordonnee def /Z5 Zcote def %% centre de la face /xF {X1 X2 add X3 add X4 add X5 add 5 div} bind def /yF {Y1 Y2 Y3 Y4 Y5 add add add add 5 div} bind def /zF {Z1 Z2 Z3 Z4 Z5 add add add add 5 div} bind 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 /xN xF CX sub def /yN yF CY sub def /zN zF CZ sub 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 /Zcote Z4 def /Yordonnee Y4 def /Xabscisse X4 def formulesTroisD Xi cm Yi cm lineto /Zcote Z5 def /Yordonnee Y5 def /Xabscisse X5 def formulesTroisD Xi cm Yi cm lineto closepath gsave 0 RED RED 0 setcmykcolor fill grestore 2 setlinewidth 0 setgray stroke } if /RED RED 0.04 add store } for /RED 1 def 0 6 FH length 6 sub { % le dessin des hexagones /i exch def FH i get 1 sub 3 mul /k exch def Sico k get /Xpoint exch def Sico k 1 add get /Ypoint exch def Sico k 2 add get /Zpoint exch def CalculsPointsAfterTransformations /X1 Xabscisse def /Y1 Yordonnee def /Z1 Zcote def %% FH i 1 add get 1 sub 3 mul /k exch def Sico k get /Xpoint exch def Sico k 1 add get /Ypoint exch def Sico k 2 add get /Zpoint exch def CalculsPointsAfterTransformations /X2 Xabscisse def /Y2 Yordonnee def /Z2 Zcote def %% FH i 2 add get 1 sub 3 mul /k exch def Sico k get /Xpoint exch def Sico k 1 add get /Ypoint exch def Sico k 2 add get /Zpoint exch def CalculsPointsAfterTransformations /X3 Xabscisse def /Y3 Yordonnee def /Z3 Zcote def %% FH i 3 add get 1 sub 3 mul /k exch def Sico k get /Xpoint exch def Sico k 1 add get /Ypoint exch def Sico k 2 add get /Zpoint exch def CalculsPointsAfterTransformations /X4 Xabscisse def /Y4 Yordonnee def /Z4 Zcote def %% FH i 4 add get 1 sub 3 mul /k exch def Sico k get /Xpoint exch def Sico k 1 add get /Ypoint exch def Sico k 2 add get /Zpoint exch def CalculsPointsAfterTransformations /X5 Xabscisse def /Y5 Yordonnee def /Z5 Zcote def %% FH i 5 add get 1 sub 3 mul /k exch def Sico k get /Xpoint exch def Sico k 1 add get /Ypoint exch def Sico k 2 add get /Zpoint exch def CalculsPointsAfterTransformations /X6 Xabscisse def /Y6 Yordonnee def /Z6 Zcote def %% centre de la face /xF {X1 X2 add X3 add X4 add X5 add X6 add 6 div} bind def /yF {Y1 Y2 Y3 Y4 Y5 Y6 add add add add add 6 div} bind def /zF {Z1 Z2 Z3 Z4 Z5 Z6 add add add add add 6 div} bind 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 /xN xF CX sub def /yN yF CY sub def /zN zF CZ sub 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 /Zcote Z4 def /Yordonnee Y4 def /Xabscisse X4 def formulesTroisD Xi cm Yi cm lineto /Zcote Z5 def /Yordonnee Y5 def /Xabscisse X5 def formulesTroisD Xi cm Yi cm lineto /Zcote Z6 def /Yordonnee Y6 def /Xabscisse X6 def formulesTroisD Xi cm Yi cm lineto closepath gsave 0 0 0.2 0 setcmykcolor fill grestore 1 setlinewidth stroke } if } for