%% taille fenetre en jps -12 12 setxrange -5 10 setyrange 20 setxunit %% le fichier de Manuel Luque %% modifie par jpv, lun jun 5 18:09:30 CEST 2006 % (c) P. Kleiweg 1997 % adaptation plagiat M.L. 05/06/2006 /Font /Times-Roman def %% un peu de jps a supprimer pour du pur postscript %% #tex# déformation~: $\displaystyle {f(x) = 1 + x^4}$ xmin ymax xmax ymax milieu [3 dup] dctexlabel %% fin du jps %%% /decalage_vertical 0 def %% decalage en picas du texte en %% dessous de la ligne y=0 %% la procedure de base pour la transformation des points du chemin %% la coordonnees en y est la pour obtenir une sinusoide sur une %% longueur du texte (la periode) avec N oscillations %% (x, y) --> (x, (y - decalage_vertical) * (1 + (x * periode)^2) /warp { 1 index periode mul 100 div %% facteur de compression pour l'intervalle des abscisses 4 exp 1 add %% %% pour visualiser les valeurs de y %% 1 index %% (y) == == %% c'est ici qu'on fait le decalage exch decalage_vertical sub mul } bind def %% 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 %{ (move) } { (line) } { (curve) } { (closepath) } pathforall pop } bind def %% suppression du decalage de ML %% 297 600 translate %% definition des differentes constantes % taille de des caracteres Font findfont 40 scalefont setfont /warptxt (Modulation d'amplitude) def % texte a deformer /warpwidth warptxt stringwidth pop def % largeur horizontale du texte /warphalf warpwidth 2 div def % demi-largeur horizontale /N 2 def % ondulation sur 3 periodes /periode {360 warpwidth div} bind def % une sinusoide newpath %% on cree un chemin avec une ligne horizontale y=30 warphalf neg 30 moveto %% on se deplace (init chemin) warphalf neg 1 warphalf { 30 lineto } for %% 1 trait horizontal (qui subira la %% transformation lors du pathforall) %% rebelote avec une ligne y=-1 warphalf neg -1 moveto %% on se deplace (init chemin) warphalf neg 1 warphalf { -1 lineto } for %% puis enfin le chemin constitue avec la chaine de cartacteres warphalf neg 0 moveto %% on se deplace (init chemin) warptxt true charpath %% on cree le chemin %% maintenant on y va warpit %% on applique le pathforall %boum stroke %% puis on encre %% un peu de jps (a supprimer pour du pur postscript) %% setCourierBold (decalage = ) xmin ymin xmax ymin milieu uctext decalage_vertical chaine cvs show