%version 33 march 2007 % /tx@3DDict 100 dict def tx@3DDict begin /Cube{% /XA M11 A mul M12 B mul add M13 C mul add CX add def /YA M21 A mul M22 B mul add M23 C mul add CY add def /ZA M31 A mul M32 B mul add M33 C mul add CZ add def /XB M11 A mul neg M12 B mul add M13 C mul add CX add def /YB M21 A mul neg M22 B mul add M23 C mul add CY add def /ZB M31 A mul neg M32 B mul add M33 C mul add CZ add def /XC M11 A mul neg M12 B mul neg add M13 C mul add CX add def /YC M21 A mul neg M22 B mul neg add M23 C mul add CY add def /ZC M31 A mul neg M32 B mul neg add M33 C mul add CZ add def /XD M11 A mul M12 B mul neg add M13 C mul add CX add def /YD M21 A mul M22 B mul neg add M23 C mul add CY add def /ZD M31 A mul M32 B mul neg add M33 C mul add CZ add def /XE M11 A mul M12 B mul add M13 C mul sub CX add def /YE M21 A mul M22 B mul add M23 C mul sub CY add def /ZE M31 A mul M32 B mul add M33 C mul sub CZ add def /XF M11 A mul neg M12 B mul add M13 C mul sub CX add def /YF M21 A mul neg M22 B mul add M23 C mul sub CY add def /ZF M31 A mul neg M32 B mul add M33 C mul sub CZ add def /XG M11 A mul neg M12 B mul sub M13 C mul sub CX add def /YG M21 A mul neg M22 B mul sub M23 C mul sub CY add def /ZG M31 A mul neg M32 B mul sub M33 C mul sub CZ add def /XH M11 A mul M12 B mul sub M13 C mul sub CX add def /YH M21 A mul M22 B mul sub M23 C mul sub CY add def /ZH M31 A mul M32 B mul sub M33 C mul sub CZ add def % Centres des faces : condition de visibilité % FACE 1 % OC1 /XC1 M13 C mul CX add def /YC1 M23 C mul CY add def /ZC1 M33 C mul CZ add def % Normale à la face 1 /NX1 M13 C mul def /NY1 M23 C mul def /NZ1 M33 C mul def % rayon vers point de vue /RXvue1 XC1 XpointVue sub def /RYvue1 YC1 YpointVue sub def /RZvue1 ZC1 ZpointVue sub def % produit scalaire /PS1 RXvue1 NX1 mul RYvue1 NY1 mul add RZvue1 NZ1 mul add def % FACE 2 % OC2 /XC2 M11 A mul CX add def /YC2 M21 A mul CY add def /ZC2 M31 A mul CZ add def % normale à la face 2 /NX2 M11 A mul def /NY2 M21 A mul def /NZ2 M31 A mul def % rayon vers point de vue /RXvue2 XC2 XpointVue sub def /RYvue2 YC2 YpointVue sub def /RZvue2 ZC2 ZpointVue sub def % produit scalaire /PS2 RXvue2 NX2 mul RYvue2 NY2 mul add RZvue2 NZ2 mul add def % FACE 3 % OC3 /XC3 M13 C neg mul CX add def /YC3 M23 C neg mul CY add def /ZC3 M33 C neg mul CZ add def % normale à la face 3 /NX3 M13 C neg mul def /NY3 M23 C neg mul def /NZ3 M33 C neg mul def % rayon vers point de vue /RXvue3 XC3 XpointVue sub def /RYvue3 YC3 YpointVue sub def /RZvue3 ZC3 ZpointVue sub def % produit scalaire /PS3 RXvue3 NX3 mul RYvue3 NY3 mul add RZvue3 NZ3 mul add def % FACE 4 % OC4 /XC4 M11 A neg mul CX add def /YC4 M21 A neg mul CY add def /ZC4 M31 A neg mul CZ add def % normale à la face 4 /NX4 M11 A neg mul def /NY4 M21 A neg mul def /NZ4 M31 A neg mul def % rayon vers point de vue /RXvue4 XC4 XpointVue sub def /RYvue4 YC4 YpointVue sub def /RZvue4 ZC4 ZpointVue sub def % produit scalaire /PS4 RXvue4 NX4 mul RYvue4 NY4 mul add RZvue4 NZ4 mul add def % FACE 5 % OC5 /XC5 M12 B neg mul CX add def /YC5 M22 B neg mul CY add def /ZC5 M32 B neg mul CZ add def % normale à la face 5 /NX5 M12 B neg mul def /NY5 M22 B neg mul def /NZ5 M32 B neg mul def % rayon vers point de vue /RXvue5 XC5 XpointVue sub def /RYvue5 YC5 YpointVue sub def /RZvue5 ZC5 ZpointVue sub def % produit scalaire /PS5 RXvue5 NX5 mul RYvue5 NY5 mul add RZvue5 NZ5 mul add def % FACE 6 % OC6 /XC6 M12 B mul CX add def /YC6 M22 B mul CY add def /ZC6 M32 B mul CZ add def % normale à la face 6 /NX6 M12 B mul def /NY6 M22 B mul def /NZ6 M32 B mul def % rayon vers point de vue /RXvue6 XC6 XpointVue sub def /RYvue6 YC6 YpointVue sub def /RZvue6 ZC6 ZpointVue sub def % produit scalaire /PS6 RXvue6 NX6 mul RYvue6 NY6 mul add RZvue6 NZ6 mul add def % faceOne PS1 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YA def /Zcote ZA def /Xabscisse XA def CalcCoordinates moveto /Zcote ZB def /Xabscisse XB def /Yordonnee YB def CalcCoordinates lineto /Zcote ZC def /Xabscisse XC def /Yordonnee YC def CalcCoordinates lineto /Zcote ZD def /Xabscisse XD def /Yordonnee YD def CalcCoordinates lineto /Zcote ZA def /Xabscisse XA def /Yordonnee YA def CalcCoordinates lineto closepath gsave CubeColorFaceOne setrgbcolor fill grestore stroke } if % faceTwo PS2 0 Condition{ % reduction reduction scale 1 setlinejoin newpath /Xabscisse XA def /Yordonnee YA def /Zcote ZA def CalcCoordinates moveto /Zcote ZD def /Xabscisse XD def /Yordonnee YD def CalcCoordinates lineto /Zcote ZH def /Xabscisse XH def /Yordonnee YH def CalcCoordinates lineto /Zcote ZE def /Xabscisse XE def /Yordonnee YE def CalcCoordinates lineto /Zcote ZA def /Xabscisse XA def /Yordonnee YA def CalcCoordinates lineto closepath gsave CubeColorFaceTwo setrgbcolor fill grestore stroke } if % face three PS3 0 Condition{ % reduction reduction scale 1 setlinejoin newpath /Xabscisse XE def /Yordonnee YE def /Zcote ZE def CalcCoordinates moveto /Zcote ZF def /Xabscisse XF def /Yordonnee YF def CalcCoordinates lineto /Zcote ZG def /Xabscisse XG def /Yordonnee YG def CalcCoordinates lineto /Zcote ZH def /Xabscisse XH def /Yordonnee YH def CalcCoordinates lineto /Zcote ZE def /Xabscisse XE def /Yordonnee YE def CalcCoordinates lineto closepath gsave CubeColorFaceThree setrgbcolor fill grestore stroke } if % face four PS4 0 Condition{ % reduction reduction scale 1 setlinejoin newpath /Xabscisse XB def /Yordonnee YB def /Zcote ZB def CalcCoordinates moveto /Zcote ZF def /Xabscisse XF def /Yordonnee YF def CalcCoordinates lineto /Zcote ZG def /Xabscisse XG def /Yordonnee YG def CalcCoordinates lineto /Zcote ZC def /Xabscisse XC def /Yordonnee YC def CalcCoordinates lineto /Zcote ZB def /Xabscisse XB def /Yordonnee YB def CalcCoordinates lineto closepath gsave CubeColorFaceFour setrgbcolor fill grestore stroke } if % face five PS5 0 Condition{ % reduction reduction scale 1 setlinejoin newpath /Xabscisse XC def /Yordonnee YC def /Zcote ZC def CalcCoordinates moveto /Zcote ZD def /Xabscisse XD def /Yordonnee YD def CalcCoordinates lineto /Zcote ZH def /Xabscisse XH def /Yordonnee YH def CalcCoordinates lineto /Zcote ZG def /Xabscisse XG def /Yordonnee YG def CalcCoordinates lineto /Zcote ZC def /Xabscisse XC def /Yordonnee YC def CalcCoordinates lineto closepath gsave CubeColorFaceFive setrgbcolor fill grestore stroke } if % face six PS6 0 Condition{ % reduction reduction scale 1 setlinejoin newpath /Xabscisse XB def /Yordonnee YB def /Zcote ZB def CalcCoordinates moveto /Zcote ZA def /Xabscisse XA def /Yordonnee YA def CalcCoordinates lineto /Zcote ZE def /Xabscisse XE def /Yordonnee YE def CalcCoordinates lineto /Zcote ZF def /Xabscisse XF def /Yordonnee YF def CalcCoordinates lineto /Zcote ZB def /Xabscisse XB def /Yordonnee YB def CalcCoordinates lineto closepath gsave CubeColorFaceSix setrgbcolor fill grestore stroke } if } def % /PointsDie{% PS6 0 Condition{ % reduction reduction scale A 2 div neg A A 2 div { /XCpoint exch def C 2 div neg C C 2 div { /ZCpoint exch def newpath /Zpoint Rpoint ZCpoint add def /Xpoint XCpoint def /Ypoint B def CalculsPointsAfterTransformations CalcCoordinates moveto 0 1 359 {% /Angle exch def /Zpoint Rpoint Angle cos mul ZCpoint add def /Xpoint Rpoint Angle sin mul XCpoint add def CalculsPointsAfterTransformations CalcCoordinates lineto } for closepath 0 setgray fill } for } for } if PS5 0 Condition{ % reduction reduction scale newpath /Ypoint B neg def /XCpoint A 2 div neg def /ZCpoint C 2 div def /Xpoint Rpoint XCpoint add def /Zpoint ZCpoint def CalculsPointsAfterTransformations CalcCoordinates moveto 0 1 359 {% /Angle exch def /Xpoint Rpoint Angle cos mul XCpoint add def /Zpoint Rpoint Angle sin mul ZCpoint add def CalculsPointsAfterTransformations CalcCoordinates lineto } for closepath 0 setgray fill % newpath /XCpoint A 2 div def /ZCpoint C 2 div neg def /Xpoint Rpoint XCpoint add def /Zpoint ZCpoint def CalculsPointsAfterTransformations CalcCoordinates moveto 0 1 359 {% /Angle exch def /Xpoint Rpoint Angle cos mul XCpoint add def /Zpoint Rpoint Angle sin mul ZCpoint add def CalculsPointsAfterTransformations CalcCoordinates lineto } for closepath 0 setgray fill % newpath /XCpoint 0 def /ZCpoint 0 def /Xpoint Rpoint XCpoint add def /Zpoint ZCpoint def CalculsPointsAfterTransformations CalcCoordinates moveto 0 1 359 {% /Angle exch def /Xpoint Rpoint Angle cos mul XCpoint add def /Zpoint Rpoint Angle sin mul ZCpoint add def CalculsPointsAfterTransformations CalcCoordinates lineto } for closepath 0 setgray fill } if PS4 0 Condition{ % reduction reduction scale C 2 div neg C C 2 div { /ZCpoint exch def B 2 div neg B B 2 div { /YCpoint exch def newpath /Zpoint Rpoint ZCpoint add def /Ypoint YCpoint def /Xpoint A neg def CalculsPointsAfterTransformations CalcCoordinates moveto 0 1 359 {% /Angle exch def /Zpoint Rpoint Angle cos mul ZCpoint add def /Ypoint Rpoint Angle sin mul YCpoint add def CalculsPointsAfterTransformations CalcCoordinates lineto } for closepath 0 setgray fill } for } for % le point du milieu newpath /Zpoint Rpoint def /Ypoint 0 def CalculsPointsAfterTransformations CalcCoordinates moveto 0 1 359 {% /Angle exch def /Zpoint Rpoint Angle cos mul def /Ypoint Rpoint Angle sin mul def CalculsPointsAfterTransformations CalcCoordinates lineto } for closepath 0 setgray fill } if PS3 0 Condition{ % reduction reduction scale A 2 div neg A A 2 div { /XCpoint exch def B 2 div neg B 2 div B 2 div { /YCpoint exch def newpath /Xpoint Rpoint XCpoint add def /Ypoint YCpoint def /Zpoint C neg def CalculsPointsAfterTransformations CalcCoordinates moveto 0 1 359 {% /Angle exch def /Xpoint Rpoint Angle cos mul XCpoint add def /Ypoint Rpoint Angle sin mul YCpoint add def CalculsPointsAfterTransformations CalcCoordinates lineto } for closepath 0 setgray fill } for } for } if PS2 0 Condition{ % reduction reduction scale newpath /Xpoint A def /Ypoint Rpoint B 2 div add def /Zpoint C 2 div neg def CalculsPointsAfterTransformations CalcCoordinates moveto 0 1 359 {% /Angle exch def /Ypoint Rpoint Angle cos mul B 2 div add def /Zpoint Rpoint Angle sin mul C 2 div sub def CalculsPointsAfterTransformations CalcCoordinates lineto } for closepath 0 setgray fill newpath /Xpoint A def /Ypoint Rpoint B 2 div sub def /Zpoint C 2 div def CalculsPointsAfterTransformations CalcCoordinates moveto 0 1 359 {% /Angle exch def /Xpoint A def /Ypoint Rpoint Angle cos mul B 2 div sub def /Zpoint Rpoint Angle sin mul A 2 div add def CalculsPointsAfterTransformations CalcCoordinates lineto } for closepath 0 setgray fill } if PS1 0 Condition{ % reduction reduction scale newpath /Xpoint Rpoint def /Ypoint 0 def /Zpoint C def CalculsPointsAfterTransformations CalcCoordinates moveto 0 1 359 {% /Angle exch def /Xpoint Rpoint Angle cos mul def /Ypoint Rpoint Angle sin mul def CalculsPointsAfterTransformations CalcCoordinates lineto } for closepath 0 setgray fill } if } def % /CalcCoordinates{% formulesTroisD % hv 2005-04-30 --->beg % Xi 28.45 mul Yi 28.45 mul Xi xUnit mul Yi yUnit mul % hv 2005-04-30 <---beg } def % pour la 3D conventionnelle /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 DScreen xObservateur mul zObservateur div def /Yi DScreen yObservateur mul zObservateur div def } 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 % /SommetsTetraedre{% /xA RayonBaseTetraedre neg def /yA 0 def /zA 0 def /xB 0.5 RayonBaseTetraedre mul def /yB RayonBaseTetraedre 0.866 mul neg def /zB 0 def /xC xB def /yC yB neg def /zC 0 def /xD 0 def /yD 0 def /zD RayonBaseTetraedre 1.414 mul def % coordonnées centre des faces /xFaceA xA xB xC add add 3 div def /yFaceA yA yB yC add add 3 div def /zFaceA zA zB zC add add 3 div def /xFaceB xD xA xB add add 3 div def /yFaceB yD yA yB add add 3 div def /zFaceB zD zA zB add add 3 div def /xFaceC xA xD xC add add 3 div def /yFaceC yA yD yC add add 3 div def /zFaceC zA zD zC add add 3 div def /xFaceD xD xB xC add add 3 div def /yFaceD yD yB yC add add 3 div def /zFaceD zD zB zC add add 3 div def % sommets après rotation et translation /XA M11 xA mul M12 yA mul add M13 zA mul add CX add def /YA M21 xA mul M22 yA mul add M23 zA mul add CY add def /ZA M31 xA mul M32 yA mul add M33 zA mul add CZ add def /XB M11 xB mul M12 yB mul add M13 zB mul add CX add def /YB M21 xB mul M22 yB mul add M23 zB mul add CY add def /ZB M31 xB mul M32 yB mul add M33 zB mul add CZ add def /XC M11 xC mul M12 yC mul add M13 zC mul add CX add def /YC M21 xC mul M22 yC mul add M23 zC mul add CY add def /ZC M31 xC mul M32 yC mul add M33 zC mul add CZ add def /XD M11 xD mul M12 yD mul add M13 zD mul add CX add def /YD M21 xD mul M22 yD mul add M23 zD mul add CY add def /ZD M31 xD mul M32 yD mul add M33 zD mul add CZ add def % centres de faces après transformations /XFaceA M11 xFaceA mul M12 yFaceA mul add M13 zFaceA mul add CX add def /YFaceA M21 xFaceA mul M22 yFaceA mul add M23 zFaceA mul add CY add def /ZFaceA M31 xFaceA mul M32 yFaceA mul add M33 zFaceA mul add CZ add def /XFaceB M11 xFaceB mul M12 yFaceB mul add M13 zFaceB mul add CX add def /YFaceB M21 xFaceB mul M22 yFaceB mul add M23 zFaceB mul add CY add def /ZFaceB M31 xFaceB mul M32 yFaceB mul add M33 zFaceB mul add CZ add def /XFaceC M11 xFaceC mul M12 yFaceC mul add M13 zFaceC mul add CX add def /YFaceC M21 xFaceC mul M22 yFaceC mul add M23 zFaceC mul add CY add def /ZFaceC M31 xFaceC mul M32 yFaceC mul add M33 zFaceC mul add CZ add def /XFaceD M11 xFaceD mul M12 yFaceD mul add M13 zFaceD mul add CX add def /YFaceD M21 xFaceD mul M22 yFaceD mul add M23 zFaceD mul add CY add def /ZFaceD M31 xFaceD mul M32 yFaceD mul add M33 zFaceD mul add CZ add def % Normales aux faces /NxA XFaceA XD sub def /NyA YFaceA YD sub def /NzA ZFaceA ZD sub def /NxB XFaceB XC sub def /NyB YFaceB YC sub def /NzB ZFaceB ZC sub def /NxC XFaceC XB sub def /NyC YFaceC YB sub def /NzC ZFaceC ZB sub def /NxD XFaceD XA sub def /NyD YFaceD YA sub def /NzD ZFaceD ZA sub def % Conditions de visibilité % rayon vers point de vue /RXvueA XFaceA XpointVue sub def /RYvueA YFaceA YpointVue sub def /RZvueA ZFaceA ZpointVue sub def /RXvueB XFaceB XpointVue sub def /RYvueB YFaceB YpointVue sub def /RZvueB ZFaceB ZpointVue sub def /RXvueC XFaceC XpointVue sub def /RYvueC YFaceC YpointVue sub def /RZvueC ZFaceC ZpointVue sub def /RXvueD XFaceD XpointVue sub def /RYvueD YFaceD YpointVue sub def /RZvueD ZFaceD ZpointVue sub def % produit scalaire /PSA RXvueA NxA mul RYvueA NyA mul add RZvueA NzA mul add def /PSB RXvueB NxB mul RYvueB NyB mul add RZvueB NzB mul add def /PSC RXvueC NxC mul RYvueC NyC mul add RZvueC NzC mul add def /PSD RXvueD NxD mul RYvueD NyD mul add RZvueD NzD mul add def } def /Tetraedre{% SommetsTetraedre % face ABC PSA 0 le { % reduction reduction scale 1 setlinejoin /Xabscisse XA def /Yordonnee YA def /Zcote ZA def CalcCoordinates moveto /Xabscisse XB def /Yordonnee YB def /Zcote ZB def CalcCoordinates lineto /Xabscisse XC def /Yordonnee YC def /Zcote ZC def CalcCoordinates lineto /Xabscisse XA def /Yordonnee YA def /Zcote ZA def CalcCoordinates lineto } if % face DAB PSB 0 le { % reduction reduction scale 1 setlinejoin /Xabscisse XD def /Yordonnee YD def /Zcote ZD def CalcCoordinates moveto /Xabscisse XA def /Yordonnee YA def /Zcote ZA def CalcCoordinates lineto /Xabscisse XB def /Yordonnee YB def /Zcote ZB def CalcCoordinates lineto /Xabscisse XD def /Yordonnee YD def /Zcote ZD def CalcCoordinates lineto } if % face DAC PSC 0 le { % reduction reduction scale 1 setlinejoin /Xabscisse XD def /Yordonnee YD def /Zcote ZD def CalcCoordinates moveto /Xabscisse XA def /Yordonnee YA def /Zcote ZA def CalcCoordinates lineto /Xabscisse XC def /Yordonnee YC def /Zcote ZC def CalcCoordinates lineto /Xabscisse XD def /Yordonnee YD def /Zcote ZD def CalcCoordinates lineto } if % face DBC PSD 0 le { % reduction reduction scale 1 setlinejoin /Xabscisse XD def /Yordonnee YD def /Zcote ZD def CalcCoordinates moveto /Xabscisse XB def /Yordonnee YB def /Zcote ZB def CalcCoordinates lineto /Xabscisse XC def /Yordonnee YC def /Zcote ZC def CalcCoordinates lineto /Xabscisse XD def /Yordonnee YD def /Zcote ZD def CalcCoordinates lineto } if } def % /SommetsPyramide{% /xA A def /yA A neg def /zA 0 def /xB A def /yB A def /zB 0 def /xC A neg def /yC A def /zC 0 def /xD A neg def /yD A neg def /zD 0 def /xS 0 def /yS 0 def /zS Hpyramide def % coordonnées centre des faces /Alpha A Hpyramide atan def /xFaceSAB Hpyramide Alpha dup sin exch cos mul mul def /yFaceSAB 0 def /zFaceSAB Hpyramide Alpha sin dup mul mul def /xFaceSBC 0 def /yFaceSBC xFaceSAB def /zFaceSBC zFaceSAB fracHeight mul def /xFaceSCD xFaceSAB neg def /yFaceSCD 0 def /zFaceSCD zFaceSAB fracHeight mul def /xFaceSDA 0 def /yFaceSDA xFaceSAB neg def /zFaceSDA zFaceSAB fracHeight mul def % sommets après rotation et translation /XA M11 xA mul M12 yA mul add M13 zA mul add CX add def /YA M21 xA mul M22 yA mul add M23 zA mul add CY add def /ZA M31 xA mul M32 yA mul add M33 zA mul add CZ add def /XB M11 xB mul M12 yB mul add M13 zB mul add CX add def /YB M21 xB mul M22 yB mul add M23 zB mul add CY add def /ZB M31 xB mul M32 yB mul add M33 zB mul add CZ add def /XC M11 xC mul M12 yC mul add M13 zC mul add CX add def /YC M21 xC mul M22 yC mul add M23 zC mul add CY add def /ZC M31 xC mul M32 yC mul add M33 zC mul add CZ add def /XD M11 xD mul M12 yD mul add M13 zD mul add CX add def /YD M21 xD mul M22 yD mul add M23 zD mul add CY add def /ZD M31 xD mul M32 yD mul add M33 zD mul add CZ add def /XS M11 xS mul M12 yS mul add M13 zS mul add CX add def /YS M21 xS mul M22 yS mul add M23 zS mul add CY add def /ZS M31 xS mul M32 yS mul add M33 zS mul add CZ add def % centres de faces après transformations /XFaceSAB M11 xFaceSAB mul M12 yFaceSAB mul add M13 zFaceSAB mul add CX add def /YFaceSAB M21 xFaceSAB mul M22 yFaceSAB mul add M23 zFaceSAB mul add CY add def /ZFaceSAB M31 xFaceSAB mul M32 yFaceSAB mul add M33 zFaceSAB mul add CZ add def /XFaceSBC M11 xFaceSBC mul M12 yFaceSBC mul add M13 zFaceSBC mul add CX add def /YFaceSBC M21 xFaceSBC mul M22 yFaceSBC mul add M23 zFaceSBC mul add CY add def /ZFaceSBC M31 xFaceSBC mul M32 yFaceSBC mul add M33 zFaceSBC mul add CZ add def /XFaceSCD M11 xFaceSCD mul M12 yFaceSCD mul add M13 zFaceSCD mul add CX add def /YFaceSCD M21 xFaceSCD mul M22 yFaceSCD mul add M23 zFaceSCD mul add CY add def /ZFaceSCD M31 xFaceSCD mul M32 yFaceSCD mul add M33 zFaceSCD mul add CZ add def /XFaceSDA M11 xFaceSDA mul M12 yFaceSDA mul add M13 zFaceSDA mul add CX add def /YFaceSDA M21 xFaceSDA mul M22 yFaceSDA mul add M23 zFaceSDA mul add CY add def /ZFaceSDA M31 xFaceSDA mul M32 yFaceSDA mul add M33 zFaceSDA mul add CZ add def % Normales aux faces /NxSAB XFaceSAB CX sub def /NySAB YFaceSAB CY sub def /NzSAB ZFaceSAB CZ sub def /NxSBC XFaceSBC CX sub def /NySBC YFaceSBC CY sub def /NzSBC ZFaceSBC CZ sub def /NxSCD XFaceSCD CX sub def /NySCD YFaceSCD CY sub def /NzSCD ZFaceSCD CZ sub def /NxSDA XFaceSDA CX sub def /NySDA YFaceSDA CY sub def /NzSDA ZFaceSDA CZ sub def /NxABCD CX XS sub def /NyABCD CY YS sub def /NzABCD CZ ZS sub def % Conditions de visibilité % rayon vers point de vue /RXvueSAB XFaceSAB XpointVue sub def /RYvueSAB YFaceSAB YpointVue sub def /RZvueSAB ZFaceSAB ZpointVue sub def /RXvueSBC XFaceSBC XpointVue sub def /RYvueSBC YFaceSBC YpointVue sub def /RZvueSBC ZFaceSBC ZpointVue sub def /RXvueSCD XFaceSCD XpointVue sub def /RYvueSCD YFaceSCD YpointVue sub def /RZvueSCD ZFaceSCD ZpointVue sub def /RXvueSDA XFaceSDA XpointVue sub def /RYvueSDA YFaceSDA YpointVue sub def /RZvueSDA ZFaceSDA ZpointVue sub def /RXvueABCD CX XpointVue sub def /RYvueABCD CY YpointVue sub def /RZvueABCD CZ ZpointVue sub def /PSAB RXvueSAB NxSAB mul RYvueSAB NySAB mul add RZvueSAB NzSAB mul add def /PSBC RXvueSBC NxSBC mul RYvueSBC NySBC mul add RZvueSBC NzSBC mul add def /PSCD RXvueSCD NxSCD mul RYvueSCD NySCD mul add RZvueSCD NzSCD mul add def /PSDA RXvueSDA NxSDA mul RYvueSDA NySDA mul add RZvueSDA NzSDA mul add def /PSABCD RXvueABCD NxABCD mul RYvueABCD NyABCD mul add RZvueABCD NzABCD mul add def } def % /MaillageSphere { 0 increment 360 increment sub {% /theta exch def departPhi increment 90 increment sub {% /phi exch def % newpath /Xpoint Rsphere theta cos mul phi cos mul def /Ypoint Rsphere theta sin mul phi cos mul def /Zpoint Rsphere phi sin mul def CalculsPointsAfterTransformations CalcCoordinates moveto % Centre de la facette /Xpoint Rsphere theta increment 2 div add cos mul phi increment 2 div add cos mul def /Ypoint Rsphere theta increment 2 div add sin mul phi increment 2 div add cos mul def /Zpoint Rsphere phi increment 2 div add sin mul def CalculsPointsAfterTransformations /xCentreFacette Xabscisse def /yCentreFacette Yordonnee def /zCentreFacette Zcote def % normale à la facette /nXfacette xCentreFacette CX sub def /nYfacette yCentreFacette CY sub def /nZfacette zCentreFacette CZ sub def % rayon vers point de vue /RXvue xCentreFacette XpointVue sub def /RYvue yCentreFacette YpointVue sub def /RZvue zCentreFacette ZpointVue sub def % test de visibilité /PSfacette RXvue nXfacette mul RYvue nYfacette mul add RZvue nZfacette mul add def condition { theta 1 theta increment add {% /theta1 exch def /Xpoint Rsphere theta1 cos mul phi cos mul def /Ypoint Rsphere theta1 sin mul phi cos mul def /Zpoint Rsphere phi sin mul def CalculsPointsAfterTransformations CalcCoordinates lineto } for phi 1 phi increment add { /phi1 exch def /Xpoint Rsphere theta increment add cos mul phi1 cos mul def /Ypoint Rsphere theta increment add sin mul phi1 cos mul def /Zpoint Rsphere phi1 sin mul def CalculsPointsAfterTransformations CalcCoordinates lineto } for theta increment add -1 theta {% /theta1 exch def /Xpoint Rsphere theta1 cos mul phi increment add cos mul def /Ypoint Rsphere theta1 sin mul phi increment add cos mul def /Zpoint Rsphere phi increment add sin mul def CalculsPointsAfterTransformations CalcCoordinates lineto } for phi increment add -1 phi { /phi1 exch def /Xpoint Rsphere theta cos mul phi1 cos mul def /Ypoint Rsphere theta sin mul phi1 cos mul def /Zpoint Rsphere phi1 sin mul def CalculsPointsAfterTransformations CalcCoordinates lineto } for } if } for } for } def % /CylinderThreeD{ reduction reduction scale 1 setlinejoin 0 incrementANGLE 360 {% /theta exch def 0 incrementHAUTEUR Hcylindre incrementHAUTEUR sub {% /H exch def % newpath /X1 Rcylindre theta cos mul def /Y1 Rcylindre theta sin mul def /Z1 H def /Xpoint X1 def /Ypoint Y1 def /Zpoint Z1 def CalculsPointsAfterTransformations /Xfacette Xabscisse def /Yfacette Yordonnee def /Zfacette Zcote def CalcCoordinates moveto % coordonnées du centre de la facette /Xpoint Rcylindre theta incrementANGLE 2 div add cos mul def /Ypoint Rcylindre theta incrementANGLE 2 div add sin mul def /Zpoint H incrementHAUTEUR 2 div add def CalculsPointsAfterTransformations % Point sur l'axe du cylindre % à la même hauteur que M1 /Zpoint Z1 def /Xpoint 0 def /Ypoint 0 def CalculsPointsAfterTransformations % normale à la facette /nXfacette Xfacette Xabscisse sub def /nYfacette Yfacette Yordonnee sub def /nZfacette Zfacette Zcote sub def % rayon vers point de vue /RXvue Xfacette XpointVue sub def /RYvue Yfacette YpointVue sub def /RZvue Zfacette ZpointVue sub def % test de visibilité /PSfacette nXfacette RXvue mul nYfacette RYvue mul add nZfacette RZvue mul add def PSfacette 0 le { theta 1 theta incrementANGLE add {% /theta1 exch def /Xpoint Rcylindre theta1 cos mul def /Ypoint Rcylindre theta1 sin mul def /Zpoint H def CalculsPointsAfterTransformations CalcCoordinates lineto } for H 1 H incrementHAUTEUR add { /H1 exch def /Xpoint Rcylindre theta incrementANGLE add cos mul def /Ypoint Rcylindre theta incrementANGLE add sin mul def /Zpoint H1 def CalculsPointsAfterTransformations CalcCoordinates lineto } for theta incrementANGLE add -1 theta {% /theta1 exch def /Xpoint Rcylindre theta1 cos mul def /Ypoint Rcylindre theta1 sin mul def /Zpoint H incrementHAUTEUR add def CalculsPointsAfterTransformations CalcCoordinates lineto } for H incrementHAUTEUR add -1 H { /H1 exch def /Xpoint Rcylindre theta cos mul def /Ypoint Rcylindre theta sin mul def /Zpoint H1 def CalculsPointsAfterTransformations CalcCoordinates lineto } for } if } for } for % Face supérieure % centre de la face supérieure /Xpoint 0 def /Zpoint Hcylindre def /Ypoint 0 def CalculsPointsAfterTransformations /CxFaceSup Xabscisse def /CyFaceSup Yordonnee def /CzFaceSup Zcote def % centre de la face inférieure /CxFaceInf CX def /CyFaceInf CY def /CzFaceInf CZ def % Normale à la face supérieure /nXFaceSup CxFaceSup CxFaceInf sub def /nYFaceSup CyFaceSup CyFaceInf sub def /nZFaceSup CzFaceSup CzFaceInf sub def % rayon vers point de vue verd la face inférieure /RXvueInf CxFaceInf XpointVue sub def /RYvueInf CyFaceInf YpointVue sub def /RZvueInf CzFaceInf ZpointVue sub def % rayon vers point de vue verd la face supérieure /RXvueSup CxFaceSup XpointVue sub def /RYvueSup CyFaceSup YpointVue sub def /RZvueSup CzFaceSup ZpointVue sub def % Visibilité face supérieure /PSfaceSup RXvueSup nXFaceSup mul RYvueSup nYFaceSup mul add RZvueSup nZFaceSup mul add def % Visibilité face inférieure /PSfaceInf RXvueInf nXFaceSup neg mul RYvueInf nYFaceSup mul sub RZvueInf nZFaceSup mul sub def PSfaceSup 0 le { /TableauxPoints [ 0 1 359 {% on décrit le cercle /theta exch def [ /Xpoint Rcylindre theta cos mul def /Ypoint Rcylindre theta sin mul def /Zpoint Hcylindre def CalculsPointsAfterTransformations CalcCoordinates ] } for ] def gsave newpath TableauxPoints 0 get aload pop moveto 0 1 359 { /compteur exch def TableauxPoints compteur get aload pop lineto } for 0.7 setgray closepath fill grestore } if % face inférieure PSfaceInf 0 le { /TableauxPoints [ 0 1 359 {% on décrit le cercle /theta exch def [ /Xpoint Rcylindre theta cos mul def /Ypoint Rcylindre theta sin mul def /Zpoint 0 def CalculsPointsAfterTransformations CalcCoordinates ] } for ] def gsave newpath TableauxPoints 0 get aload pop moveto 0 1 359 { /compteur exch def TableauxPoints compteur get aload pop lineto } for 0.7 setgray closepath fill grestore } if } def % % /ConeThreeD{ /AngleCone Rcone Hcone atan def /TanAngleCone AngleCone dup sin exch cos div def /incrementANGLE 10 def /incrementHAUTEUR Hcone fracHeight mul 5 div def 1 setlinejoin newpath 0 incrementANGLE 360 {% /theta exch def 0 incrementHAUTEUR Hcone fracHeight mul incrementHAUTEUR sub {% /H exch def % normale à la facette /nXfacette Hcone AngleCone dup sin exch cos mul theta incrementANGLE 2 div add cos mul mul def /nYfacette Hcone AngleCone dup sin exch cos mul theta incrementANGLE 2 div add sin mul mul def /nZfacette Hcone AngleCone sin dup mul mul def /Xpoint nXfacette def /Ypoint nYfacette def /Zpoint nZfacette def CalculsPointsAfterTransformations /nXfacette Xabscisse CX sub def /nYfacette Yordonnee CY sub def /nZfacette Zcote CZ sub def % /OK Hcone H sub TanAngleCone mul def /Xpoint OK theta cos mul def /Ypoint OK theta sin mul def /Zpoint H def CalculsPointsAfterTransformations /Xfacette Xabscisse def /Yfacette Yordonnee def /Zfacette Zcote def CalcCoordinates moveto % coordonnées du centre de la facette /OK Hcone H incrementHAUTEUR 2 div add sub TanAngleCone mul def /Xpoint OK theta incrementANGLE 2 div add cos mul def /Ypoint OK theta incrementANGLE 2 div add sin mul def /Zpoint H incrementHAUTEUR 2 div add def CalculsPointsAfterTransformations /XcentreFacette Xabscisse def /YcentreFacette Yordonnee def /ZcentreFacette Zcote def % rayon vers point de vue /RXvue XcentreFacette XpointVue sub def /RYvue YcentreFacette YpointVue sub def /RZvue ZcentreFacette ZpointVue sub def % test de visibilité /PSfacette nXfacette RXvue mul nYfacette RYvue mul add nZfacette RZvue mul add def PSfacette 0 le { theta 1 theta incrementANGLE add {% /theta1 exch def /OK Hcone H sub TanAngleCone mul def /Xpoint OK theta1 cos mul def /Ypoint OK theta1 sin mul def /Zpoint H def CalculsPointsAfterTransformations CalcCoordinates lineto } for H 1 H incrementHAUTEUR add { /H1 exch def /OK Hcone H1 sub TanAngleCone mul def /Xpoint OK theta incrementANGLE add cos mul def /Ypoint OK theta incrementANGLE add sin mul def /Zpoint H1 def CalculsPointsAfterTransformations CalcCoordinates lineto } for theta incrementANGLE add -1 theta {% /theta1 exch def /OK Hcone H incrementHAUTEUR add sub TanAngleCone mul def /Xpoint OK theta1 cos mul def /Ypoint OK theta1 sin mul def /Zpoint H incrementHAUTEUR add def CalculsPointsAfterTransformations CalcCoordinates lineto } for H incrementHAUTEUR add -1 H { /H1 exch def /OK Hcone H1 sub TanAngleCone mul def /Xpoint OK theta cos mul def /Ypoint OK theta sin mul def /Zpoint H1 def CalculsPointsAfterTransformations CalcCoordinates lineto } for } if } for } for % centre de la base inférieure après transformations /CxFaceInf CX def /CyFaceInf CY def /CzFaceInf CZ def % modification du 16/11/2002 % /Xpoint CxFaceInf def % /Ypoint CyFaceInf def % /Zpoint CzFaceInf def /Xpoint 0 def /Ypoint 0 def /Zpoint 0 def % fin modification du 16/11/2002 CalculsPointsAfterTransformations /CxBaseInf Xabscisse def /CyBaseInf Yordonnee def /CzBaseInf Zcote def % centre de la base supérieure avant transformations /CxFaceSup 0 def /CyFaceSup 0 def /CzFaceSup Hcone fracHeight mul def % Sommet du cone /Xpoint 0 def /Ypoint 0 def /Zpoint Hcone def CalculsPointsAfterTransformations /XsommetCone Xabscisse def /YsommetCone Yordonnee def /ZsommetCone Zcote def % Normale extérieure à la base inférieure /nXBaseInf CxFaceInf XsommetCone sub def /nYBaseInf CyFaceInf YsommetCone sub def /nZBaseInf CzFaceInf ZsommetCone sub def % centre de la base supérieure /Xpoint CxFaceSup def /Ypoint CyFaceSup def /Zpoint CzFaceSup def CalculsPointsAfterTransformations /CxBaseSup Xabscisse def /CyBaseSup Yordonnee def /CzBaseSup Zcote def % Normale extérieure à la base supérieure /nXBaseSup XsommetCone CxFaceSup sub def /nYBaseSup YsommetCone CyFaceSup sub def /nZBaseSup ZsommetCone CzFaceSup sub def % rayon vers point de vue /RXvueSup CxBaseSup XpointVue sub def /RYvueSup CyBaseSup YpointVue sub def /RZvueSup CzBaseSup ZpointVue sub def /RXvueInf CxBaseInf XpointVue sub def /RYvueInf CyBaseInf YpointVue sub def /RZvueInf CzBaseInf ZpointVue sub def % Visibilité de la base inférieure /PSbaseInfCone nXBaseInf RXvueInf mul nYBaseInf RYvueInf mul add nZBaseInf RZvueInf mul add def % Visibilité de la base supérieure /PSbaseSupCone nXBaseSup RXvueSup mul nYBaseSup RYvueSup mul add nZBaseSup RZvueSup mul add def PSbaseInfCone 0 le { /TableauxPoints [ 0 1 359 {% on décrit le cercle /theta exch def [ /Xpoint Rcone theta cos mul def /Ypoint Rcone theta sin mul def /Zpoint 0 def CalculsPointsAfterTransformations CalcCoordinates ] } for ] def gsave newpath TableauxPoints 0 get aload pop moveto 0 1 359 { /compteur exch def TableauxPoints compteur get aload pop lineto } for 0.7 setgray closepath fill grestore } if %% PSbaseSupCone 0 le { %% modifié le 31/10/2003 %PSbaseSupCone 0 ge { PSbaseSupCone 0 le { /TableauxPoints [ 0 1 359 {% on décrit le cercle /theta exch def [ /OK Hcone 1 fracHeight sub mul TanAngleCone mul def /Xpoint OK theta cos mul def /Ypoint OK theta sin mul def /Zpoint Hcone fracHeight mul def CalculsPointsAfterTransformations CalcCoordinates ] } for ] def gsave newpath TableauxPoints 0 get aload pop moveto 0 1 359 { /compteur exch def TableauxPoints compteur get aload pop lineto } for 0.7 setgray closepath fill grestore } if } def /PortionSphere{% /Xpoint Rsphere psTHETA dTHETA neg add cos mul psPHI dPHI sub cos mul def /Ypoint Rsphere psTHETA dTHETA neg add sin mul psPHI dPHI sub cos mul def /Zpoint Rsphere psPHI dPHI sub sin mul def CalculsPointsAfterTransformations /xCentreFacette Xabscisse def /yCentreFacette Yordonnee def /zCentreFacette Zcote def % normale à la facette /nXfacette xCentreFacette CX sub def /nYfacette yCentreFacette CY sub def /nZfacette zCentreFacette CZ sub def % rayon vers point de vue /RXvue xCentreFacette XpointVue sub def /RYvue yCentreFacette YpointVue sub def /RZvue zCentreFacette ZpointVue sub def % test de visibilité /PSfacette RXvue nXfacette mul RYvue nYfacette mul add RZvue nZfacette mul add def PSfacette 0 le { CalcCoordinates newpath moveto psTHETA dTHETA sub 1 psTHETA dTHETA add { /Theta exch def /Xpoint Rsphere Theta cos psPHI dPHI sub cos mul mul def /Ypoint Rsphere Theta sin psPHI dPHI sub cos mul mul def /Zpoint Rsphere psPHI dPHI sub sin mul def CalculsPointsAfterTransformations CalcCoordinates lineto } for psPHI dPHI sub 1 psPHI dPHI add { /Phi exch def /Xpoint Rsphere psTHETA dTHETA add cos Phi cos mul mul def /Ypoint Rsphere psTHETA dTHETA add sin Phi cos mul mul def /Zpoint Rsphere Phi sin mul def CalculsPointsAfterTransformations CalcCoordinates lineto } for psTHETA dTHETA add -1 psTHETA dTHETA sub { /Theta exch def /Xpoint Rsphere Theta cos psPHI dPHI add cos mul mul def /Ypoint Rsphere Theta sin psPHI dPHI add cos mul mul def /Zpoint Rsphere psPHI dPHI add sin mul def CalculsPointsAfterTransformations CalcCoordinates lineto } for psPHI dPHI add -1 psPHI dPHI sub { /Phi exch def /Xpoint Rsphere psTHETA dTHETA sub cos Phi cos mul mul def /Ypoint Rsphere psTHETA dTHETA sub sin Phi cos mul mul def /Zpoint Rsphere Phi sin mul def CalculsPointsAfterTransformations CalcCoordinates lineto } for closepath } if } def % Dodecahedron : 31 décembre 2003 % datas : Graphisme scientifique R.Dony % Masson ed. page 240 /Dodecahedron{% /XA M11 0 mul M12 A 0.607062 mul mul add M13 A mul 0.794655 mul add CX add def /YA M21 0 mul M22 A 0.607062 mul mul add M23 A mul 0.794655 mul add CY add def /ZA M31 0 mul M32 A 0.607062 mul mul add M33 A mul 0.794655 mul add CZ add def /XB M11 A mul -0.5773503 mul M12 A mul 0.1875925 mul add M13 A mul 0.7946545 mul add CX add def /YB M21 A mul -0.5773503 mul M22 A mul 0.1875925 mul add M23 A mul 0.7946545 mul add CY add def /ZB M31 A mul -0.5773503 mul M32 A mul 0.1875925 mul add M33 A mul 0.7946545 mul add CZ add def /XC M11 A mul -0.3568221 mul M12 A mul -0.4911235 mul add M13 A mul 0.7946545 mul add CX add def /YC M21 A mul -0.3568221 mul M22 A mul -0.4911235 mul add M23 A mul 0.7946545 mul add CY add def /ZC M31 A mul -0.3568221 mul M32 A mul -0.4911235 mul add M33 A mul 0.7946545 mul add CZ add def /XD M11 A mul 0.3568221 mul M12 A mul -0.4911235 mul add M13 A mul 0.7946545 mul add CX add def /YD M21 A mul 0.3568221 mul M22 A mul -0.4911235 mul add M23 A mul 0.7946545 mul add CY add def /ZD M31 A mul 0.3568221 mul M32 A mul -0.4911235 mul add M33 A mul 0.7946545 mul add CZ add def /XE M11 A mul 0.5773503 mul M12 A mul 0.1875925 mul add M13 A mul 0.7946545 mul add CX add def /YE M21 A mul 0.5773503 mul M22 A mul 0.1875925 mul add M23 A mul 0.7946545 mul add CY add def /ZE M31 A mul 0.5773503 mul M32 A mul 0.1875925 mul add M33 A mul 0.7946545 mul add CZ add def /XF M11 A mul 0 mul M12 A mul 0.982247 mul add M13 A mul 0.175925 mul add CX add def /YF M21 A mul 0 mul M22 A mul 0.982247 mul add M23 A mul 0.175925 mul add CY add def /ZF M31 A mul 0 mul M32 A mul 0.982247 mul add M33 A mul 0.175925 mul add CZ add def /XG M11 A mul -0.9341724 mul M12 A mul 0.303531 mul add M13 A mul 0.1875925 mul add CX add def /YG M21 A mul -0.9341724 mul M22 A mul 0.303531 mul add M23 A mul 0.1875925 mul add CY add def /ZG M31 A mul -0.9341724 mul M32 A mul 0.303531 mul add M33 A mul 0.1875925 mul add CZ add def /XH M11 A mul -0.5773503 mul M12 A mul -0.7946545 mul add M13 A mul 0.1875925 mul add CX add def /YH M21 A mul -0.5773503 mul M22 A mul -0.7946545 mul add M23 A mul 0.1875925 mul add CY add def /ZH M31 A mul -0.5773503 mul M32 A mul -0.7946545 mul add M33 A mul 0.1875925 mul add CZ add def /XI M11 A mul 0.5773503 mul M12 A mul -0.7946545 mul add M13 A mul 0.1875925 mul add CX add def /YI M21 A mul 0.5773503 mul M22 A mul -0.7946545 mul add M23 A mul 0.1875925 mul add CY add def /ZI M31 A mul 0.5773503 mul M32 A mul -0.7946545 mul add M33 A mul 0.1875925 mul add CZ add def /XJ M11 A mul 0.9341724 mul M12 A mul 0.303531 mul add M13 A mul 0.1875925 mul add CX add def /YJ M21 A mul 0.9341724 mul M22 A mul 0.303531 mul add M23 A mul 0.1875925 mul add CY add def /ZJ M31 A mul 0.9341724 mul M32 A mul 0.303531 mul add M33 A mul 0.1875925 mul add CZ add def /XK M11 A mul 0 mul M12 A mul -0.982247 mul add M13 A mul -0.1875925 mul add CX add def /YK M21 A mul 0 mul M22 A mul -0.982247 mul add M23 A mul -0.1875925 mul add CY add def /ZK M31 A mul 0 mul M32 A mul -0.982247 mul add M33 A mul -0.1875925 mul add CZ add def /XL M11 A mul 0.9341724 mul M12 A mul -0.303531 mul add M13 A mul -0.1875925 mul add CX add def /YL M21 A mul 0.9341724 mul M22 A mul -0.303531 mul add M23 A mul -0.1875925 mul add CY add def /ZL M31 A mul 0.9341724 mul M32 A mul -0.303531 mul add M33 A mul -0.1875925 mul add CZ add def /XM M11 A mul 0.5773503 mul M12 A mul 0.7946545 mul add M13 A mul -0.1875925 mul add CX add def /YM M21 A mul 0.5773503 mul M22 A mul 0.7946545 mul add M23 A mul -0.1875925 mul add CY add def /ZM M31 A mul 0.5773503 mul M32 A mul 0.7946545 mul add M33 A mul -0.1875925 mul add CZ add def /XN M11 A mul -0.5773503 mul M12 A mul 0.7946545 mul add M13 A mul -0.1875925 mul add CX add def /YN M21 A mul -0.5773503 mul M22 A mul 0.7946545 mul add M23 A mul -0.1875925 mul add CY add def /ZN M31 A mul -0.5773503 mul M32 A mul 0.7946545 mul add M33 A mul -0.1875925 mul add CZ add def /XO M11 A mul -0.9341724 mul M12 A mul -0.303531 mul add M13 A mul -0.1875925 mul add CX add def /YO M21 A mul -0.9341724 mul M22 A mul -0.303531 mul add M23 A mul -0.1875925 mul add CY add def /ZO M31 A mul -0.9341724 mul M32 A mul -0.303531 mul add M33 A mul -0.1875925 mul add CZ add def /XP M11 A mul -0.5773503 mul M12 A mul -0.1875925 mul add M13 A mul -0.7946545 mul add CX add def /YP M21 A mul -0.5773503 mul M22 A mul -0.1875925 mul add M23 A mul -0.7946545 mul add CY add def /ZP M31 A mul -0.5773503 mul M32 A mul -0.1875925 mul add M33 A mul -0.7946545 mul add CZ add def /XQ M11 A mul -0.3568221 mul M12 A mul 0.4911235 mul add M13 A mul -0.7946545 mul add CX add def /YQ M21 A mul -0.3568221 mul M22 A mul 0.4911235 mul add M23 A mul -0.7946545 mul add CY add def /ZQ M31 A mul -0.3568221 mul M32 A mul 0.4911235 mul add M33 A mul -0.7946545 mul add CZ add def /XR M11 A mul 0.3568221 mul M12 A mul 0.4911235 mul add M13 A mul -0.7946545 mul add CX add def /YR M21 A mul 0.3568221 mul M22 A mul 0.4911235 mul add M23 A mul -0.7946545 mul add CY add def /ZR M31 A mul 0.3568221 mul M32 A mul 0.4911235 mul add M33 A mul -0.7946545 mul add CZ add def /XS M11 A mul 0.5773503 mul M12 A mul -0.1875925 mul add M13 A mul -0.7946545 mul add CX add def /YS M21 A mul 0.5773503 mul M22 A mul -0.1875925 mul add M23 A mul -0.7946545 mul add CY add def /ZS M31 A mul 0.5773503 mul M32 A mul -0.1875925 mul add M33 A mul -0.7946545 mul add CZ add def /XT M11 0 mul M12 A -0.607062 mul mul add M13 A mul -0.794655 mul add CX add def /YT M21 0 mul M22 A -0.607062 mul mul add M23 A mul -0.794655 mul add CY add def /ZT M31 0 mul M32 A -0.607062 mul mul add M33 A mul -0.794655 mul add CZ add def % Centres des faces : condition de visibilité % FACE 1 pentagone régulier ABCDE % OC1 /XC1 XA XB add XC add XD add XE add 5 div def /YC1 YA YB add YC add YD add YE add 5 div def /ZC1 ZA ZB add ZC add ZD add ZE add 5 div def % Normale à la face 1 /NX1 XC1 CX sub def /NY1 YC1 CY sub def /NZ1 ZC1 CZ sub def % rayon vers point de vue /RXvue1 XC1 XpointVue sub def /RYvue1 YC1 YpointVue sub def /RZvue1 ZC1 ZpointVue sub def % produit scalaire /PS1 RXvue1 NX1 mul RYvue1 NY1 mul add RZvue1 NZ1 mul add def % FACE 2 pentagone régulier EDILJ % OC2 /XC2 XE XD add XI add XL add XJ add 5 div def /YC2 YE YD add YI add YL add YJ add 5 div def /ZC2 ZE ZD add ZI add ZL add ZJ add 5 div def % Normale à la face 2 /NX2 XC2 CX sub def /NY2 YC2 CY sub def /NZ2 ZC2 CZ sub def % rayon vers point de vue /RXvue2 XC2 XpointVue sub def /RYvue2 YC2 YpointVue sub def /RZvue2 ZC2 ZpointVue sub def % produit scalaire /PS2 RXvue2 NX2 mul RYvue2 NY2 mul add RZvue2 NZ2 mul add def % FACE 3 pentagone régulier EJMFA % OC3 /XC3 XE XJ add XM add XF add XA add 5 div def /YC3 YE YJ add YM add YF add YA add 5 div def /ZC3 ZE ZJ add ZM add ZF add ZA add 5 div def % Normale à la face 2 /NX3 XC3 CX sub def /NY3 YC3 CY sub def /NZ3 ZC3 CZ sub def % rayon vers point de vue /RXvue3 XC3 XpointVue sub def /RYvue3 YC3 YpointVue sub def /RZvue3 ZC3 ZpointVue sub def % produit scalaire /PS3 RXvue3 NX3 mul RYvue3 NY3 mul add RZvue3 NZ3 mul add def % FACE 4 pentagone régulier AFNGB % OC4 /XC4 XA XF add XN add XG add XB add 5 div def /YC4 YA YF add YN add YG add YB add 5 div def /ZC4 ZA ZF add ZN add ZG add ZB add 5 div def % Normale à la face 4 /NX4 XC4 CX sub def /NY4 YC4 CY sub def /NZ4 ZC4 CZ sub def % rayon vers point de vue /RXvue4 XC4 XpointVue sub def /RYvue4 YC4 YpointVue sub def /RZvue4 ZC4 ZpointVue sub def % produit scalaire /PS4 RXvue4 NX4 mul RYvue4 NY4 mul add RZvue4 NZ4 mul add def % FACE 5 pentagone régulier BGOHC % OC5 /XC5 XB XG add XO add XH add XC add 5 div def /YC5 YB YG add YO add YH add YC add 5 div def /ZC5 ZB ZG add ZO add ZH add ZC add 5 div def % Normale à la face 5 /NX5 XC5 CX sub def /NY5 YC5 CY sub def /NZ5 ZC5 CZ sub def % rayon vers point de vue /RXvue5 XC5 XpointVue sub def /RYvue5 YC5 YpointVue sub def /RZvue5 ZC5 ZpointVue sub def % produit scalaire /PS5 RXvue5 NX5 mul RYvue5 NY5 mul add RZvue5 NZ5 mul add def % FACE 6 pentagone régulier CHKID % OC6 /XC6 XC XH add XK add XI add XD add 5 div def /YC6 YC YH add YK add YI add YD add 5 div def /ZC6 ZC ZH add ZK add ZI add ZD add 5 div def % Normale à la face 6 /NX6 XC6 CX sub def /NY6 YC6 CY sub def /NZ6 ZC6 CZ sub def % rayon vers point de vue /RXvue6 XC6 XpointVue sub def /RYvue6 YC6 YpointVue sub def /RZvue6 ZC6 ZpointVue sub def % produit scalaire /PS6 RXvue6 NX6 mul RYvue6 NY6 mul add RZvue6 NZ6 mul add def % FACE 7 pentagone régulier KTSLI % OC7 /XC7 XK XT add XS add XL add XI add 5 div def /YC7 YK YT add YS add YL add YI add 5 div def /ZC7 ZK ZT add ZS add ZL add ZI add 5 div def % Normale à la face 7 /NX7 XC7 CX sub def /NY7 YC7 CY sub def /NZ7 ZC7 CZ sub def % rayon vers point de vue /RXvue7 XC7 XpointVue sub def /RYvue7 YC7 YpointVue sub def /RZvue7 ZC7 ZpointVue sub def % produit scalaire /PS7 RXvue7 NX7 mul RYvue7 NY7 mul add RZvue7 NZ7 mul add def % FACE 8 pentagone régulier LSRMJ % OC8 /XC8 XL XS add XR add XM add XJ add 5 div def /YC8 YL YS add YR add YM add YJ add 5 div def /ZC8 ZL ZS add ZR add ZM add ZJ add 5 div def % Normale à la face 8 /NX8 XC8 CX sub def /NY8 YC8 CY sub def /NZ8 ZC8 CZ sub def % rayon vers point de vue /RXvue8 XC8 XpointVue sub def /RYvue8 YC8 YpointVue sub def /RZvue8 ZC8 ZpointVue sub def % produit scalaire /PS8 RXvue8 NX8 mul RYvue8 NY8 mul add RZvue8 NZ8 mul add def % FACE 9 pentagone régulier MRQNF % OC9 /XC9 XM XR add XQ add XN add XF add 5 div def /YC9 YM YR add YQ add YN add YF add 5 div def /ZC9 ZM ZR add ZQ add ZN add ZF add 5 div def % Normale à la face 6 /NX9 XC9 CX sub def /NY9 YC9 CY sub def /NZ9 ZC9 CZ sub def % rayon vers point de vue /RXvue9 XC9 XpointVue sub def /RYvue9 YC9 YpointVue sub def /RZvue9 ZC9 ZpointVue sub def % produit scalaire /PS9 RXvue9 NX9 mul RYvue9 NY9 mul add RZvue9 NZ9 mul add def % FACE 10 pentagone régulier NQPOG % OC10 /XC10 XN XQ add XP add XO add XG add 5 div def /YC10 YN YQ add YP add YO add YG add 5 div def /ZC10 ZN ZQ add ZP add ZO add ZG add 5 div def % Normale à la face 6 /NX10 XC10 CX sub def /NY10 YC10 CY sub def /NZ10 ZC10 CZ sub def % rayon vers point de vue /RXvue10 XC10 XpointVue sub def /RYvue10 YC10 YpointVue sub def /RZvue10 ZC10 ZpointVue sub def % produit scalaire /PS10 RXvue10 NX10 mul RYvue10 NY10 mul add RZvue10 NZ10 mul add def % FACE 11 pentagone régulier OPTKH % OC11 /XC11 XO XP add XT add XK add XH add 5 div def /YC11 YO YP add YT add YK add YH add 5 div def /ZC11 ZO ZP add ZT add ZK add ZH add 5 div def % Normale à la face 11 /NX11 XC11 CX sub def /NY11 YC11 CY sub def /NZ11 ZC11 CZ sub def % rayon vers point de vue /RXvue11 XC11 XpointVue sub def /RYvue11 YC11 YpointVue sub def /RZvue11 ZC11 ZpointVue sub def % produit scalaire /PS11 RXvue11 NX11 mul RYvue11 NY11 mul add RZvue11 NZ11 mul add def % FACE 12 pentagone régulier PQRST % OC12 /XC12 XP XQ add XR add XS add XT add 5 div def /YC12 YP YQ add YR add YS add YT add 5 div def /ZC12 ZP ZQ add ZR add ZS add ZT add 5 div def % Normale à la face 12 /NX12 XC12 CX sub def /NY12 YC12 CY sub def /NZ12 ZC12 CZ sub def % rayon vers point de vue /RXvue12 XC12 XpointVue sub def /RYvue12 YC12 YpointVue sub def /RZvue12 ZC12 ZpointVue sub def % produit scalaire /PS12 RXvue12 NX12 mul RYvue12 NY12 mul add RZvue12 NZ12 mul add def % faceOne ABDCE PS1 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YA def /Zcote ZA def /Xabscisse XA def CalcCoordinates moveto /Zcote ZB def /Xabscisse XB def /Yordonnee YB def CalcCoordinates lineto /Zcote ZC def /Xabscisse XC def /Yordonnee YC def CalcCoordinates lineto /Zcote ZD def /Xabscisse XD def /Yordonnee YD def CalcCoordinates lineto /Zcote ZE def /Xabscisse XE def /Yordonnee YE def CalcCoordinates lineto closepath gsave 0.05 0.1 0.1 0 setcmykcolor fill grestore stroke } if % face2 EDILJ PS2 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YE def /Zcote ZE def /Xabscisse XE def CalcCoordinates moveto /Zcote ZD def /Xabscisse XD def /Yordonnee YD def CalcCoordinates lineto /Zcote ZI def /Xabscisse XI def /Yordonnee YI def CalcCoordinates lineto /Zcote ZL def /Xabscisse XL def /Yordonnee YL def CalcCoordinates lineto /Zcote ZJ def /Xabscisse XJ def /Yordonnee YJ def CalcCoordinates lineto closepath gsave 0.05 0.15 0.15 0 setcmykcolor fill grestore stroke } if % face3 EJMFA PS3 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YE def /Zcote ZE def /Xabscisse XE def CalcCoordinates moveto /Zcote ZJ def /Xabscisse XJ def /Yordonnee YJ def CalcCoordinates lineto /Zcote ZM def /Xabscisse XM def /Yordonnee YM def CalcCoordinates lineto /Zcote ZF def /Xabscisse XF def /Yordonnee YF def CalcCoordinates lineto /Zcote ZA def /Xabscisse XA def /Yordonnee YA def CalcCoordinates lineto closepath gsave 0.05 0.2 0.2 0 setcmykcolor fill grestore stroke } if % face4 AFNGB PS4 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YA def /Zcote ZA def /Xabscisse XA def CalcCoordinates moveto /Zcote ZF def /Xabscisse XF def /Yordonnee YF def CalcCoordinates lineto /Zcote ZN def /Xabscisse XN def /Yordonnee YN def CalcCoordinates lineto /Zcote ZG def /Xabscisse XG def /Yordonnee YG def CalcCoordinates lineto /Zcote ZB def /Xabscisse XB def /Yordonnee YB def CalcCoordinates lineto closepath gsave 0.05 0.25 0.25 0 setcmykcolor fill grestore stroke } if % face5 BGOHC PS5 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YB def /Zcote ZB def /Xabscisse XB def CalcCoordinates moveto /Zcote ZG def /Xabscisse XG def /Yordonnee YG def CalcCoordinates lineto /Zcote ZO def /Xabscisse XO def /Yordonnee YO def CalcCoordinates lineto /Zcote ZH def /Xabscisse XH def /Yordonnee YH def CalcCoordinates lineto /Zcote ZC def /Xabscisse XC def /Yordonnee YC def CalcCoordinates lineto closepath gsave 0.05 0.3 0.3 0 setcmykcolor fill grestore stroke } if % face6 CHKID PS6 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YC def /Zcote ZC def /Xabscisse XC def CalcCoordinates moveto /Zcote ZH def /Xabscisse XH def /Yordonnee YH def CalcCoordinates lineto /Zcote ZK def /Xabscisse XK def /Yordonnee YK def CalcCoordinates lineto /Zcote ZI def /Xabscisse XI def /Yordonnee YI def CalcCoordinates lineto /Zcote ZD def /Xabscisse XD def /Yordonnee YD def CalcCoordinates lineto closepath gsave 0.05 0.35 0.35 0 setcmykcolor fill grestore stroke } if % face7 KTSLI PS7 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YK def /Zcote ZK def /Xabscisse XK def CalcCoordinates moveto /Zcote ZT def /Xabscisse XT def /Yordonnee YT def CalcCoordinates lineto /Zcote ZS def /Xabscisse XS def /Yordonnee YS def CalcCoordinates lineto /Zcote ZL def /Xabscisse XL def /Yordonnee YL def CalcCoordinates lineto /Zcote ZI def /Xabscisse XI def /Yordonnee YI def CalcCoordinates lineto closepath gsave 0.05 0.4 0.4 0 setcmykcolor fill grestore stroke } if % face8 LSRMJ PS8 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YL def /Zcote ZL def /Xabscisse XL def CalcCoordinates moveto /Zcote ZS def /Xabscisse XS def /Yordonnee YS def CalcCoordinates lineto /Zcote ZR def /Xabscisse XR def /Yordonnee YR def CalcCoordinates lineto /Zcote ZM def /Xabscisse XM def /Yordonnee YM def CalcCoordinates lineto /Zcote ZJ def /Xabscisse XJ def /Yordonnee YJ def CalcCoordinates lineto closepath gsave 0.05 0.45 0.45 0 setcmykcolor fill grestore stroke } if % face9 MRQNF PS9 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YM def /Zcote ZM def /Xabscisse XM def CalcCoordinates moveto /Zcote ZR def /Xabscisse XR def /Yordonnee YR def CalcCoordinates lineto /Zcote ZQ def /Xabscisse XQ def /Yordonnee YQ def CalcCoordinates lineto /Zcote ZN def /Xabscisse XN def /Yordonnee YN def CalcCoordinates lineto /Zcote ZF def /Xabscisse XF def /Yordonnee YF def CalcCoordinates lineto closepath gsave 0.05 0.5 0.5 0 setcmykcolor fill grestore stroke } if % face10 NQPOG PS10 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YN def /Zcote ZN def /Xabscisse XN def CalcCoordinates moveto /Zcote ZQ def /Xabscisse XQ def /Yordonnee YQ def CalcCoordinates lineto /Zcote ZP def /Xabscisse XP def /Yordonnee YP def CalcCoordinates lineto /Zcote ZO def /Xabscisse XO def /Yordonnee YO def CalcCoordinates lineto /Zcote ZG def /Xabscisse XG def /Yordonnee YG def CalcCoordinates lineto closepath gsave 0.05 0.55 0.55 0 setcmykcolor fill grestore stroke } if % face11 OPTKH PS11 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YO def /Zcote ZO def /Xabscisse XO def CalcCoordinates moveto /Zcote ZP def /Xabscisse XP def /Yordonnee YP def CalcCoordinates lineto /Zcote ZT def /Xabscisse XT def /Yordonnee YT def CalcCoordinates lineto /Zcote ZK def /Xabscisse XK def /Yordonnee YK def CalcCoordinates lineto /Zcote ZH def /Xabscisse XH def /Yordonnee YH def CalcCoordinates lineto closepath gsave 0.05 0.6 0.6 0 setcmykcolor fill grestore stroke } if % face12 PQRST PS12 0 Condition { % reduction reduction scale 1 setlinejoin newpath /Yordonnee YP def /Zcote ZP def /Xabscisse XP def CalcCoordinates moveto /Zcote ZQ def /Xabscisse XQ def /Yordonnee YQ def CalcCoordinates lineto /Zcote ZR def /Xabscisse XR def /Yordonnee YR def CalcCoordinates lineto /Zcote ZS def /Xabscisse XS def /Yordonnee YS def CalcCoordinates lineto /Zcote ZT def /Xabscisse XT def /Yordonnee YT def CalcCoordinates lineto closepath gsave 0.05 0.65 0.65 0 setcmykcolor fill grestore stroke } if } def end