%% 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