From 70fce94d382a4107204270ee5ec20ee779e6fecd Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 6 Jun 2011 17:18:15 +0000 Subject: new graphics package tkz-fct (5jun11) git-svn-id: svn://tug.org/texlive/trunk@22831 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/tkz-fct/tkz-fct.sty | 714 ++++++++++++++++++++++++ 1 file changed, 714 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/tkz-fct/tkz-fct.sty (limited to 'Master/texmf-dist/tex/latex/tkz-fct') diff --git a/Master/texmf-dist/tex/latex/tkz-fct/tkz-fct.sty b/Master/texmf-dist/tex/latex/tkz-fct/tkz-fct.sty new file mode 100644 index 00000000000..86aa260a027 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tkz-fct/tkz-fct.sty @@ -0,0 +1,714 @@ +% 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 + + \ No newline at end of file -- cgit v1.2.3