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