Fichier 505.jps — Modifié le 18 Juin 2006 à 13 h 20
%% 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