\section{Présentation}

\subsection{Pourquoi un nouveau package ?}

\tkzname{tkz-fct} confiait le calcul des points des courbes à \tkzname{gnuplot} et le calcul des images et des pentes à \tkzname{fp.sty}. Il fallait donc installer \tkzname{gnuplot}, autoriser \tkzname{shell-escape}, écrire chaque fonction dans deux syntaxes et souvent mettre les polynômes sous la forme de \tkzimp{Horner} pour éviter les dépassements de capacité de \tkzname{fp}.

\tkzname{tkz-fn} remplace tout cela par \tkzname{Lua}, présent dans \tkzname{LuaLaTeX} :
\begin{itemize}
  \item les points des courbes, les images, les dérivées, les aires sont calculés par Lua en double précision ;
  \item une fonction est définie une seule fois, avec la syntaxe de Lua (|x^2|, |sin(x)|, |exp(x)|) ;
  \item ni \tkzname{gnuplot}, ni \tkzname{shell-escape}, ni fichier auxiliaire ;
  \item \tkzname{tkz-fn} ne dépend que de \TIKZ ; il n'utilise ni \tkzname{tkz-base}, ni \tkzname{tkz-euclide} ;
  \item les résultats numériques sont présentés sous la forme française ou sous la forme américaine ;
  \item un pont permet d'utiliser les points définis par \tkzname{tkz-fn} avec \tkzname{tkz-elements}.
\end{itemize}

Toutes les macros commencent par \tkzname{\textbackslash tkzFn}, ce qui évite tout conflit avec \tkzname{tkz-fct}, \tkzname{tkz-base} ou \tkzname{tkz-euclide}.

\subsection{Deux espaces de coordonnées}

Un repère est défini par \tkzcname{tkzFnInit}, avec les options \tkzname{xmin}, \tkzname{xmax}, \tkzname{xstep}, \tkzname{ymin}, \tkzname{ymax} et \tkzname{ystep}. \tkzname{xstep} est la valeur représentée par un centimètre sur l'axe des abscisses, \tkzname{ystep} celle représentée par un centimètre sur l'axe des ordonnées.

\begin{itemize}
  \item Tous les calculs se font dans les unités du repère : $f(x)$, la pente d'une tangente, une aire, une somme de Riemann, les coordonnées d'un point.
  \item Le tracé se fait en centimètres. La conversion est faite au dernier moment :
  \[ X = \frac{x}{\text{xstep}} \qquad Y = \frac{y}{\text{ystep}} \]
\end{itemize}

Il n'y a donc plus besoin d'écrire |\x| à la place de |x| lorsque \tkzname{xstep} est différent de 1. Par exemple, soit à tracer le graphe de la fonction $f$ définie par :

\[
 0\leq x\leq 100 \ \text{et}\ f(x)=x^3
\]

Les valeurs de $f(x)$ sont comprises entre 0 et $\tkzFnPrint{1000000}$. En choisissant \tkzname{xstep=10} et \tkzname{ystep=100000}, les axes ont environ $10$ cm de longueur (sans mise à l'échelle).

\begin{tkzexample}[latex=10cm,small]
\begin{tikzpicture}[scale=.5]
  \tkzFnInit[xmax=100,xstep=10,
             ymin=0,ymax=1000000,
             ystep=100000,xmin=0]
  \tkzFnGrid
  \tkzFnAxes[decimals=0]
  \tkzFnDraw[color=red,
             domain=0:100]{x^3}
\end{tikzpicture}
\end{tkzexample}

\endinput
