505.jps

505.jps [ retouréditionsource ]

Conversion au format PDF de 505.jps

%% 3 lignes de jps a eliminer pour avoir du pur postscript

%% taille fenetre en jps

-12 12 setxrange
-2 3 setyrange
20 setxunit
%% fin du jps a eliminer


%% 2 definitions preliminaires : "defppathtable" et "interpolfunct"


%% syntaxe : defppathtable --> array, tableau de points definis

%% par le chemin courant (ds le repere postscript)

/defppathtable {
gsave
   flattenpath
   [
   {} {} {} {} pathforall
   ] 
grestore
} def

%% syntaxe : x array interpolfunct --> f(x) interpole a partir du

%% tableau de points array

/interpolfunct {
11 dict begin
   /table_f exch def
   /x exch def
   %% n = le + grand indice

   /n table_f length 2 idiv 1 sub def
   /x0 table_f 0 get def 
   /xn table_f 2 n mul get def
   /xi+1 0 def
   xn x0 gt {
      %% table_f trie par x croissant

      /y_xmin table_f 1 get def
      /y_xmax table_f n 2 mul 1 add get def
      /i 0 def
      /increment 1 def
      /xi x0 def
   } {
      %% table_f trie par x decroissant

      /y_xmax table_f 1 get def
      /y_xmin table_f n 2 mul 1 add get def
      /i n def
      /increment -1 def
      /xi xn def
   } ifelse
   x x0 lt x xn lt and {
      %% x < x0 et x < xn

      y_xmin 
%%       (x0) x0

%%       (xn) xn

%%       (x) x blim

   } {
      x xn gt x x0 gt and {
      %% x > x0 et x > xn

         y_xmax 
      } {
         %% x dans [xi ; xn] ou dans [xi ; x0]

         {
            /i i increment add store
            i 0 lt i n gt or {
            %% impossible en principe

               (PROBLEME DANS F) boum
            } if
            /xi+1 table_f 2 i mul get store
            x xi+1 le {
               %% alors xi < x < xi+1

               /yi+1 table_f 2 i mul 1 add get def
               /yi table_f 2 i increment sub mul 1 add get def
               yi+1 yi sub xi+1 xi sub div
               x xi sub mul
               yi add
%%                (xi) xi

%%                (xi+1) xi+1

%%                (yi) yi

%%                (yi+1) yi+1

               exit
            } {
               %% alors x dans [xi+1 ; xn] (ou [xi+1 ; x0])

               /xi xi+1 store
%               (i) i

            } ifelse
         } loop
      } ifelse
   } ifelse
end
} def

%% definition d'une fonction numerique a partir de son graphe (défini

%% par un chemin)

%% on utilisera ensuite cette fonction numerique pour deformer le texte


newpath
-200.0   9.99988 moveto   
-170.858   20.0947   -134.665   23.7141   -99.9998   19.9999   curveto   
-29.9998   12.4999   -29.9998   12.4999   39.9998   4.99994   curveto
63.2333   2.51058   81.0974   12.7908   99.9998   19.9999   curveto   
128.472   30.8586   165.365   34.548   200.0   30.0   curveto

defppathtable
/table exch def
/f {table interpolfunct} def

%% juste pour visualiser le chemin

0 0 1 setrgbcolor 
stroke
0 setgray

%% le fichier de Manuel Luque 

%% modifie par jpv, dim jun 18 13:18:13 CEST 2006

% (c) P. Kleiweg 1997

% adaptation plagiat M.L. 05/06/2006

 
%% les parametres du fichier :


%% le decalage pour positionner le texte dans la page

%% 297 600 translate


%% le decalage (en picas) du texte par rapport a sa ligne de base

/decalage_vertical 0 def

%% la police et sa taille 

/Times-Roman findfont 40 scalefont setfont

%% le texte a deformer (les x sont dans [-warphalf ; warphalf])

/warptxt (Modulation d'amplitude) def

%% 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
   /y exch def
   /x exch def
   x y 
   %% on multiplie y par f (x)/20 (on divise par 20 car les f(x)

   %% oscillent autour de 20)

   x f 20 div mul
end
} bind def


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% tout ce qui suit n'a pas a etre modifie %%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 
/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                  
                        
warptxt true charpath   %% on cree le chemin


%% maintenant on y va

warpit                  %% on applique le pathforall

stroke                  %% puis on encre