Retour

Source de tangente.sty

Fichier STY
%% for specifying the derivative func
\define@key{psset}{Derive}{\edef\psk@Derive{#1}}%
\setkeys{psset}{Derive=default}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% #1 #2 theta interval
%%% #3 description of rho depending upon theta
\def\polarplot#1#2#3{\parametricplot{#1}{#2}{#3 dup t cos mul exch t sin mul}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% #1 : abscisse
%% #2 : func
%% #3 : box
\def\psplotput#1#2#3{\rput(!#1 dup /x exch def #2){#3}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% #1 : abscisse
%% #2 : func
%% #3 : box
\def\parametricplotput#1#2#3{\rput(!/t #1 def #2){#3}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% #1 : abscisse
%% #2 : func
%% #3 : box
\def\polarplotput#1#2#3{\rput(!/t #1 def #2 dup #1 cos mul exch #1 sin mul){#3}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% #1 : abscisse
%% #2 : demi-longueur de la tangente
%% #3 : fonction (code psplot)
\def\psplottangent{\@ifnextchar[\Pst@psplottangent{\Pst@psplottangent[]}}%
\def\Pst@psplottangent[#1]#2#3#4{%
  \bgroup\setkeys{psset}{#1}%
  \ifx\psk@Derive\@default%
  \rput{!tx@EcldDict begin
            1 #2 dup ZeroEq
            \pslbrace dup 0.0005 add /x exch def #4 exch 0.0005 sub /x exch def #4 sub .001 div \psrbrace
            \pslbrace dup dup 1.0005 mul /x exch def #4 exch
                       .9995 mul /x exch def #4 sub exch .001 mul div \psrbrace ifelse
         end exch atan}(!#2 dup /x exch def #4){\psline(-#3,0)(#3,0)}
  \else%
  \rput{!1 /x #2 def \psk@Derive\space exch atan}(!#2 dup /x exch def #4){\psline(-#3,0)(#3,0)}\fi%
  \egroup%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% #1 : abscisse
%% #2 : demi-longueur de la tangente
%% #3 : fonction (code psplot)
\def\parametricplottangent{\@ifnextchar[\parametricplottangent@i{\parametricplottangent@i[]}}%
\def\parametricplottangent@i[#1]#2#3#4{%
  \bgroup\setkeys{psset}{#1}%
  \ifx\psk@Derive\@default%
  \rput{!tx@EcldDict begin
            #2 dup ZeroEq
            \pslbrace dup 0.0005 add /t exch def #4 3 -1 roll 0.0005 sub /x exch def
                      #4 ABVect .001 div exch .001 div \psrbrace
            \pslbrace dup dup 1.0005 mul /t exch def #4 3 -1 roll 
                       .9995 mul /t exch def #4 ABVect 3 -1 roll .001 mul exch 1 index div 3 1
                      roll div \psrbrace ifelse
         end atan}(!/t #2 def #4){\psline(-#3,0)(#3,0)}
  \else%
  \rput{!/t #2 def \psk@Derive\space exch atan}(!/t #2 def #4){\psline(-#3,0)(#3,0)}\fi%
  \egroup%
}%
%% reste à tester si le vecteur dérivé est nul -> point de rebroussement
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% #1 : abscisse
%% #2 : demi-longueur de la tangente
%% #3 : fonction (code psplot)
\def\polarplottangent{\@ifnextchar[\polarplottangent@i{\polarplottangent@i[]}}%
\def\polarplottangent@i[#1]#2#3#4{%
  \bgroup\setkeys{psset}{#1}%
  \ifx\psk@Derive\@default%
  \parametricplottangent@i[]{#2}{#3}{#4 dup t cos mul exch t sin mul}%
  \else%
  \psset{Derive=\psk@Derive\space dup t cos mul exch t sin mul #4 dup t sin mul exch
  t cos mul neg tx@EcldDict begin ABVect end}
  \parametricplottangent@i[]{#2}{#3}{#4 dup t cos mul exch t sin mul}\fi%
  \egroup%
}%