%% auteur : %% Pour passer en pur postscript, decommenter la ligne suivante %% 294 420 translate %% puis commenter les 3 suivantes -15 15 setxrange -12 12 setyrange 20 setxunit %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Variations autour %% %% d'un fichier original de %% %%(c) P. Kleiweg 1997 %% %% juin 2006 : %% %% Manuel Luque %% %% Arnaud Schmittbuhl %% %% Jean-Paul Vignault %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /cm {28.45 mul} def %% définir le point de vue %% par ses coordonnées sphériques /THETA 30 def /PHI 30 def /Dobs 50 def % distance observateur /Decran 20 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 %% %% pour la 3D conventionnelle %% Dony : graphisme scientifique : page 187 %% Editeur : Masson /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 /3dto2d { 6 dict begin /Zcote exch def /Yordonnee exch def /Xabscisse exch def /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 %% maintenant on depose les resultats sur la pile Decran xObservateur mul zObservateur div cm %% c'est Xi cm Decran yObservateur mul zObservateur div cm %% c'est Yi cm end } def %% dessin de l'icosaedre tronqué 1 setlinejoin %% le quadrillage -20 1 20 { /x exch def newpath x -10 0 3dto2d moveto x 10 0 3dto2d lineto stroke } for -10 1 10 { /y exch def newpath -20 y 0 3dto2d moveto 20 y 0 3dto2d lineto stroke } for %% les axes gsave %% axe Ox 0 0 moveto 20 0 0 3dto2d lineto 2 setlinewidth 1 0 0 setrgbcolor stroke %% axe Oy 0 0 moveto 0 10 0 3dto2d lineto 2 setlinewidth 0 1 0 setrgbcolor stroke %% axe Oz 0 0 moveto 0 0 15 3dto2d lineto 2 setlinewidth 0 0 1 setrgbcolor stroke grestore /decalage_vertical 0 def %% decalage en picas du texte en %% dessous de la ligne y=0 /Font /Times-Roman def %% Font findfont 3 scalefont setfont Font findfont 3 scalefont setfont %% le texte a deformer (les x sont dans [-warphalf ; warphalf]) /warptxt (Brazil-France) def /warpwidth warptxt stringwidth pop def %% largeur horizontale du texte /warphalf warpwidth 2 div def %% demi-largeur horizontale %% Jean-Paul Vignault %% la procedure de base pour la transformation des points du chemin %% (x, y) --> (X, Y) %% cette fonction peut utiliser les variables warpwidth et warphalf %% point origine de la phrase : /x0 -20 def %/y0 -10 def /y0 warphalf neg def % centre le texte /z0 6 def /warp { 3 dict begin /z exch z0 add def /y exch y0 add def x0 y z 3dto2d end } bind def %% pour remplacer 'move' /warpmove{ %% on teste le booleen place 2 tokens plus en avant sur la pile %% si c'est 'true', alors on en est au 1er appel => on initialise %% le chemin 2 index { newpath } if %% puis on applique warp a notre point warp moveto %% on enleve le 'true' pour mettre un 'false' a la place pop false } bind def %% pour remplacer 'lineto /warpline { warp lineto } bind def %% pour remplacer 'curveto' /warpcurve { 6 2 roll warp 6 2 roll warp 6 2 roll warp curveto } bind def %% 'warpit' declenche la transformation du chemin courant /warpit { true { warpmove } { warpline } { warpcurve } { closepath } pathforall pop } bind def newpath %% on se deplace (init chemin) de facon a %% centrer la ligne de base du texte en (0 , - decalage_vertical) %%warphalf neg decalage_vertical neg moveto x0 -10 0 3dto2d moveto x0 -10 10 3dto2d lineto x0 10 10 3dto2d lineto x0 10 0 3dto2d lineto closepath 0 0 1 setrgbcolor stroke 0 0 0 3dto2d moveto warptxt true charpath %% on cree le chemin %% maintenant on y va warpit %% on applique le pathforall gsave 1 setgray fill grestore 0 setgray stroke %% puis on encre