%% Pour passer en pur postscript, decommenter la ligne suivante %% 294 420 translate %% puis commenter les 3 suivantes -10 20 setxrange -10 15 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 %% définir le point de vue %% par ses coordonnées sphériques /THETA -30 def /PHI 20 def /Dobs 60 def % distance observateur /Decran 30 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 /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 %% l'ancienne formulation pour le quadrillage %% /Zcote 0 def %% -20 1 20 { % %% /Xabscisse exch def %% /Yordonnee -10 def %% formulesTroisD %% Xi cm Yi cm moveto %% -10 1 10 { %% /Yordonnee exch def %% formulesTroisD %% Xi cm Yi cm lineto } %% for stroke }for %% % %% -10 1 10 { % %% /Xabscisse -20 def %% /Yordonnee exch def %% /Zcote 0 def %% formulesTroisD %% Xi cm Yi cm moveto %% -20 1 20 { %% /Xabscisse exch def %% formulesTroisD %% Xi cm Yi cm lineto } %% for stroke }for %% les axes gsave %% axe Ox 0 0 moveto %% /Zcote 0 def %% /Yordonnee 0 def %% /Xabscisse 20 def %% formulesTroisD %% Xi cm Yi cm lineto 20 0 0 3dto2d lineto 2 setlinewidth 1 0 0 setrgbcolor stroke %% axe Oy 0 0 moveto %% /Zcote 0 def %% /Yordonnee 10 def %% /Xabscisse 0 def %% formulesTroisD %% Xi cm Yi cm lineto 0 10 0 3dto2d lineto 2 setlinewidth 0 1 0 setrgbcolor stroke %% axe Oz 0 0 moveto %%% /Zcote 15 def %%% /Yordonnee 0 def %%% /Xabscisse 0 def %%% formulesTroisD %%% Xi cm Yi cm lineto 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 %% le texte a deformer (les x sont dans [-warphalf ; warphalf]) /warptxt (La perspective) def %% 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 -5 def /y0 -8 def /z0 0 def /warp { 3 dict begin /z exch z0 add def /y exch y0 add def x0 y z 3dto2d end } bind def /warpwidth warptxt stringwidth pop def %% largeur horizontale du texte /warphalf warpwidth 2 div def %% demi-largeur horizontale %% 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 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 stroke %% puis on encre