% Copyright 2011 by Alain Matthes % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Public License. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % tkz-fct.sty encodage : utf8 % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % Créé par Alain Matthes le 16-01-2011 % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Objet : fonctions numériques en 2D with gnuplot % constants from tkz-base % \tkz@init@xstep % \tkz@init@ystep %<---------------------------------------------------------------------------> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{tkz-fct}[2011/06/01 1.16 c function ] \newcount\tkz@tkzf@fct \edef\tkzTWOPTCode{\the\catcode`\:} \tkz@tkzf@fct=0 % \def\tkzfctloaded{} %<---------------------------------------------------------------------------> % Initialisation %<---------------------------------------------------------------------------> \RequirePackage{tkz-base} % % Code from Christian Tellechea 2009 % modified by AM % modified \FP@pow from fp.sty \def\FP@pow#1#2#3{% \FP@beginmessage{POW}% {\def\FP@beginmessage##1{}% \def\FP@endmessage##1{}% \FPifzero{#2}% \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi {\FP@pow@zero{#3}}% {\FPifint{#3}% \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi {\FPifneg{#2}% \FPneg\FP@tmpd{#2}% \FPln\FP@tmpd\FP@tmpd \FPmul\FP@tmpd\FP@tmpd{#3}% \FPexp\FP@tmpd\FP@tmpd \FPtrunc\FP@tmp{#3}0% \ifodd\FP@tmp \FPneg\FP@tmp\FP@tmpd \else \let\FP@tmp\FP@tmpd \fi \else \FPln\FP@tmpd{#2}% \FPmul\FP@tmpd\FP@tmpd{#3}% \FPexp\FP@tmp\FP@tmpd \fi }% {\FPln\FP@tmpd{#2}% \FPmul\FP@tmpd\FP@tmpd{#3}% \FPexp\FP@tmp\FP@tmpd}% }% \global\let\FP@tmp\FP@tmp}% \FP@endmessage{}% \let#1\FP@tmp} %<---------------------------------------------------------------------------> % Styles %<---------------------------------------------------------------------------> \def\tkzfctset#1{\pgfkeys{/tkztan/.cd,#1}} \tkzfctset{tan style/.style={->,>=latex}} %<---------------------------------------------------------------------------> % tkzFct %<---------------------------------------------------------------------------> \newif\iftkz@draw \newif\iftkz@fp \def\tkz@dmin{-5}\def\tkz@dmax{5} \pgfkeys{% /tkzfct/.cd, domain/.code args={#1:#2} {\FPeval\tkz@min{(#1)} \FPeval\tkz@max{(#2)}}, samples/.code = {\edef\tkz@fct@samples{#1}}, id/.code = {\edef\tkz@fct@id{#1}}, fp/.is if = tkz@fp, fp/.default = false, /tkzfct/.unknown/.code = {\let\searchname=\pgfkeyscurrentname \pgfkeysalso{\searchname/.try=#1, /tikz/\searchname/.retry=#1}}} \def\tkzFct{\pgfutil@ifnextchar[{\tkzActivOff\tkz@fct}{\tkz@fct[]}} \def\tkz@fct[#1]#2{% \pgfkeys{/tkzfct/.cd, domain = \@xa:\@xb, samples = 200, fp = true, id = tkzfct} \pgfqkeys{/tkzfct}{#1}% \iftkz@init@NO% \FPdiv{\tkz@x@delta}{\tkz@init@xorigine}{\tkz@init@xstep}% \FPdiv{\tkz@y@delta}{\tkz@init@yorigine}{\tkz@init@ystep}% \else \FPset{\tkz@x@delta}{0}% \FPset{\tkz@y@delta}{0}% \fi% % stockage \advance\tkz@tkzf@fct by 1 % \FPdiv\tkz@ba{\tkz@min}{\tkz@init@xstep}% \FPdiv\tkz@bb{\tkz@max}{\tkz@init@xstep}% \def\x{(x*\tkz@init@xstep)}% \expandafter\edef\csname tkzFctgnu\@alph\tkz@tkzf@fct \endcsname{#2}% \expandafter\edef\csname tkzFctgnuLast\endcsname{#2} \begin{scope}[samples = \tkz@fct@samples,#1] \clip (\tkz@xa,\tkz@ya) rectangle (\tkz@xb,\tkz@yb); \draw[xshift = -\tkz@x@delta cm,yshift = -\tkz@y@delta cm,/tkzfct/.cd]% plot[id=\tkz@fct@id,domain= \tkz@ba:\tkz@bb]% function{(#2)/\tkz@init@ystep};% \end{scope} \let\tkz@tmp@xstep\tkz@init@xstep \def\tkz@init@xstep{1} \iftkz@fp% \ReplaceSubStrings{\tkz@tempa}{#2}{log}{ln} \ReplaceSubStrings{\tkz@tempb}{\tkz@tempa}{**}{^} \ReplaceSubStrings{\tkz@tempa}{\tkz@tempb}{\x}{x} \ReplaceSubStrings{\tkz@tempb}{\tkz@tempa}{asin}{arcsin} \ReplaceSubStrings{\tkz@tempa}{\tkz@tempb}{acos}{arccos} \ReplaceSubStrings{\tkz@tempb}{\tkz@tempa}{atan}{arctan} \expandafter\edef\csname tkzFct\@alph\tkz@tkzf@fct\endcsname{\tkz@tempb}% \expandafter\edef\csname tkzFctLast\endcsname{\tkz@tempb}% \fi \let\tkz@init@xstep\tkz@tmp@xstep \catcode`\:=\tkzTWOPTCode\relax }% %<---------------------------------------------------------------------------> % point d'une courbe (new method) %<---------------------------------------------------------------------------> \pgfkeys{% /tkzfctpt/.cd, draw/.is if = tkz@draw, draw/.default = true, with/.code = \global\def\tkz@fct@used{#1}, ref/.code = \global\def\tkz@fct@ref{#1}} \def\tkzDefPointByFct{\pgfutil@ifnextchar[{\tkz@fctpoint}{\tkz@fctpoint[]}} \def\tkz@fctpoint[#1](#2){% \pgfkeys{/tkzfctpt/.cd, draw = false, with = {}, ref = {}} \pgfqkeys{/tkzfctpt}{#1} \FPeval\x{(#2)}% \ifx\tkzutil@empty\tkz@fct@used \FPeval\tkz@fx{\tkzFctLast} \else \edef\tkz@fct{\csname tkzFct\tkz@fct@used\endcsname} \FPeval\tkz@fx{\tkz@fct} \fi \tkzDefPoint(\x,\tkz@fx){tkzPointResult}% \iftkz@draw \tkzDrawPoint(tkzPointResult) \fi \ifx\tkzutil@empty\tkz@fct@ref \else \tkzGetPoint{\tkz@fct@ref} \fi }% %<---------------------------------------------------------------------------> % tangente \tkzDrawTangentLine %<---------------------------------------------------------------------------> \pgfkeys{% /tkztan/.cd, draw/.is if = tkz@draw, draw/.default = true, with/.code = \global\def\tkz@fct@used{#1}, kr/.code = {\edef\tkz@tan@kr{#1}}, kl/.code = {\edef\tkz@tan@kl{#1}}, /tkztan/.unknown/.code = {\let\searchname=\pgfkeyscurrentname \pgfkeysalso{\searchname/.try=#1, /tikz/\searchname/.retry=#1}} }% %<---------------------------------------------------------------------------> \def\tkzDrawTangentLine{\pgfutil@ifnextchar[{\tkz@DrawTangentLine}{% \tkz@DrawTangentLine[]}} \def\tkz@DrawTangentLine[#1](#2){% \begingroup \pgfkeys{/tkztan/.cd, draw = false, with = {}, kr = 1, kl = 1} \pgfqkeys{/tkztan}{#1} \FPeval\x{(#2)}% \ifx\tkzutil@empty\tkz@fct@used \FPeval\tkz@img{\tkzFctLast} \let\tkz@fct\tkzFctLast \else \edef\tkz@fct{\csname tkzFct\tkz@fct@used\endcsname} \FPeval\tkz@img{\tkz@fct} \fi \let\tkz@old@img\tkz@img \let\tkz@old@x\x \tkzDefPoint(\tkz@old@x,\tkz@old@img){tkzPointResult} \FPdiv{\tkz@krx}{\tkz@tan@kr}{\tkz@init@xstep} \FPdiv{\tkz@kry}{\tkz@tan@kr}{\tkz@init@ystep} \FPdiv{\tkz@klx}{\tkz@tan@kl}{\tkz@init@xstep} \FPdiv{\tkz@kly}{\tkz@tan@kl}{\tkz@init@ystep} % demi tgt--> droite \FPifzero{\tkz@tan@kr}% \else \FPadd{\x}{\tkz@old@x}{0.000001}% \FPeval\tkz@img{\tkz@fct}% \FPadd{\tkz@deltay}{\tkz@old@img}{-\tkz@img}% \FPmul{\tkz@slope}{\tkz@deltay}{1000000}% \protected@edef\tkz@temp{% \noexpand\draw[/tkztan/tan style,/tkztan/.cd,#1]}\tkz@temp% (tkzPointResult)--++(\tkz@krx,-\tkz@kry*\tkz@slope); \fi % demi tgt --> gauche \FPifzero{\tkz@tan@kl}% \else \FPadd{\x}{\tkz@old@x}{-0.000001} \FPeval\tkz@img{\tkz@fct}% \FPadd{\tkz@deltay}{\tkz@old@img}{-\tkz@img} \FPmul{\tkz@slope}{\tkz@deltay}{-1000000} \protected@edef\tkz@temp{% \noexpand\draw[/tkztan/tan style,/tkztan/.cd,#1]}\tkz@temp% (tkzPointResult)--++(-\tkz@klx,\tkz@kly*\tkz@slope); \fi \iftkz@draw \tkzDrawPoint(tkzPointResult) \fi \endgroup } %<---------------------------------------------------------------------------> % tkzArea %<---------------------------------------------------------------------------> \pgfkeys{% /tkzarea/.cd, domain/.code args={#1:#2} {\FPeval\tkz@min{(#1)} \FPeval\tkz@max{(#2)}}, opacity/.code = {\edef\tkz@fct@opacity{#1}}, id/.code = {\edef\tkz@fct@id{#1}}, color/.code = {\edef\tkz@fct@color{#1}}, samples/.code = {\edef\tkz@fct@samples{#1}}, /tkzarea/.unknown/.code = {\let\searchname=\pgfkeyscurrentname \pgfkeysalso{\searchname/.try=#1, /tikz/\searchname/.retry=#1}}} \def\tkzArea{\pgfutil@ifnextchar[{\catcode`\:=12 \tkz@aire}{\tkz@aire[]}} \def\tkz@aire[#1]{% \begingroup \pgfkeys{% /tkzarea/.cd, domain = -5:5, color = \tkz@otherlinecolor, samples = 200, id = tkzfonct, opacity = .5} \pgfqkeys{/tkzarea}{#1} \iftkz@init@NO \FPdiv{\tkz@x@delta}{\tkz@init@xorigine}{\tkz@init@xstep}% \FPdiv{\tkz@y@delta}{\tkz@init@yorigine}{\tkz@init@ystep}% \else \FPset{\tkz@x@delta}{0} \FPset{\tkz@y@delta}{0}% \fi% \def\x{(x*\tkz@init@xstep)} \FPdiv\tkz@ba{\tkz@min}{\tkz@init@xstep}% \FPdiv\tkz@bb{\tkz@max}{\tkz@init@xstep}% \begin{scope}[] \path[ fill, xshift = -\tkz@x@delta cm, yshift = -\tkz@y@delta cm, color = \tkz@fct@color,% fill opacity = \tkz@fct@opacity,#1, domain = \tkz@ba:\tkz@bb, samples = \tkz@fct@samples]% (\tkz@ba,0)--plot [id = \tkz@fct@id]% function{(\tkzFctgnuLast)/\tkz@init@ystep}--(\tkz@bb,0); \end{scope} \endgroup } \let\tkzDrawArea\tkzArea %<---------------------------------------------------------------------------> % tkzAreafg %<---------------------------------------------------------------------------> \pgfkeys{/tkzareafg/.cd, domain/.code args={#1:#2} {\FPeval\tkz@min{(#1)} \FPeval\tkz@max{(#2)}}, between/.code args={#1 and #2}{\def\tkz@below{#1} \def\tkz@above{#2}}, opacity/.code = {\edef\tkz@fct@opacity{#1}}, id/.code = {\edef\tkz@fct@id{#1}}, color/.code = {\edef\tkz@fct@color{#1}}, samples/.code = {\edef\tkz@fct@samples{#1}}, /tkzareafg/.unknown/.code = {\let\searchname=\pgfkeyscurrentname \pgfkeysalso{\searchname/.try=#1, /tikz/\searchname/.retry=#1}}} \def\tkzAreafg{\pgfutil@ifnextchar[{\tkz@airefg}{\tkz@airefg[]}} \def\tkz@airefg[#1]{% \begingroup \pgfkeys{/tkzareafg/.cd, domain = -5:5, between = a and b, color = lightgray, samples = 200, id = tkzfonct, opacity = .5 } \pgfqkeys{/tkzareafg}{#1} \def\tkz@fctsup{\csname tkzFctgnu\tkz@below\endcsname} \def\tkz@fctinf{\csname tkzFctgnu\tkz@above\endcsname} \iftkz@init@NO% \FPdiv{\tkz@x@delta}{\tkz@init@xorigine}{\tkz@init@xstep}% \FPdiv{\tkz@y@delta}{\tkz@init@yorigine}{\tkz@init@xstep}% \else \FPset{\tkz@x@delta}{0} \FPset{\tkz@y@delta}{0}% \fi% % essai du test sur xstep \def\x{(x*\tkz@init@xstep)} \FPdiv\tkz@ba{\tkz@min}{\tkz@init@xstep} \FPdiv\tkz@bb{\tkz@max}{\tkz@init@xstep} \begin{scope}[domain = \tkz@ba:\tkz@bb, samples = \tkz@fct@samples, id = \tkz@fct@id] \clip (\tkz@ba,\tkz@ya)--plot function{(\tkz@fctsup)/\tkz@init@ystep}% --(\tkz@bb,\tkz@ya);% \clip (\tkz@ba,\tkz@yb)--plot function{(\tkz@fctinf)/\tkz@init@ystep}% --(\tkz@bb,\tkz@yb); \fill [color = \tkz@fct@color, fill opacity = \tkz@fct@opacity, /tkzareafg/.cd, #1]% (\tkz@ba,\tkz@ya) rectangle (\tkz@bb,\tkz@yb); \end{scope} \endgroup } \let\tkzDrawAreafg\tkzAreafg \def\tkz@pamin{-5}\def\tkz@pamax{5} %<---------------------------------------------------------------------------> % tkzFctPar %<---------------------------------------------------------------------------> \def\tkzFctPar{\pgfutil@ifnextchar[{\catcode`\:=12 \tkz@fctp}{\tkz@fctp[]}} \def\tkz@fctp[#1]#2#3{% \begingroup \pgfkeys{% /tkzfct/.cd, domain = \tkz@pamin:\tkz@pamax, samples = 200, fp = true, id = tkzfct} \pgfqkeys{/tkzfct}{#1} \iftkz@init@NO% \FPdiv{\tkz@x@delta}{\tkz@init@xorigine}{\tkz@init@xstep}% \FPdiv{\tkz@y@delta}{\tkz@init@yorigine}{\tkz@init@ystep}% \else \FPset{\tkz@x@delta}{0} \FPset{\tkz@y@delta}{0}% \fi% \begin{scope}[samples = \tkz@fct@samples] \tkzActivOff \clip (\tkz@xa,\tkz@ya) rectangle (\tkz@xb,\tkz@yb); \draw [xshift = -\tkz@x@delta cm,% yshift = -\tkz@y@delta cm, /tkzfct/.cd, #1]% plot [parametric,domain = \tkz@min:\tkz@max,% id = tkzparfct]% function {(#2)/\tkz@init@xstep,(#3)/\tkz@init@ystep}; \tkzActivOn \end{scope} \endgroup } %<---------------------------------------------------------------------------> % tkzFctPolar %<---------------------------------------------------------------------------> \def\tkz@pomin{0}\def\tkz@pomax{2*pi} \def\tkzFctPolar{\pgfutil@ifnextchar[{% \catcode`\:=12 \tkz@FctPolar}{\tkz@FctPolar[]}} \def\tkz@FctPolar[#1]#2{% \begingroup \pgfkeys{% /tkzfct/.cd, domain = \tkz@pomin:\tkz@pomax, fp = true, samples = 200, id = tkzfctpolar} \pgfqkeys{/tkzfct}{#1} \iftkz@init@NO% \FPdiv{\tkz@x@delta}{\tkz@init@xorigine}{\tkz@init@xstep}% \FPdiv{\tkz@y@delta}{\tkz@init@yorigine}{\tkz@init@ystep}% \else \FPset{\tkz@x@delta}{0} \FPset{\tkz@y@delta}{0}% \fi% \begin{scope} \tkzActivOff \draw [xshift = -\tkz@x@delta cm,% yshift = -\tkz@y@delta cm, /tkzfct/.cd, #1]% plot [raw gnuplot,id = tkzpolarfct]% function { set polar;set samples \tkz@fct@samples ; set trange [\tkz@min:\tkz@max]; plot (#2)/\tkz@init@xstep}; \tkzActivOn \end{scope} \endgroup } %<---------------------------------------------------------------------------> % tkzDrawRiemannSum %<---------------------------------------------------------------------------> \pgfkeys{/tkzriemann/.cd, interval/.code args={#1:#2} {\FPeval\tkz@min{(#1)} \FPeval\tkz@max{(#2)}}, number/.code = {\edef\tkz@fct@nb{#1}}, opacity/.code = {\edef\tkz@fct@opacity{#1}}, color/.code = {\edef\tkz@fct@color{#1}}, /tkzriemann/.unknown/.code = {\let\searchname=\pgfkeyscurrentname \pgfkeysalso{\searchname/.try=#1, /tikz/\searchname/.retry=#1}}} \def\tkzDrawRiemannSum{\pgfutil@ifnextchar[{% \catcode`\:=12 \tkz@DrawRiemannSum}{\tkz@DrawRiemannSum[]}} \def\tkz@DrawRiemannSum[#1]{% \begingroup \pgfkeys{% /tkzriemann/.cd, interval = 1:2, number = 10, opacity = 0.5, line width = 1pt} \pgfqkeys{/tkzriemann}{#1} \iftkz@init@NO% \FPdiv{\tkz@x@delta}{\tkz@init@xorigine}{\tkz@init@xstep}% \FPdiv{\tkz@y@delta}{\tkz@init@yorigine}{\tkz@init@ystep}% \else \FPset{\tkz@x@delta}{0} \FPset{\tkz@y@delta}{0}% \fi% \FPadd\tkz@intwd{\tkz@max}{-\tkz@min} \FPdiv\tkz@delta{\tkz@intwd}{\tkz@fct@nb} \FPadd\tkz@fct@nb{\tkz@fct@nb}{-1} \begin{scope} \foreach \i in {0,1,...,\tkz@fct@nb}{% \FPeval\x{(\tkz@min+i*\tkz@delta)} \FPeval\tkz@fx{\tkzFcta} \FPadd\tkz@next{\x}{\tkz@delta} \draw[color=\tkz@fct@color,opacity=\tkz@fct@opacity,/tkzriemann/.cd,#1] (\x ,0 ) rectangle (\tkz@next , \tkz@fx/\tkz@init@ystep ); } \end{scope} \endgroup } %<---------------------------------------------------------------------------> % tkzDrawRiemannSumInf %<---------------------------------------------------------------------------> \pgfkeys{/tkzriemann/.cd, interval/.code args={#1:#2} {\FPeval\tkz@min{(#1)} \FPeval\tkz@max{(#2)}}, number/.code = {\edef\tkz@fct@nb{#1}}, opacity/.code = {\edef\tkz@fct@opacity{#1}}, color/.code = {\edef\tkz@fct@color{#1}}, /tkzriemann/.unknown/.code = {\let\searchname=\pgfkeyscurrentname \pgfkeysalso{\searchname/.try=#1, /tikz/\searchname/.retry=#1}}} \def\tkzDrawRiemannSumInf{\pgfutil@ifnextchar[{% \catcode`\:=12 \tkz@DrawRiemannSumInf}{\tkz@DrawRiemannSumInf[]}} \def\tkz@DrawRiemannSumInf[#1]{% \begingroup \pgfkeys{% /tkzriemann/.cd, interval = 1:2, number = 10, opacity = 0.5, line width = 1pt} \pgfqkeys{/tkzriemann}{#1} \iftkz@init@NO% \FPdiv{\tkz@x@delta}{\tkz@init@xorigine}{\tkz@init@xstep}% \FPdiv{\tkz@y@delta}{\tkz@init@yorigine}{\tkz@init@ystep}% \else \FPset{\tkz@x@delta}{0} \FPset{\tkz@y@delta}{0}% \fi% \FPadd\tkz@intwd{\tkz@max}{-\tkz@min} \FPdiv\tkz@delta{\tkz@intwd}{\tkz@fct@nb} \FPadd\tkz@fct@nb{\tkz@fct@nb}{-1} \begin{scope} \foreach \i in {0,1,...,\tkz@fct@nb}{% \FPeval\x{(\tkz@min+i*\tkz@delta)} \FPeval\tkz@fx{\tkzFcta} \let\tkz@firstimg\tkz@fx \let\tkz@firstx\x \FPadd\tkz@next{\x}{\tkz@delta} \let\tkzFctTmp\tkzFcta \FPset\x{\tkz@next} \FPeval\tkz@fxnext{\tkzFcta} \ifdim \tkz@fx pt < \tkz@fxnext pt\relax \draw[opacity=\tkz@fct@opacity,/tkzriemann/.cd,#1] (\tkz@firstx ,0 ) rectangle (\tkz@next , \tkz@firstimg/\tkz@init@ystep ); \else \draw[opacity=\tkz@fct@opacity,/tkzriemann/.cd,#1] (\tkz@firstx ,0 ) rectangle (\tkz@next , \tkz@fxnext/\tkz@init@ystep ); \fi } \end{scope} \endgroup } %<---------------------------------------------------------------------------> % tkzDrawRiemannSumSup %<---------------------------------------------------------------------------> \def\tkzDrawRiemannSumSup{\pgfutil@ifnextchar[{% \catcode`\:=12 \tkz@DrawRiemannSumSup}{\tkz@DrawRiemannSumSup[]}} \def\tkz@DrawRiemannSumSup[#1]{% \begingroup \pgfkeys{% /tkzriemann/.cd, interval = 1:2, number = 10, opacity = 0.5, line width = 1pt} \pgfqkeys{/tkzriemann}{#1} \iftkz@init@NO% \FPdiv{\tkz@x@delta}{\tkz@init@xorigine}{\tkz@init@xstep}% \FPdiv{\tkz@y@delta}{\tkz@init@yorigine}{\tkz@init@ystep}% \else \FPset{\tkz@x@delta}{0} \FPset{\tkz@y@delta}{0}% \fi% \FPadd\tkz@intwd{\tkz@max}{-\tkz@min} \FPdiv\tkz@delta{\tkz@intwd}{\tkz@fct@nb} \FPadd\tkz@fct@nb{\tkz@fct@nb}{-1} \begin{scope} \foreach \i in {0,1,...,\tkz@fct@nb}{% \FPeval\x{(\tkz@min+i*\tkz@delta)} \FPeval\tkz@fx{\tkzFcta} \let\tkz@firstimg\tkz@fx \let\tkz@firstx\x \FPadd\tkz@next{\x}{\tkz@delta} \let\tkzFctTmp\tkzFcta \FPset\x{\tkz@next} \FPeval\tkz@fxnext{\tkzFcta} \ifdim \tkz@fx pt > \tkz@fxnext pt\relax \draw[opacity=\tkz@fct@opacity,/tkzriemann/.cd,#1] (\tkz@firstx ,0 ) rectangle (\tkz@next , \tkz@firstimg/\tkz@init@ystep ); \else \draw[opacity=\tkz@fct@opacity,/tkzriemann/.cd,#1] (\tkz@firstx ,0 ) rectangle (\tkz@next , \tkz@fxnext/\tkz@init@ystep ); \fi } \end{scope} \endgroup } %<---------------------------------------------------------------------------> % tkzDrawRiemannSumMid %<---------------------------------------------------------------------------> \def\tkzDrawRiemannSumMid{\pgfutil@ifnextchar[{% \catcode`\:=12 \tkz@DrawRiemannSumMid}{\tkz@DrawRiemannSumMid[]}} \def\tkz@DrawRiemannSumMid[#1]{% \begingroup \pgfkeys{% /tkzriemann/.cd, interval = 1:2, number = 10, opacity = 0.5, line width = 1pt} \pgfqkeys{/tkzriemann}{#1} \iftkz@init@NO% \FPdiv{\tkz@x@delta}{\tkz@init@xorigine}{\tkz@init@xstep}% \FPdiv{\tkz@y@delta}{\tkz@init@yorigine}{\tkz@init@ystep}% \else \FPset{\tkz@x@delta}{0} \FPset{\tkz@y@delta}{0}% \fi% \FPadd\tkz@intwd{\tkz@max}{-\tkz@min} \FPdiv\tkz@delta{\tkz@intwd}{\tkz@fct@nb} \FPadd\tkz@fct@nb{\tkz@fct@nb}{-1} \begin{scope} \foreach \i in {0,1,...,\tkz@fct@nb}{% \FPeval\x{(\tkz@min+i*\tkz@delta)} \FPeval\tkz@fx{\tkzFcta} \let\tkz@firstimg\tkz@fx \let\tkz@firstx\x \FPadd\tkz@next{\x}{\tkz@delta} \FPset\x{\tkz@next} \FPeval\tkz@fxnext{\tkzFcta} \FPeval\tkz@midimg{(\tkz@firstimg+\tkz@fxnext)/2} \draw[opacity=\tkz@fct@opacity,/tkzriemann/.cd,#1] (\tkz@firstx ,0 ) rectangle (\tkz@next , \tkz@midimg/\tkz@init@ystep ); } \end{scope} \endgroup } %<--------------------------------------------------------------------------–> % tkzXH F rien T et [ ou ] %<--------------------------------------------------------------------------–> \def\tkz@ComT{v} % need \pgfkeys{ tkzxh/.cd, posgrad/.code = {\def\tkz@tkzXh@posgrad{#1}}, left/.code = {\def\tkz@tkzXh@left{#1}}, right/.code = {\def\tkz@tkzXh@right{#1}}, color/.code = {\def\tkz@tkzXh@color{#1}}, } \def\tkzXH{\pgfutil@ifnextchar[{\tkz@xh}{\tkz@xh[]}} \def\tkz@xh[#1]#2{% \pgfkeys{/tkzxh/.cd, posgrad = {below=6 pt}, color = \tkz@mainlinecolor, left = {}, right = {} } \pgfqkeys{/tkzxh}{#1} \begingroup \foreach \xA/\RA/\sA/\xB/\RB/\sB in {#2}{% \tkzDefPoint(\xA,0){deb}\tkzDefPoint(\xB,0){fin} \begin{scope}[decoration={border,angle=-45, amplitude=0.3cm,segment length=2mm,raise=0.1cm}] \draw[decorate,\tkz@tkzXh@color,thick] (deb) -- (fin); \node at (deb) {\Large\textbf{\sA}}; \node at (fin) {\Large\textbf{\sB}}; \ifx\RA\tkz@ComT \protected@edef\tkz@temp{% \noexpand\node[\tkz@tkzXh@posgrad]}\tkz@temp at (deb){% \tkz@showgrad{\xA}$\numprint{\tkz@result}$};\fi \ifx\RB\tkz@ComT \protected@edef\tkz@temp{\noexpand\node[\tkz@tkzXh@posgrad]}\tkz@temp% at (fin){% \tkz@showgrad{\xB}$\numprint{\tkz@result}$};\fi \protected@edef\tkz@temp{% \noexpand\node[\tkz@tkzXh@posgrad]}\tkz@temp at (\tkz@xa,0) {\tkz@tkzXh@left};% \protected@edef\tkz@temp{\noexpand\node[\tkz@tkzXh@posgrad]}\tkz@temp% at (\tkz@xb,0) {\tkz@tkzXh@right}; \end{scope} }% \endgroup }% %<---------------------------------------------------------------------------> % tangente obsolete %<---------------------------------------------------------------------------> \def\tkzTan{\pgfutil@ifnextchar[{\tkz@Tan}{\tkz@Tan[]}} \def\tkz@Tan[#1]#2(#3)#{ \pgfkeys{/tkztan/.cd, draw = false, with={}, kr = 1, kl = 1} \pgfqkeys{/tkztan}{#1} \global\edef\tkz@opttan{#1} \FPeval\x{(#3)}% \FPeval\tkz@img{#2} \let\tkz@yy #2% \let\tkz@xx\x% \let\tkz@old@img\tkz@img \tkz@@Tan } \def\tkz@@Tan#1{% \FPdiv{\tkz@old@x}{\x}{1} \let\tkz@nexpty\tkz@img \tkz@ptStar[](\tkz@old@x,\tkz@nexpty){#1} \FPdiv{\tkz@krx}{\tkz@tan@kr}{\tkz@tmp@xstep} \FPdiv{\tkz@kry}{\tkz@tan@kr}{\tkz@init@ystep} \FPdiv{\tkz@klx}{\tkz@tan@kl}{\tkz@tmp@xstep} \FPdiv{\tkz@kly}{\tkz@tan@kl}{\tkz@init@ystep} % demi tgt--> droite \FPifzero{\tkz@tan@kr}% \else \FPadd{\x}{\tkz@xx}{0.000001}% \FPeval\tkz@img{\tkz@yy}% \FPadd{\tkz@deltay}{\tkz@old@img}{-\tkz@img}% \FPmul{\tkz@slope}{\tkz@deltay}{1000000}% \protected@edef\tkz@temp{ \noexpand\draw[tan style,/tkztan/.cd,\tkz@opttan,-]}\tkz@temp% (#1)--++(\tkz@krx,-\tkz@kry*\tkz@slope); \fi % demi tgt --> gauche \FPifzero{\tkz@tan@kl}% \else \FPadd{\x}{\tkz@xx}{-0.000001} \FPeval\tkz@img{\tkz@yy}% \FPadd{\tkz@deltay}{\tkz@old@img}{-\tkz@img} \FPmul{\tkz@slope}{\tkz@deltay}{-1000000} \protected@edef\tkz@temp{ \noexpand \draw[tan style,/tkztan/.cd,\tkz@opttan,-]}\tkz@temp% (#1)--++(-\tkz@klx,\tkz@kly*\tkz@slope); \fi } %<---------------------------------------------------------------------------> % point d'une courbe obsolete %<---------------------------------------------------------------------------> \def\tkzFctPt{\pgfutil@ifnextchar[{\tkz@fctpt}{\tkz@fctpt[]}} \def\tkz@fctpt[#1]#2(#3)#{% \global\edef\tkz@optptfct{#1} \FPeval\x{(#3)}% \FPeval\tkz@y{#2} \tkz@defpoint } \def\tkz@defpoint#1{ \tkzDefPoint(\x,\tkz@y){#1} \protected@edef\tkz@temp{ \noexpand \tkzDrawPoint[\tkz@optptfct](#1)}\tkz@temp \let\tkz@init@xstep\tkz@tmp@xstep } %<-------------------------- the end ---------------------------------------> \endinput