test_texte3d_Z_01.jps

test_texte3d_Z_01.jps [ retouréditionsource ]

Conversion au format PDF de test_texte3d_Z_01.jps
%% Pour passer en pur postscript, decommenter la ligne suivante 

%% 294 420 translate


%% puis commenter les 3 suivantes

-15 30 setxrange
-10 20 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

%% dessin de l'icosaedre tronqué

1 setlinejoin
%% 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
0 0 moveto
/Zcote 0 def
/Yordonnee 0 def
/Xabscisse 20 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 15 def
/Yordonnee 0 def
/Xabscisse 0 def
formulesTroisD
Xi cm Yi cm 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


/warp {
3 dict begin
 /Zcote exch def
 /Yordonnee exch def
   formulesTroisD
 Xi cm Yi cm % passage aux cm sur l'écran

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

0 5 10 {  % le plan vertical X=0, 5, 10

    /Zcote 0 def
    /Yordonnee -10 def
    /Xabscisse exch def
formulesTroisD
Xi cm Yi cm  moveto
    /Yordonnee -10 def
    /Zcote 10 def
formulesTroisD
Xi cm Yi cm  lineto
    /Yordonnee 10 def
    /Zcote 10 def
formulesTroisD
Xi cm Yi cm  lineto
    /Yordonnee 10 def
    /Zcote 0 def
formulesTroisD
Xi cm Yi cm  lineto
closepath
 stroke
    /Yordonnee 0 def
    /Zcote 0 def
formulesTroisD
Xi cm Yi cm  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

 } for
%% showpage