/octaedre { %% le calcul des sommets du cube /m 4 def % nombre d'arêtes sur un sommet /n 3 def % nombre de côtés de chaque face %% les 6 sommets %% abscisses 50 dict begin %% 6 Sommets -> 18 coordonnées /S [ 0 0 radius % 0 radius 0 0 % 1 0 radius 0 % 2 radius neg 0 0 % 3 0 radius neg 0 % 4 0 0 radius neg % 5 ] def % les 8 faces % No /F [0 4 1 % 0 1 2 0 % 1 0 2 3 % 2 3 4 0 % 3 1 5 2 % 4 2 5 3 % 5 3 5 4 % 6 4 5 1 % 7 ] def %% indice des autres sommets voisins de chaque sommet /co [ 2 3 4 5 % voisins du sommet 1 3 1 5 6 % " de 2 1 2 6 4 % " de 3 1 3 6 5 % " de 4 1 2 6 4 % " de 5 2 5 4 3 % " de 6 ] def % %% dessin de l'octaedre tronqué %% paramètre pour tronquer %% de différentes façons l'octaedre %% 2 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 /PSfacette xV xN mul yV yN mul add zV zN mul add def condition { /facette { newpath % tracé de la facette X1 Y1 Z1 3dto2d moveto X2 Y2 Z2 3dto2d lineto X3 Y3 Z3 3dto2d lineto X4 Y4 Z4 3dto2d lineto closepath } def gsave facette ColorFacette setrgbcolor fill grestore Trace_arete } if } for % /j 0 def 0 6 FH length 6 sub { % le dessin des hexagones /i exch def FH i get 1 sub 3 mul /k exch def SOT k get /Xpoint exch def SOT k 1 add get /Ypoint exch def SOT k 2 add get /Zpoint exch def PointsApresTransformations /Z1 exch def /Y1 exch def /X1 exch def %% FH i 1 add get 1 sub 3 mul /k exch def SOT k get /Xpoint exch def SOT k 1 add get /Ypoint exch def SOT k 2 add get /Zpoint exch def PointsApresTransformations /Z2 exch def /Y2 exch def /X2 exch def %% FH i 2 add get 1 sub 3 mul /k exch def SOT k get /Xpoint exch def SOT k 1 add get /Ypoint exch def SOT k 2 add get /Zpoint exch def PointsApresTransformations /Z3 exch def /Y3 exch def /X3 exch def %% FH i 3 add get 1 sub 3 mul /k exch def SOT k get /Xpoint exch def SOT k 1 add get /Ypoint exch def SOT k 2 add get /Zpoint exch def PointsApresTransformations /Z4 exch def /Y4 exch def /X4 exch def %% FH i 4 add get 1 sub 3 mul /k exch def SOT k get /Xpoint exch def SOT k 1 add get /Ypoint exch def SOT k 2 add get /Zpoint exch def PointsApresTransformations /Z5 exch def /Y5 exch def /X5 exch def %% FH i 5 add get 1 sub 3 mul /k exch def SOT k get /Xpoint exch def SOT k 1 add get /Ypoint exch def SOT k 2 add get /Zpoint exch def PointsApresTransformations /Z6 exch def /Y6 exch def /X6 exch 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 /PSfacette xV xN mul yV yN mul add zV zN mul add def condition { /facette { newpath % tracé de la facette X1 Y1 Z1 3dto2d moveto X2 Y2 Z2 3dto2d lineto X3 Y3 Z3 3dto2d lineto X4 Y4 Z4 3dto2d lineto X5 Y5 Z5 3dto2d lineto X6 Y6 Z6 3dto2d lineto closepath } def gsave facette j 0 eq {ColorFace1 setrgbcolor} if j 1 eq {ColorFace3 setrgbcolor} if j 2 eq {ColorFace5 setrgbcolor} if j 3 eq {ColorFace6 setrgbcolor} if j 4 eq {ColorFace2 setrgbcolor} if j 5 eq {ColorFace4 setrgbcolor} if j 6 eq {ColorFace7 setrgbcolor} if j 7 eq {ColorFace8 setrgbcolor} if fill grestore Trace_arete} if /j j 1 add def } for end } def