Source PostScript (tracetangente.pps)

Retour Texte non formaté
/tailletangente 1 def %% trace d'une tangente %% (Tgx, Tgy) --> vecteur directeur %% (Mtgx, Mtgy) --> point de tangence %% tailletangente --> coeff %% ce qui suit est une procedure interne qui n'est pas destinee a etre %% appelee directement par l'utilisateur %% syntaxe : Mtgx Mtgy Tgx Tgy tracet@ngente /tracet@ngente { 5 dict begin gsave %% .25 setlinewidth newpath /Tgy exch def /Tgx exch def /Mtgy exch def /Mtgx exch def %% marque le point %% Mtgx Mtgy point Mtgx Mtgy smoveto %% norme le vecteur tangent /norme Tgx dup mul Tgy dup mul add sqrt def /Tgx Tgx norme div store /Tgy Tgy norme div store %% decalage pour que le point soit au milieu tailletangente Tgx mul -2 div tailletangente Tgy mul -2 div srmoveto %% trace de la tangente tailletangente Tgx mul tailletangente Tgy mul srlineto %% calcul de l'angulation de la tangente 0 Tgx ne 0 Tgy ne or { /tgangle Tgy yunit mul Tgx xunit mul atan def } if %% trace des fleches gsave Mtgx tailletangente Tgx mul -2 div add Mtgy tailletangente Tgy mul -2 div add stranslate tgangle 180 add rotate .5 .5 scale arrow grestore gsave Mtgx tailletangente Tgx mul 2 div add Mtgy tailletangente Tgy mul 2 div add stranslate tgangle rotate .5 .5 scale arrow grestore stroke grestore end } def %% trace d'une tangente a une courbe parametree par X et Y %% syntaxe~: t traceptangente %% parametres~: tailletangente /traceptangente { /@ exch def /Mtgx @ X def /Mtgy @ Y def /Tgx @ X' def /Tgy @ Y' def Mtgx Mtgy Tgx Tgy tracet@ngente } def %% trace d'une tangente a la courbe cartesienne y = f (x) %% syntaxe~: t tracetangente %% parametres~: tailletangente /tracetangente { /Mtgx exch def /Mtgy Mtgx f def /Tgx 1 def /Tgy Mtgx f' def Mtgx Mtgy Tgx Tgy tracet@ngente } def %% cas general %% syntaxe~: t (X) (Y) oldptangente /oldptangente { 6 dict begin /f@ctY exch def /f@ctX exch def /p@intt exch def /p@intx p@intt f@ctX cvx exec def /p@inty p@intt f@ctY cvx exec def /Tgx p@intt f@ctX (') append cvx exec def /Tgy p@intt f@ctY (') append cvx exec def p@intx p@inty Tgx Tgy tracet@ngente end } def %% syntaxe~: t (f) oldtangente /oldtangente { 5 dict begin /f@ct exch def /p@intx exch def /p@inty p@intx f@ct cvx exec def /Tgx 1 def /Tgy p@intx f@ct (') append cvx exec def p@intx p@inty Tgx Tgy tracet@ngente end } def %% syntaxe : A u t@ngente --> depose la droite passant par le point A, %% de vecteur directeur u /t@ngente { 4 dict begin /Tgy exch def /Tgx exch def /My exch def /Mx exch def Mx My dupp Tgx Tgy addv Mx My end } def %% cas general %% syntaxe~: t (X) (Y) dptangente %% depose sur la pile la tangente a la courbe (X, Y) au point de %% parametre t /dptangente { 6 dict begin /f@ctY exch def /f@ctX exch def /p@intt exch def /p@intx p@intt f@ctX cvx exec def /p@inty p@intt f@ctY cvx exec def /Tgx p@intt f@ctX (') append cvx exec def /Tgy p@intt f@ctY (') append cvx exec def p@intx p@inty Tgx Tgy t@ngente end } def %% syntaxe~: x (f) dtangente %% depose sur la pile la tangente a la courbe de f au point d'abscisse x /dtangente { 5 dict begin /f@ct exch def /p@intx exch def /p@inty p@intx f@ct cvx exec def /Tgx 1 def /Tgy p@intx f@ct (') append cvx exec def p@intx p@inty Tgx Tgy t@ngente end } def %%% nouveau (12/03/06) %% syntaxe : a {f} df+ -> f'(a+) /df+ { 3 dict begin /l@f@ncti@nf exch def /a exch def /dx .000001 def a dx add l@f@ncti@nf a l@f@ncti@nf sub dx div end } def %% syntaxe : a {f} df- -> f'(a-) /df- { 3 dict begin /l@f@ncti@nf exch def /a exch def /dx .000001 def a dx sub l@f@ncti@nf a l@f@ncti@nf sub dx div end } def %% syntaxe : t {X} {Y} ptangente+ --> trace demi-tangente /ptangente+ { 3 dict begin /m@nY exch def /m@nX exch def /t exch def [ t m@nX t m@nY dupp t {m@nX} df+ t {m@nY} df+ dupp norme dup 0 eq { (Pbm derivabilite dans ptangente+) ERROR } if 1 exch div mulv tailletangente 2 div mulv addv ] (->) ligne end } def %% syntaxe : t {X} {Y} ptangente- --> trace demi-tangente /ptangente- { 3 dict begin /m@nY exch def /m@nX exch def /t exch def [ t m@nX t m@nY dupp t {m@nX} df- t {m@nY} df- dupp norme dup 0 eq { (Pbm derivabilite dans ptangente-) ERROR } if 1 exch div mulv tailletangente 2 div mulv addv ] (->) ligne end } def %% syntaxe : x {f} tangente+ --> trace demi-tangente /tangente+ { {} exch ptangente+ } def %% syntaxe : x {f} tangente- --> trace demi-tangente /tangente- { {} exch ptangente- } def %% syntaxe~: t (X) (Y) ptangente /ptangente { dup xcheck { 3 copy ptangente- ptangente+ } { oldptangente } ifelse } def %% syntaxe : x {f} tangente --> trace tangente /tangente { dup xcheck { 2 copy tangente- tangente+ } { oldtangente } ifelse } def