\documentclass[11pt,a4paper,french]{article}
% Needs geometriesyr16.mp
%http://melusine.eu.org/syracuse/poulecl/geometriesyr16/distrib/geometriesyr16-050408.tgz

% To compile:
% (pdf)latex repere-doc.tex
% mpost repere-doc.mp
% mpost repere-doc.mp
% (pdf)latex repere-doc.tex

  \usepackage{calc,ifthen}

  \usepackage[utf8]{inputenc}
  \usepackage[T1]{fontenc}
  \usepackage{lmodern}
  \usepackage{textcomp}
  \usepackage{mathtools}

  \usepackage{geometry}
  \geometry{twoside,hmargin=2cm,vmargin={1.5cm,1.8cm},includefoot}
  
  \usepackage[bottom]{footmisc}

  \usepackage{mflogo}
  
  \usepackage[output-decimal-marker={,}]{siunitx}

  \usepackage{multicol}
  \setlength{\multicolsep}{3pt}
  \setlength{\columnsep}{0pt}
  
  \usepackage[toc]{multitoc}
  
  \usepackage{enumitem}
  \setlist[description]{font=\ttfamily\bfseries\color{blue}}
  
  \usepackage[svgnames]{xcolor}

  \usepackage{graphicx}
  \usepackage{ifpdf}
    \ifpdf
      \DeclareGraphicsRule{*}{mps}{*}{}
    \fi

  \usepackage{url}
  \usepackage{verbatim}
  \usepackage{fancyvrb}
  
  \usepackage{array}
  \usepackage{tabularx}
  \renewcommand{\tabularxcolumn}[1]{>{\arraybackslash}m{#1}}
  
  \usepackage{tcolorbox}
  \tcbset{colframe=black,boxsep=0pt,left=3pt,right=3pt,top=0pt,bottom=0pt,boxrule=0.4pt,colback=LightGoldenrod}
  
  \usepackage{listings}
  \lstset{columns=flexible,%
          language=MetaPost,%
          showstringspaces=false,%
          basicstyle=\ttfamily,
          literate={é}{{\'e}}1}


  \usepackage{babel}
  \usepackage[colorlinks=true,urlcolor=blue]{hyperref}



%%%%%%%%%%%%%%%%%%% moreverb.sty
\makeatletter
\newwrite\verbatim@out
  \immediate\openout \verbatim@out \jobname.mp
\newwrite\temp@code
\def\verbatimwrite{%
  \@bsphack
  \immediate\openout \temp@code figtmp.mp
  \let\do\@makeother\dospecials
  \catcode`\^^M\active \catcode`\^^I=12
  \def\verbatim@processline{%
    \immediate\write\verbatim@out
      {\the\verbatim@line}%
    \immediate\write\temp@code
          {\the\verbatim@line}
     }%
  \verbatim@start}

\def\endverbatimwrite{%
  \immediate\closeout\temp@code
  \@esphack
  }%
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newlength{\largeurcode}
\newlength{\largeurfig}
\newcounter{numfig}
\setcounter{numfig}{0}

\newcommand{\codedeuxcol}{%
                  \begin{tcolorbox}
                     \begin{minipage}[c]{\largeurcode}
                       \begin{multicols}{2}
                         \lstinputlisting{figtmp.mp}
                       \end{multicols}
                     \end{minipage}
                   \end{tcolorbox}
                     \par\noindent
                    }
                    
                    
\newcommand{\codehoriz}{%
                   \begin{minipage}[c]{\largeurcode}
                        \lstinputlisting[frame=single,frameround=tttt,backgroundcolor=\color{LightGoldenrod}]{figtmp.mp}
                    \end{minipage}
                    \hfill
                 }

\newcommand{\codevert}{%
                   {\centering
                   \begin{minipage}[c]{\largeurcode}
                        \lstinputlisting[frame=single,frameround=tttt,backgroundcolor=\color{LightGoldenrod}]{figtmp.mp}
                    \end{minipage}
                    \par\noindent}
                 }

\newenvironment{codefigure}[3]%
               {%
               \refstepcounter{numfig}
               \setlength{\largeurcode}{#2\linewidth}
               \ifnum#1=0
                  \setlength{\largeurfig}{\linewidth-\largeurcode-2\fboxsep-2\fboxrule}
                  \def\inscode{\codehoriz}
               \else
                  \setlength{\largeurfig}{\linewidth}
                  \def\inscode{\codevert}
                  \ifnum#3=1
                   \relax
                  \else
                    \def\inscode{\codedeuxcol}
                  \fi
               \fi
               \verbatimwrite
               }%
               {%
               \endverbatimwrite
               \par
               \noindent
                 \inscode
               \IfFileExists{\jobname.\thenumfig}%
                   {\begin{minipage}[c]{\largeurfig}
                        \centering \includegraphics{\jobname.\thenumfig}\par
                    \end{minipage}}{}
               \par}


\newenvironment{codecache}%
            {\verbatimwrite}{\endverbatimwrite}
            
\newcounter{reptmp}

\newenvironment{codefigureinter}[2][1]%
                  {%
                    \setcounter{reptmp}{\value{numfig}+#2}
                    \setlength{\largeurcode}{#1\linewidth}
                    \def\inscode{\codevert}
                    \verbatimwrite
                  }%
                 {\endverbatimwrite
                  \par
                  \noindent
                  \inscode
                 \whiledo{\value{numfig}<\value{reptmp}}
                 {\refstepcounter{numfig}
                  \IfFileExists{\jobname.\thenumfig}%
                   {\includegraphics{\jobname.\thenumfig}
                    \qquad}{}
                   }
                 \par}
            

\newcounter{repexemple}
\setcounter{repexemple}{0}

\newcommand{\debutexemple}{\par\vspace{2ex}
                   \refstepcounter{repexemple}
                   \noindent {\bfseries \color{blue!20!black} 
                   Exemple \arabic{repexemple}}
                   \par\nopagebreak\vspace{1ex}
                   }


\newenvironment{exemple}[1][0.5]%
                   {\debutexemple
                   \codefigure{0}{#1}{1}
                   }%
                   {\endcodefigure
                   \par\vspace{2ex}}

\newenvironment{exemplev}[2][1]%
                   {\debutexemple
                   \codefigure{1}{#1}{#2}
                   }%
                   {\endcodefigure
                   \par\vspace{2ex}}
                   
\newenvironment{exemplefiginter}[2][1]%
                   {\debutexemple
                   \codefigureinter[#1]{#2}
                   }%
                   {\endcodefigureinter
                   \par\vspace{2ex}}
                   
\newenvironment{figreperedoc}%
                  {\refstepcounter{numfig}
                   \verbatimwrite}%
                   {%
                   \endverbatimwrite%
                   \IfFileExists{\jobname.\thenumfig}%
                      {\includegraphics{\jobname.\thenumfig}}{}
                   }


\newcommand{\vect}[1]{\overrightarrow{#1\rule{0.1em}{0ex}}}

\begin{document}
\title{Documentation de \texttt{repere.mp}}
\date{\today}
\author{Olivier \textsc{Péault}%
\footnote{E-mail : \href{mailto:o.peault@posteo.net}{\texttt{o.peault@posteo.net}}}}
\maketitle

\setcounter{tocdepth}{2}

\setlength{\columnsep}{25pt}
\tableofcontents
\setlength{\columnsep}{10pt}




\begin{codecache}
input geometriesyr16;
input repere;
\end{codecache}


\section{Utilisation du fichier}
Les macros du fichier \verb+repere.mp+ ont pour but de simplifier la création de figures dans un repère du plan avec \MP{}. L'idée de départ est de coller le plus possible aux besoins de l'enseignement secondaire de mathématiques.

Il est possible d'utiliser \verb+repere+ et \verb+geometriesyr+ (les macros de Christophe \textsc{Poulain} pour la géométrie disponibles à l'adresse \url{http://melusine.eu.org/syracuse/poulecl/macros/}) dans une même figure comme le montre l'exemple page \pageref{exgeom}.

Le fichier \verb+repere.mp+ doit être placé dans un répertoire accessible à \MP{} (Par ex. le répertoire \verb+metapost+ du \verb+texmf+). De plus, la ligne \verb+input repere;+ doit apparaître dans le document contenant les figures.


Les étiquettes (noms de points, de courbes, de vecteurs...) sont composées automatiquement au format \LaTeX{} avec le package \verb+latexmp.mp+. Il est donc nécessaire de compiler deux fois les documents.


\section{Repère utilisateur}

\subsection{Numérotation des figures}
Chaque figure devra débuter par une instruction \verb|repere()| et se terminer par \verb|fin| (voir ci-dessous). Si ces instructions se trouvent en dehors d'un environnement \verb|beginfig()|-\verb|endfig| la numérotation est automatique :

\bigskip
\begin{minipage}[c]{0.3\linewidth}
\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightGoldenrod}]
beginfig(2);
repere(...);
<instructions de dessin>
fin;
endfig;
\end{lstlisting}
\end{minipage}
\hfill
\begin{minipage}[c]{0.6\linewidth}
La figure porte le numéro 2
\end{minipage}

\bigskip
\begin{minipage}[c]{0.3\linewidth}
\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightGoldenrod}]
repere(...);
<instructions de dessin>
fin;
\end{lstlisting}
\end{minipage}
\hfill
\begin{minipage}[c]{0.6\linewidth}
La numérotation est automatique. La figure porte le numéro qui suit la figure précédemment dessinée. S'il s'agit de la première, elle porte le numéro 1.
\end{minipage}



\subsection{Définition du repère}
\begin{description}
\item[repere(xmin,xmax,ux,ymin,ymax,uy,theta)] débute une figure et définit le repère utilisateur : axe des abscisses de \verb+xmin+ à \verb+xmax+, unité \verb+ux+, axe des ordonnées de \verb+ymin+ à \verb+ymax+, unité \verb+uy+ et \verb+theta+ est l'angle en degrés entre les axes. Le paramètre \verb+theta+ est optionnel. Il est égal à 90 par défaut.

\item[repere.larg(xmin,xmax,Lx,ymin,ymax,Ly,theta)] définit un repère tel que la largeur totale de la figure produite soit \verb+Lx+ et sa hauteur \verb+Ly+.

\item[repere.orth(xmin,xmax,Lx,ymin,ymax)] définit un repère orthonormé de largeur totale \verb+Lx+.

\item[interaxes(x,y)] définit les coordonnées du point d'intersection des axes. Par défaut ces coordonnées sont $(0,0)$.

\item[cadre] chemin fermé qui fait le tour du repère.

\item[fin] termine la figure et la découpe pour ne garder que la partie limitée par le repère utilisateur.
\end{description}




\subsection{Axes}

\subsubsection{Généralités}
\begin{description}
\item[axex.pos(grad,val)] axe des abscisses gradué avec un pas de \verb+grad+ et étiqueté avec un pas de \verb+val+.

Si \verb+grad+ est négatif ou nul, l'axe n'est pas gradué et si \verb+val+ est négatif ou nul, l'axe n'est pas étiqueté.

\verb+pos+ est un paramètre optionnel qui désigne la position (au sens de \MP : \verb+rt+, \verb+urt+, \verb+top+, \verb+ulft+, \verb+lft+, \verb+llft+, \verb+bot+ ou \verb+lrt+) des étiquettes. \verb+pos+ peut être omis, la valeur par défaut est \verb+bot+.

Les étiquettes qui ne sont pas entièrement à l'intérieur du cadre ne sont pas dessinées.

\item[axey.pos(grad,val)] axe des ordonnées. La valeur par défaut de \verb+pos+ est \verb+lft+.
\end{description}


Au niveau de l'intersection des axes, les étiquettes sont tracées à la position \verb+pos+ si l'abscisse est différente de l'ordonnée ou si un seul axe est tracé. Dans le cas contraire, une seule étiquette est tracée pour les deux axes à une position \og intermédiaire \fg{} (pour \verb+axex.bot+ et \verb+axey.lft+, on obtient la position \verb+llft+)

\begin{description}
\item[axes.pos(grad,val)] figure formée par les deux axes gradués avec le même pas \verb+grad+ et étiquetés avec le même pas \verb+val+. \verb+pos+ désigne la position de l'étiquette de l'intersection des axes, sa valeur par défaut est \verb|llft|. La position des étiquettes des axes est définie à partir de \verb+pos+ (pour \verb+urt+ on obtient \verb+top+ pour l'axe des abscisses et \verb+rt+ pour l'axe des ordonnées.

\end{description}



\begin{exemple}
repere(-3,3,1cm,-1,1,1cm);
draw axex(1,1);
fin;
\end{exemple}

\begin{exemple}
repere(-3,3,1cm,-1,1,1cm);
draw axex.top(1,1);
fin;
\end{exemple}

\begin{exemple}
repere(-3,3,0.8cm,-2.5,2.5,1cm);
draw axes(1,1) withcolor pourpre;
draw cadre;
fin;
\end{exemple}

\begin{exemple}
repere(-3,3,0.8cm,-2.5,2.5,1cm,60);
draw axes.lrt(1,1);
draw cadre;
fin;
\end{exemple}

\begin{exemple}
repere.orth(-3,3,5cm,-2.5,2.5);
draw axex.top(0.5,1) withcolor bleu;
draw axey(1,1) withcolor bleu;
fin;
\end{exemple}




\subsubsection{Réglages des axes}

Les axes sont dessinés, gradués et étiquetés par défaut sur toute la longueur du repère utilisateur. Pour des valeurs différentes on peut utiliser les macros suivantes :


\begin{description}
\item[setaxes(xmin,xmax,ymin,ymax)] définit les valeurs minimales et maximales pour les axes.

\item[setgrad(xmin,xmax,ymin,ymax)] définit les valeurs minimales et maximales pour les graduations.

\item[setval(xmin,xmax,ymin,ymax)] définit les valeurs minimales et maximales pour l'étiquetage.

\item[flecheaxe] booléen égal à \verb|true| par défaut qui permet de dessiner, ou non, des flèches au bout des axes.
\end{description}

\begin{exemple}
repere.larg(110,160,5cm,2000,7000,5cm);
interaxes(120,3000);
setaxes(120,160,3000,7000);
setgrad(120,160,3000,7000);
draw axex(10,10);
draw axey(1000,1000);
fin;
\end{exemple}


\begin{description}
 \item[axexo.pos(grad,val), axeyo.pos(grad,val), axeso.pos(grad,val)] macros identiques aux précédentes sauf pour l'étiquette correspondant à l'intersection des axes qui est toujours dessinée.
 
 \item[axexn.pos(grad,val), axeyn.pos(grad,val), axesn.pos(grad,val)] macros identiques aux précédentes sauf pour l'étiquette correspondant à l'intersection des axes qui n'est jamais dessinée.
\end{description}


\begin{exemple}
repere(-0.5,3,0.8cm,-0.5,2.5,1cm);
setaxes(0,3,0,2.5);
draw axeso(1,1);
fin;
\end{exemple}

\begin{exemple}
repere.larg(-3,3,6cm,-3,4,3.5cm,60);
draw axexn(1,2) withcolor rouge;
draw axeyn(1,1) withcolor olive;
draw cadre;
fin;
\end{exemple}

\subsubsection{Graduations multiples de $\pi$}

\begin{description}
\item[axexpi.pos(n,d)] axe des abscisses gradué et étiqueté avec un pas de $\frac{n\pi}{d}$. Les fractions sont composées en mode normal. Pour les obtenir en mode \og displaystyle \fg, la variable de type booléen \verb+displayfrac+ doit être égale à \verb+true+.

\item[axeypi.pos(n,d)] axe des ordonnées gradué et étiqueté avec un pas de $\frac{n\pi}{d}$.

\item[axespi.pos(n,d)] les deux axes gradués et étiquetés avec un pas de $\frac{n\pi}{d}$.

\item[axexpio.pos(n,d), axeypio.pos(n,d), axespio.pos(n,d)] même chose que précédemment sauf pour l'étiquette correspondant à l'intersection des axes qui est toujours dessinée.

\item[axexpin.pos(n,d), axeypin.pos(n,d), axespin.pos(n,d)] même chose que précédemment sauf pour l'étiquette correspondant à l'intersection des axes qui n'est jamais dessinée.
\end{description}


\begin{exemple}
repere(-2.5,2.5,1.3cm,-3.5,3.5,0.8cm);
draw axexpi(1,6) withcolor grisfonce;
draw axeypi(1,4) withcolor grisfonce;
draw cadre;
fin;
\end{exemple}

\subsubsection{Graduations isolées}

\begin{description}
\item[axexpart.pos(x1,lab1,x2,lab2,...)] graduation et étiquetage partiels de l'axe des abscisses pour les valeurs \verb+x1+, \verb+x2+... et les étiquettes \verb+lab1+, \verb+lab2+... à la position \verb+pos+. Si \verb+pos+ est omis, les étiquettes sont placées à la position \verb+bot+. Les étiquettes peuvent être soit des chaînes de caractères ("aa", "bonjour"), soit des expressions du type \verb+btex $\pi$ etex+ (ou \verb|LaTeX("$\pi$")| voir page \pageref{latex}), soit d'autres figures. Si \verb+labn+ est omis, la valeur de \verb+xn+ sera utilisée comme étiquette. Pour obtenir une graduation sans étiquette, on peut utiliser la chaîne vide \verb+""+.

On peut désactiver le dessin de la graduation en donnant la valeur \verb|false| à \verb|boolgradxpart|.

\item[axeypart.pos(y1,lab1,y2,lab2,...)] même chose sur l'axe des ordonnées. Si \verb+pos+ est omis, les étiquettes sont placées à la position \verb+lft+.
\end{description}



\begin{exemple}[0.55]
repere.orth(-4,5,6cm,-3,4.5);
setgrad(0,5,0,3);
setval(0,5,0,3);
draw axex(1,2);
draw axey(1,0);
draw axexpart(-1.8,-pi,LaTeX("$-\pi$"))
                                   withcolor bleu;
draw axeypart.rt(-2.5,"dd",-1,2.5,"")
                                  withcolor rouge;
fin;
\end{exemple}

\subsubsection{Ajout de texte sur les graduations}

\begin{description}
\item[extranumx] chaine de caractères qui sera ajoutée après les valeurs des graduations sur l'axe des abscisses avant d'être composée avec la commande \verb|\num| de \verb|siunitx|.
\item[extranumy] même chose sur l'axe des ordonnées.

\end{description}

\begin{exemple}
repere(-1,4,1.2cm,-1,3.5,1cm);
extranumx:="e3";
extranumy:="0000";
draw axes(1,1);
draw cadre;
fin;
\end{exemple}


\subsection{Quadrillages}
\begin{description}
\VerbatimFootnotes
\item[setquad(xmin,xmax,ymin,ymax)] définit les valeurs minimales et maximales pour le tracé des quadrillages.\footnote{Il existe une macro \verb|settout| qui appelle successivement \verb+setaxes+, \verb+setgrad+, \verb+setval+ et \verb+setquad+.}

\item[quadrillage(x,y)] quadrillage avec un pas de \verb+x+ sur l'axe des abscisses et de \verb+y+ sur l'axe des ordonnées. L'épaisseur des traits par défaut est \verb+0.3bp+ et la couleur par défaut est \verb+0.7white+.
\end{description}


\begin{exemple}
repere(-3,3,0.8cm,-2.5,2.5,1cm);
draw quadrillage(1,0.5);
draw axes(1,1);
draw cadre;
fin;
\end{exemple}

\begin{exemple}
repere(-3,3,0.8cm,-2.5,2.5,1cm);
draw quadrillage(1,1) dashed evenly
                       withcolor (1,0.5,0.5);
draw axes(1,1) withcolor marine;
draw cadre;
fin;
\end{exemple}

\begin{description}
\item[papiermillimetre] comme son nom l'indique... Les couleurs et les épaisseurs des traits sont stockées dans \verb+pm_coula+, \verb+pm_coulb+, \verb+pm_coulc+ et \verb+pm_epa+, \verb+pm_epb+, \verb+pm_epc+.
\end{description}


\begin{exemple}
repere(-2.5,2.5,1cm,-2.5,2.5,1cm);
setquad(-2,2,-2,2);
draw papiermillimetre;
draw axes(1,1);
fin;
\end{exemple}

\begin{description}
\item[papierpointe(x,y)] quadrillage formé de points avec un pas de \verb+x+ sur l'axe des abscisses et de \verb+y+ sur l'axe des ordonnées. La taille des points par défaut est \verb+2bp+.
\end{description}


\begin{exemple}
repere(-3,3,0.8cm,-2.5,2.5,1cm);
setquad(0,3,0,2.5);
draw papierpointe(0.5,0.5);
setquad(-3,0,-2.5,2.5);
draw quadrillage(1,1) dashed
          withdots withcolor magenta;
draw axes(1,1);
draw cadre;
fin;
\end{exemple}

\subsection{Base}
\begin{description}
\item[base(O,i,j)] figure formée par le point d'intersection des axes et son nom (\verb+O+), ainsi que des deux vecteurs de la base et leurs noms (\verb+i+ et \verb+j+ surmontés d'une flèche). Si les noms sont de la forme \og lettre + nombre\fg, le nombre est affiché en indice.

\item[basep(O,I,J)] figure formée par le point d'intersection des axes et son nom (\verb+O+), ainsi que des deux points qui définissent le repère.
\end{description}


\begin{exemple}
repere(-1.5,3.5,0.8cm,-1,3,1cm);
flecheaxe:=false;
draw axesn(1,1);
drawoptions(withcolor marine);
draw base(O,i,j);
interaxes(2,1);
draw base(I,e1,e2);
drawoptions();
draw cadre;
fin;
\end{exemple}

\begin{exemple}
repere(-1,2.5,0.8cm,-1,2,1cm);
flecheaxe:=false;
draw axes(1,0);
draw basep(O,I,J);
draw cadre;
fin;
\end{exemple}




\section{Points, vecteurs}

\subsection{Points}
\label{points}
\begin{description}
\item[(x,y)] désigne le point (ou le vecteur) de coordonnées cartésiennes \verb+x+ et \verb+y+ dans le repère utilisateur.

\item[pol(r,t)] désigne le point (ou le vecteur) de coordonnées $(r\cos t;r\sin t)$ dans le repère utilisateur.

\item[pold(r,t)] même chose avec l'angle donné en degrés.
\end{description}

Les macros suivantes sont directement inspirées des macros similaires de \verb+geometriesyr16.mp+.


\begin{description}
\item[MarquePoint(A)] marque le point \verb+A+. Le style de marque est contrôlé par le paramètre \verb+marque_p+ qui peut prendre les valeurs \verb+"plein"+ (valeur par défaut), \verb+"creux"+ ou \verb+"croix"+. Une autre valeur que celles-ci ne produira aucune marque.

\item[pointe(A,B,C...)] permet de marquer plusieurs points.

\item[nomme.pos(A,nom)] marque le point et affiche son nom à la position \verb+pos+. \verb+nom+ peut être soit une chaîne de caractères, soit une expression du type \verb+btex ... etex+, soit une autre figure. Si \verb+nom+ est omis, le nom \verb+A+ est affiché. S'il s'agit d'un élément d'un tableau de points (\verb+A1+, \verb+A2+...), le nombre est affiché en indice.
\end{description}


\begin{exemple}[0.6]
repere(-3,3,0.9cm,-2.5,5,0.9cm);
pair A,B,C[],D,E,F;
A=(1,1);B=(2,3);
D=(-2,-1);E=(-1,-1);F=(-1,-2);
draw axes(1,0);
marque_p:="";drawoptions(withcolor magenta);
nomme.llft(A);nomme.top(B);draw A--B;
marque_p:="croix";drawoptions(withcolor rouge);
pointe(D,E,F);
marque_p:="creux";drawoptions(withcolor orange);
nomme.bot(pol(sqrt(2),-pi/4),
          "$\sqrt{2}e^{-i\frac{\pi}{4}}$");
nomme.bot((-1.5,1),"$(-1,5;1)$");
marque_p:="plein";drawoptions(withcolor violet);
for i=2 upto 4:
  C[i]=(-3+i/2,i);nomme.lft(C[i]);
endfor
draw cadre;
fin;
\end{exemple}




\subsection{Vecteurs}
\begin{description}
\item[vecteur.pos(A,u,nom)] figure formée du représentant du vecteur \verb+u+ d'origine \verb+A+ ainsi que de \verb+nom+ placé à la position \verb+pos+ par rapport au milieu de la flèche. Si \verb+nom+ est une chaine de caractère, il sera affiché avec une flèche. Si \verb+nom+ est omis, \verb+u+ surmonté d'une flèche est utilisé. S'il s'agit d'un élément d'un tableau de points (\verb+u1+, \verb+u2+...), le nombre est affiché en indice.
\end{description}


\begin{exemple}[0.6]
repere(-1,5.5,0.7cm,-4,4,0.8cm);
pair A,B,C[],u,v,w[];
u=(2,2);v=(2,-1);
A=(1,1);B=A+u;
draw axes(1,0);
draw base(O,i,j);
drawoptions(withcolor cyan);
nomme.llft(A);nomme.top(B);
draw vecteur.ulft(A,u,"AB");
draw vecteur.urt(B,v);
draw vecteur.bot(A,u+v,%
                 LaTeX("$\vect{u}+\vect{v}$"));
drawoptions(withcolor marine);
for i=1 upto 3:
 C[i]=(1,i-4);w[i]=(1.5,0.5*i-1);
draw vecteur.bot(C[i],w[i]);
endfor
draw cadre;
fin;
\end{exemple}



\section{Droites, courbes...}

\subsection{Droites}
\begin{description}
\item[droite(A,B)] droite $(AB)$.

\item[droite(a,b,c)] droite d'équation $ax+by+c=0$ dans le repère utilisateur.

\item[droite(a,b)] droite d'équation $y=ax+b$ dans le repère utilisateur.

\item[droite(c)] droite d'équation $x=c$ dans le repère utilisateur.
\end{description}


\begin{exemple}[0.65]
repere(-2,3,1cm,-2,3,1cm);
pair A,B;
A=(-0.5,-1);B=(1.5,1.5);
draw axes(1,0);
nomme.ulft(A);
nomme.lrt(B);
drawoptions(withpen pencircle scaled 1);
draw droite(A,B) withcolor olive;
draw droite(1) withcolor vertfonce;           %x=1
draw droite(1/3,3/2) withcolor vertfonce; %y=(1/3)x+3/2
draw droite(2,3,-1) withcolor vertfonce;      %2x+3y-1=0
fin;
\end{exemple}

\subsection{Courbes et fonctions}
\MP{} permet de définir simplement des fonctions (en utilisant par exemple la syntaxe suivante :
\verb|vardef f(expr x)=2x+1 enddef;|) et de définir des courbes passant par des points donnés (\verb+A..B..C+). Ces possibilités sont utilisées dans les macros qui suivent.

\begin{description}
\item[courbefonc(f)()] courbe représentant la fonction $f$ sur l'intervalle définissant le repère.

\item[courbefonc(f)(xmin,xmax)] courbe représentant la fonction $f$ sur l'intervalle $[xmin;xmax]$.

\item[courbefonc(f)(xmin,xmax,n)] courbe représentant la fonction $f$ sur l'intervalle $[xmin;xmax]$ en utilisant \verb+n+ points d'interpolation. La valeur par défaut de \verb|n| est 60.

\item[courbepoints(f)(xmin,xmax,n)] ne trace que les \verb+n+ points sans les relier. Les points sont dessinés en fonction de la valeur de \verb+marque_p+ (voir \ref{points}).

\item[fonccourbe.p(x)] image de \verb+x+ par la fonction dont la courbe représentative est le chemin \verb+p+. La macro renvoie 0 si la fonction n'est pas définie.

\item[nomme.pos(p,x,nom)] affiche \verb+nom+ au point d'abscisse \verb+x+ de la courbe \verb+p+ à la position \verb+pos+. \verb+nom+ peut être soit une chaîne de caractères, soit une expression du type \verb+btex ... etex+, soit une autre figure. Si \verb+nom+ est omis, le nom \verb+p+ est affiché. S'il s'agit d'un élément d'un tableau de points (\verb+p1+, \verb+p2+...), le nombre est affiché en indice.
\end{description}


\begin{exemple}[0.5]
repere(-2,5,0.7cm,-3,3,0.7cm);
vardef f(expr x)=-0.5(x**2)+2*x enddef;
vardef g(expr x)=exp(x)/10-3 enddef;
path C_f;
draw axes(1,1);
drawoptions(withcolor moutarde);
C_f= courbefonc(f)();
draw C_f withpen pencircle scaled 1;
nomme.llft(C_f,4.7);
drawoptions(withcolor beige);
draw courbepoints(g)(0,4,9);
fin;
\end{exemple}

\begin{description}
\item[intercourbes(P,p,q)] stocke dans le tableau de points \verb+P+ les points d'intersection des chemins \verb+p+ et \verb+q+. \verb+P1+ est un des points d'intersection, \verb+P2+ un autre etc. Il faut, avant d'utiliser cette macro, déclarer le tableau \verb+P+ de la façon suivante : \verb+pair P[];+

\item[ptantecedents(P,y,p)] stocke dans le tableau de points \verb+P+ les points du chemin \verb+p+ d'ordonnée \verb+y+. De même que précédemment, le tableau \verb+P+ doit être déclaré avant d'utiliser cette macro.

\item[antecedents(X,y,p)] stocke dans le tableau de nombres \verb+X+ les antécédents de \verb+y+ par la fonction dont la courbe représentative est le chemin \verb+p+. De même que précédemment, le tableau \verb+X+ doit être déclaré avant d'utiliser cette macro.
\end{description}


\begin{exemple}
repere(-2.5,4.5,1cm,-3.5,2.5,1cm);
path p,C_f;
pair I[],A[];
vardef f(expr x)= x**2-2x enddef;
p=(-2,-2)..(-1,1)..(0,2)..(1,1)
       ..(2,-2)..(3,-3)..(3.5,-2.5)
       ..(4,-1);
C_f= courbefonc(f)(-2,2.5);
draw axes(1,1);
drawoptions(withpen pencircle scaled 1);
draw p withcolor bleu;
draw C_f withcolor rouge;
intercourbes(I,C_f,p);
drawoptions(withcolor violet);
nomme.lft(I1);nomme.rt(I2);
draw droite(0,-1.5) dashed evenly;
ptantecedents(A,-1.5,p);
nomme.lrt(A1);nomme.llft(A2);
nomme.lrt(A3);
fin;
\end{exemple}

\begin{description}
\item[marquepointcourbe(p,x1,x2,...)] marque les points de la courbe \verb+p+ d'abscisses \verb+x1+, \verb+x2+... La marque dépend de la valeur de \verb+marque_p+.

\item[marquepointchemin(p,n1,n2,...)] dans le cas d'un chemin défini par \verb+A..B..C..+, marque le \verb+n1+-ième point, le \verb+n2+-ième point... La marque dépend de la valeur de \verb+marque_p+. Attention, le premier point est numéroté 0.

\end{description}



\begin{exemple}
repere(-2.5,4.5,1cm,-3.5,2.5,1cm);
path p,C_f;
pair I[],A[];
vardef f(expr x)= x**2-2x enddef;
p=(-2,-2)..(-1,1)..(0,2)
  ..(1,1)..(2,-2)..(3,-3)
  ..(3.5,-2.5)..(4,-1);
C_f= courbefonc(f)(-2,3);
draw axes(1,1);
drawoptions(withpen pencircle scaled 1);
draw p withcolor bleu;
draw C_f withcolor rouge;
drawoptions(withcolor violet);
marquepointcourbe(C_f,-0.5,0.8,2.2,2.6);
marquepointchemin(p,0,2,3,5);
fin;
\end{exemple}


\subsection{Nommage automatique des courbes}
\begin{description}
\item[nomme(p,nom)] affiche \verb|nom| au niveau d'un point d'intersection de \verb|p| et du contour de la figure. Ce point est choisi en fonction de la chaine \verb|prefnomme| qui peut prendre les valeurs \verb|"right"| (valeur par défaut), \verb|"left"|, \verb|"top"| ou \verb|"bottom"|.
\end{description}

\begin{exemple}
prefnomme:="left";

repere(-5,5,0.7cm,-5,5,0.7cm);
path d,C_f;
d=droite(-1,3);
vardef f(expr x)=0.5(x**2)-x -4 enddef;
C_f=courbefonc(f)();
draw axes(1,1);
draw d epaisseur 1 couleur bleu;
draw C_f epaisseur 1 couleur bleu;
nomme(d,"$d_2$") couleur bleu;
nomme(C_f) couleur bleu;
draw cadre;
fin;
\end{exemple}

\begin{exemple}
prefnomme:="bottom";

repere(-5,5,0.7cm,-5,5,0.7cm);
path d,C_f;
d=droite(-1,3);
vardef f(expr x)=0.5(x**2)-x -4 enddef;
C_f=courbefonc(f)();
draw axes(1,1);
draw d epaisseur 1 couleur bleu;
draw C_f epaisseur 1 couleur bleu;
nomme(d,"$d_2$") couleur bleu;
nomme(C_f) couleur bleu;
draw cadre;
fin;
\end{exemple}

\subsection{Dérivée et tangentes}
\begin{description}
\item[der.p(x)] image de \verb+x+ par la dérivée de la fonction dont la courbe représentative est \verb+p+.
%\item[der2.f(x)] image de \verb+x+ par la dérivée de la fonction \verb+f+.

\item[tangente(p,x)] tangente à la courbe \verb+p+ au point d'abscisse \verb+x+.

\item[tangente.gauche(p,x,long)] flèche de longueur \verb+long+ représentant la demi-tangente gauche à la courbe \verb+p+ au point d'abscisse \verb+x+. Le paramètre \verb+long+ est optionnel. Sa valeur par défaut est \verb+20bp+.

\item[tangente.droite(p,x,long)] idem à droite.

\item[tangente.double(p,x,long)] idem des deux côtés.
\end{description}


\begin{exemple}
repere(-2.5,4.5,1cm,-3.5,2.5,1cm);
path p,q;
p=(-2,-2){dir 60}..(-1,1)
  ..(0,2){right}..(1,1)..(2,-2)
  ..(3,-3){right}..(4,-2){(1,2)};
q= courbefonc(der.p)(-1,4);
draw axes(1,1);
drawoptions(withpen pencircle scaled 1);
draw p withcolor  bleu;
nomme.rt(p,0.7,"$y=f(x)$");
draw q withcolor  rouge;
nomme.lft(q,3.7,"$y=f'(x)$");
drawoptions(withpen pencircle scaled 1
            withcolor violet);
draw tangente.double(p,0);
draw tangente.droite(p,-2,40);
draw tangente.gauche(p,4,30);
draw tangente(p,2.5);
fin;
\end{exemple}

\subsection{Interpolation}



\MP{} propose les commandes suivantes (qui peuvent être combinées dans une même courbe) :

\begin{description}
\item[A-{}-B-{}-C-{}-] Ligne brisée passant par les points $A$, $B$, $C$...
\item[A..B..C..] Courbe de Bézier passant par les points $A$, $B$, $C$...
\end{description}

\subsubsection*{Interpolation polynomiale}
\verb|repere.mp| propose aussi les  commandes ci-dessous (pas toujours la meilleure méthode d'approximation...). À compiler avec \verb|mpost -numbersystem="decimal" fichier.mp| pour gagner en précision.

\begin{description}
\item[lagrange(A,B,C,...)()] Courbe passant par $A$, $B$, $C$... représentant le polynôme  de degré maximal $n-1$ tel que $P(x_A)=y_A$, $P(x_B)=y_B$... sur l'intervalle définissant le repère.
\item[lagrange(A,B,C,...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
\item[lagrange(x1,y1,x2,y2,x3,y3...)()]  Courbe passant par les points $(x_1;y_1)$, $(x_2;y_2)$, $(x_3;y_3)$... représentant le polynôme de degré maximal $n-1$ tel que $P(x_i)=y_i$ sur l'intervalle définissant le repère.
\item[lagrange(x1,y1,x2,y2,x3,y3...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
\end{description}

\begin{exemple}[0.55]
repere.orth(-1,10,7cm,-1,10);
pair A[],B[];
A[1]=(1,1);A[2]=(3,5);A[3]=(5,8);
A[4]=(7,2);A[5]=(9,4);
B[1]=(1,6);B[2]=(3,7);B[3]=(6,4);B[4]=(8,9);
path L;L=lagrange(A[1],A[2],A[3],A[4],A[5])();
path C;C=lagrange(1,6,3,7,6,4,8,9)(0,8);
draw quadrillage(1,1);
draw axes(1,1);
draw L epaisseur 1 couleur rouge; 
draw C epaisseur 1 couleur bleu;
for i=1 upto 5: nomme.llft(A[i]) couleur rouge;
endfor
for i=1 upto 4: nomme.llft(B[i]) couleur bleu;
endfor
fin;
\end{exemple}


\begin{description}
\item[hermite((x1,y1,y'1),(x2,y2,y'2)...)()] Courbe passant par les points $(x_1;y_1)$, $(x_2;y_2)$, $(x_3;y_3)$... représentant le polynôme de degré maximal $2n-1$ tel que $P(x_i)=y_i$ et $P'(x_i)=y'_i$ sur l'intervalle définissant le repère.
\item[hermite((x1,y1,y'1),(x2,y2,y'2)...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
\item[hermite(A,y'A,B,y'B,C,y'C...)()] Courbe passant par les points $A$, $B$, $C$... représentant le polynôme de degré maximal $2n-1$ tel que $P(x_A)=y_A$ et $P'(x_A)=y'_A$... sur l'intervalle définissant le repère.
\item[hermite(A,y'A,B,y'B,C,y'C...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
\end{description}

\begin{exemple}[0.55]
repere.orth(-1,10,7cm,-1,10);
draw quadrillage(1,1);
draw axes(1,1);
path H;H=hermite((1,2,0.5),(4,8,0),(8,2,2))();
draw H epaisseur 1 couleur bleu;
draw tangente.double(H,1) couleur bleu;
draw tangente.double(H,4) couleur bleu;
draw tangente.double(H,8) couleur bleu;
pair A,B,C; A:=(1,8);B:=(4,4);C:=(7,6);
path I;I=hermite(A,-1,B,0.5,C,2)(0,7.5);
draw I epaisseur 1 couleur rouge;
draw tangente.double(I,1) couleur rouge;
draw tangente.double(I,4) couleur rouge;
draw tangente.double(I,7) couleur rouge;
fin;
\end{exemple}


\subsubsection*{Interpolation à l'aide de splines cubiques}

\begin{description}
\item[splineder(A,y'A,B,y'B,C,y'C...)()] Courbe passant par les points $A$, $B$, $C$ représentant une fonction cubique par morceaux telle que $f(x_A)=y_A$ et $f'(x_A)=y'_A$ sur l'intervalle définissant le repère.
\item[splineder(A,y'A,B,y'B,C,y'C...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
\item[splineder(xA,yA,y'A,xB,yB,y'B,...)()] Même courbe que précédemment (sur l'intervalle définissant le repère) mais les valeurs sont données sous forme de liste. 
\item[splineder(xA,yA,y'A,xB,yB,y'B,...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
\end{description}

\begin{exemple}[0.55]
repere.orth(-1,10,7cm,-1,10);
draw quadrillage(1,1);
draw axes(1,1);
path H;H=splineder(1,2,0.5,4,8,0,8,2,2)();
draw H epaisseur 1 couleur bleu;
draw tangente.double(H,1) couleur bleu;
draw tangente.double(H,4) couleur bleu;
draw tangente.double(H,8) couleur bleu;
pair A,B,C; A:=(1,8);B:=(4,4);C:=(7,6);
path I;I=splineder(A,-1,B,0.5,C,2)(0,7.5);
draw I epaisseur 1 couleur rouge;
draw tangente.double(I,1) couleur rouge;
draw tangente.double(I,4) couleur rouge;
draw tangente.double(I,7) couleur rouge;
fin;
\end{exemple}



\begin{description}
\item[spline(A,B,C...)()] Courbe passant par les points $A$, $B$, $C$ représentant une fonction cubique par morceaux telle que $f(x_A)=y_A$, $f(x_B)=y_B$...  sur l'intervalle définissant le repère.
\item[spline(A,B,C...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
\item[spline(xA,yA,xB,yB,xC,yC,...)()] Même courbe que précédemment (sur l'intervalle définissant le repère) mais les valeurs sont données sous forme de liste. 
\item[spline(xA,yA,xB,yB,xC,yC...)(xmin,xmax)] Même courbe que précédemment mais sur l'intervalle $[xmin;xmax]$.
\end{description}

\begin{exemple}[0.55]
repere.orth(-1,10,7cm,-1,10);
pair A[],B[];
A[1]=(1,1);A[2]=(3,5);A[3]=(5,8);
A[4]=(7,2);A[5]=(9,4);
B[1]=(1,6);B[2]=(3,7);B[3]=(6,4);B[4]=(8,9);
path L;L=spline(A[1],A[2],A[3],A[4],A[5])();
path C;C=spline(1,6,3,7,6,4,8,9)(0,8);
draw quadrillage(1,1);
draw axes(1,1);
draw L epaisseur 1 couleur rouge; 
draw C epaisseur 1 couleur bleu;
for i=1 upto 5: nomme.llft(A[i]) couleur rouge;
endfor
for i=1 upto 4: nomme.llft(B[i]) couleur bleu;
endfor
fin;
\end{exemple}


\section{Suites}
\begin{description}
\item[suite(u,deb,fin)] figure formée des points $(i;u_i)$ pour $i$ variant entre \verb+deb+ et \verb+fin+.
\end{description}


\begin{exemple}
repere(-0.9,7,0.8cm,-1.2,1.2,1.5cm);
vardef u(expr n)=(-1)**n/n enddef;
taillepoint:=4;
draw axes(1,1);
draw suite(u,1,6) withcolor vertfonce;
fin;
\end{exemple}

\begin{description}
\item[suiterec(f,deb,fin,init)] ligne brisée (\og escalier \fg{} ou \og escargot \fg) permettant de visualiser les termes de la suite définie par $u_{n+1}=f(u_n)$ de premier terme $u_{deb}=init$ et de dernier terme $u_{fin}$.

\item[suiterecprojx.pos(lab,min,max)] figure formée des segments joignant les points $(u_n;u_n)$ et $(u_n;0)$ pour $n$ compris entre \verb+min+ et \verb+max+. La suite $u$ et sa valeur initiale sont définies par le dernier appel de la macro \verb+suiterec+. \verb+lab+ désigne l'étiquette au niveau de l'axe des abscisse placée à la position \verb+pos+. Si \verb+lab+ est la chaîne vide \verb+""+, rien n'est écrit ; si \verb+lab+ est une autre chaîne de caractère (par ex. \verb+"u"+), elle est utilisée comme nom de la suite (on obtiendra $u_0$, $u_1$...) ; si \verb+lab+ est un nombre, les valeurs de la suites seront affichées et arrondies à \verb+lab+ décimales. Les valeurs \verb+min+ et \verb+max+ sont facultatives et égales par défaut aux valeurs \verb+deb+ et \verb+fin+ passées à la macro \verb+suiterec+.

\item[suiterecprojy.pos(lab,min,max)] même chose sur l'axe des ordonnées.

\item[suiterecproj(lab,min,max)] même chose sur les deux axes. Les positions sont \verb+bot+ sur l'axe des abscisses et \verb+lft+ sur l'axe des ordonnées.


\begin{exemple}[0.55]
repere(-2,4.5,1cm,-1,4,1cm);
vardef f(expr x)=sqrt(2*x+4) enddef;
path C_f,sr;
C_f= courbefonc(f)();
sr=suiterec(f,0,3,-1.2);
draw axes(1,0);
drawoptions(withpen pencircle scaled 1);
draw C_f withcolor bleu;
draw droite(1,0);
drawoptions(withcolor rouge);
draw suiterecprojx.bot(1) dashed evenly;
draw suiterecprojy.lft("") dashed evenly;
draw sr withcolor rouge;
fin;
\end{exemple}

\begin{exemple}
repere(-0.5,5,1cm,-0.5,5,1cm);
vardef f(expr x)=4-0.8*x enddef;
path C_f,sr;
C_f= courbefonc(f)();
sr=suiterec(f,0,5,0.2);
draw axes(1,0);
drawoptions(withpen pencircle scaled 1);
draw C_f  withcolor bleu;
draw droite(1,0);
drawoptions(withcolor rouge);
draw suiterecproj("u",1,3) dashed evenly;
draw sr withcolor rouge;
fin;
\end{exemple}



\end{description}



\section{Surfaces}

\subsection{Calcul intégral}
\begin{description}
\item[entrecourbes(p,q,xmin,xmax)] chemin fermé délimitant la zone comprise entre les courbes \verb+p+ et \verb+q+ et les droites d'équations $y=\verb+xmin+$ et $y=\verb+xmax+$. Il peut donc être dessiné, rempli...

\item[souscourbe(p,xmin,xmax)] chemin fermé délimitant la zone comprise entre la courbe \verb+p+, l'axe des abscisses et les droites d'équations $y=\verb+xmin+$ et $y=\verb+xmax+$.
\end{description}


\begin{exemple}
repere(-3.5,6,0.7cm,-2.5,4.5,0.7cm);
vardef f(expr x)= -(x/4)**3+0.75x enddef;
vardef g(expr x)= -((x-2)**2)/9+4 enddef;
path C_f,C_g,p,q;
C_f:= courbefonc(f)();
C_g:= courbefonc(g)();
p:=entrecourbes(C_f,C_g,-2,1);
q:=souscourbe(C_f,3,5);
fill p withcolor 0.5Violet;
draw p withpen pencircle scaled 2
                        withcolor Violet;
fill q withcolor 0.5Bleu;
draw q dashed evenly withcolor Bleu;
draw axes(1,1);
drawoptions(withpen pencircle scaled 1);
draw C_f withcolor Bleu;
draw C_g withcolor Rouge;
draw cadre;
fin;
\end{exemple}

\begin{description}
\item[rectangles.type(p,a,b,n)] figure formée de \verb+n+ rectangles s'appuyant sur la courbe \verb+p+ entre les abscisses \verb+a+ et \verb+b+. \verb+type+ peut être \verb+min+, \verb+max+, \verb+droite+ ou \verb+gauche+.
\end{description}


\begin{exemple}
repere(-2.5,6,0.8cm,-2,5,0.8cm);
vardef f(expr x)=
 -((x-2)**4)/32+((x-2)**2)/2+1
enddef;
path Cf,r[];
Cf= courbefonc(f)();
r1=rectangles.max(Cf,2,5.5,8);
r2=rectangles.min(Cf,2,5.5,8);
r3=rectangles.droite(Cf,-2,1,10);
fill r1 withcolor 0.8Rouge;
fill r2 withcolor 0.4Rouge;
fill r3 withcolor 0.5Bleu;
draw r1;draw r2 withcolor 0.8Rouge;
draw r3;
draw axes(1,0);
draw Cf withcolor Bleu
               withpen pencircle scaled 1;
fin;
\end{exemple}

\subsection{Demi-plans}
\begin{description}
 \item[demiplaninf(d)] chemin fermé délimité par la droite \verb+d+ et par la partie inférieure de \verb+cadre+ (ou la partie gauche si \verb+d+ est parallèle à l'axe des ordonnées.
 \item[demiplansup(d)] chemin fermé délimité par la droite \verb+d+ et par la partie supérieure de \verb+cadre+ (ou la partie droite si \verb+d+ est parallèle à l'axe des ordonnées.
\end{description}


\begin{exemple}
repere(-2.5,3.5,1cm,-2.5,3.5,1cm);
numeric qqw;qqw=6;
path d[],dp[];
d1=droite(2);
d2=droite(1,1);
d3=droite(-0.5,-0.5);
dp1=demiplansup(d1);
dp2=demiplansup(d2);
dp3=demiplaninf(d3);
for i=1 upto 3:
fill dp[i] withcolor 0.7Lime;
endfor
draw axes(1,1);
drawoptions(withpen pencircle scaled 1
                     withcolor Vertfonce);
draw d1;draw d2;
draw d3 dashed evenly;
drawoptions();
draw cadre;
fin;
\end{exemple}





\section{Projections sur les axes}

\subsection{Projetés}
\begin{description}
\item[projetex(A)] projeté de \verb+A+ sur l'axe des abscisses parallèlement à l'axe des ordonnées.

\item[projetey(A)] projeté de \verb+A+ sur l'axe des ordonnées parallèlement à l'axe des abscisses.

\item[projectionx.pos(A,lab,dec)] figure constituée du segment joignant \verb+A+ à son projeté sur l'axe des abscisses ainsi que de l'étiquette \verb+lab+ placée à la position \verb+pos+ par rapport à ce projeté. La valeur \verb+dec+ indique un décalage par rapport à l'axe des abscisses. L'étiquette et le décalage sont optionnels.

\item[projectiony.pos(A,lab,dec)] même chose sur l'axe des ordonnées.

\item[projectionaxes(A,labx,laby,dec)] figure constituée des segments joignant \verb+A+ à ses projetés sur les axes ainsi que des étiquettes \verb+labx+ et \verb+laby+ positionnées automatiquement avec un décalage \verb+dec+ par rapport aux axes. Les étiquettes et le décalage sont optionnels.
\end{description}



\begin{exemple}[0.6]
repere(-1.5,3.5,1cm,-2.2,2.5,1cm);
path Cf; pair A[];
vardef f(expr x)= x**2-2x-0.5 enddef;
Cf= courbefonc(f)();
ptantecedents(A,2,Cf);
draw axes(1,1);
draw Cf withpen pencircle scaled 1 withcolor bleu;
drawoptions(dashed evenly withcolor rouge);
draw projectionaxes((1.3,f(1.3)),"$x$","$f(x)$");
draw projectionx.urt(A1,"$x_1$");
draw projectionx.llft(A2,"$x_2$",-6);
draw A1--A2;
fin;
\end{exemple}

\subsection{Intervalles}
\begin{description}
\item[intervallex.bornes(a,b)] intervalle dessiné sur l'axe des abscisses entre \verb+a+ et \verb+b+ avec une épaisseur par défaut de \verb+1.5bp+. \verb+bornes+ peut être \verb+OO+ (ouvert à gauche, ouvert à droite), \verb+OF+, \verb+FO+ ou \verb+FF+.

\item[intervalley.bornes(a,b)] même chose sur l'axe des ordonnées.
\end{description}


\begin{exemple}[0.6]
repere(-1,5,0.9cm,-1,4.5,1cm);
vardef f(expr x)=x**2-5x+7 enddef;
draw axes(1,1);
draw courbefonc(f)()
       withpen pencircle scaled 1 withcolor bleu;
drawoptions(dashed evenly withcolor rouge);
draw projectionx.bot((1,f(1)));
draw projectiony.llft((2.5,f(2.5)),"0,75");
draw projectionaxes((4,f(4)));
drawoptions(withcolor violet);
draw intervallex.OF(1,4);
draw intervalley.FF(0.75,3);
label("$f(]1;4])=[0,75;3]$",(2.5,4));
draw cadre;
fin;
\end{exemple}



\section{Statistiques et probabilités}

\subsection{Boite à moustache}
\begin{description}
\item[boitemoustache(min,Q1,Me,Q3,max,dec,larg)] \og Boite à moustache \fg{} correspondant aux données en argument. Elle est située à un distance \verb|dec| de l'axe des abscisses et le rectangle a une largeur de \verb|larg|. Ces deux dernières valeurs sont optionnelles et valent par défaut \SI{1,5}{cm} et \SI{1}{cm}.

\item[projboitemoustache(t)] Figure formée des lignes joignant les cinq valeurs du dernier diagramme en boite dessiné à son projeté sur l'axe des abscisses ainsi que de certaines étiquettes : Si \verb|t| est vide, les textes $X_{min}$, $Q_1$, $M_e$, $Q_3$ et $X_{max}$ sont affichés ; si \verb|t| est un entier, les valeurs arrondies à $10^{-t}$ sont affichées ; si \verb|t| est une liste de cinq textes (ou valeurs), ceux-ci sont affichés.
\end{description}


\begin{exemple}
repere(-0.5,10,0.7cm,-1,5,0.7cm);
 setaxes(0,10,0,1);
 draw axex(1,0);
 draw boitemoustache(1,4,5,7,9)
                            withcolor marine;
 draw projboitemoustache.bot()
           withcolor 0.7rouge dashed evenly;
fin;
\end{exemple}

\begin{exemplev}[1]{1}
repere(-1,11,0.8cm,-1,5,0.7cm);
 settout(-0.5,10.5,0,1);
 draw axex(1,0);
 drawoptions(withcolor rouge);
 draw boitemoustache(1.22,3.9,5,7.18,9.05,1cm,0.7cm);
 draw projboitemoustache.bot(1) dashed evenly;
 drawoptions(withcolor blue);
 draw boitemoustache(0,3.14,6,8,10,2cm,0.7cm);
 draw projboitemoustache.bot(0.0456,"$\pi$","$\num{2x3}$","$x$","Max") dashed evenly;
fin;
\end{exemplev}


\subsection{Diagrammes}
\begin{description}
\item[diagrammebatons((v1,e1),(v2,e2),...(vn,en))] Figure formée des \verb|n| segments joignant les points \verb|(v1,e1),(v2,e2),...(vn,en)| et leur projeté sur l'axe des abscisses. Les bâtons sont surmontés d'un point dont le diamètre est égal à la largeur des segments multiplié par \verb|diampointsbatons|. \verb|diampointsbatons| est égal à 5 par défaut. On peut lui donner la valeur 0 pour ne pas avoir ces points.
\end{description}

\begin{exemple}[0.6]
repere(-0.5,5,1cm,-0.5,5,1cm);
 picture diag;
 draw axes(1,1);
 diag:=diagrammebatons((1,2),(2,4),(3,2),(4,1));
 draw diag epaisseur 2 withcolor rouge;
fin
\end{exemple}


\begin{description}
\item[diagrammebarres((a1,h1),(a2,h2),...(an,hn))] Figure formée de \verb|n| barres rectangulaires de hauteurs \verb|h1| \dots \verb|hn| aux abscisses \verb|a1| \dots \verb|an|. La largeur de ces barres est le nombre \verb|largbarres| qui vaut \verb|20bp| par défaut.
\end{description}

\begin{exemple}[0.6]
repere(-0.5,5,1cm,-0.5,5,1cm);
 path diag;
 draw axey(1,1);
 diag:=diagrammebarres((1,2),(2,4),(3,2),(4,1));
 fill diag withcolor cyan;
 draw diag epaisseur 1 withcolor marine;
 flecheaxe:=false;
 draw axex(0,0);
 boolgradxpart:=false;
 draw axexpart.bot(1,"A",2,"B",3,"C",4,"D");
fin
\end{exemple}

\subsection{Probabilités}

Quelques fonctions mathématiques sont proposées. Pour les grandes valeurs, on dépasse rapidement les capacités de \MP. Il est dans ce cas conseillé de compiler en utilisant la ligne de commande \verb|mpost -numbersystem="decimal" <fichier>.mp|.


\begin{description}
\item[factorielle(n)] Entier égal à $n!$.
\item[binom(n,k)] Entier égal à $\binom{n}{k}$.
\item[binomiale(n,p,k)] $P(X=k)$ pour $X$ suivant la loi binomiale de paramètres $n$ et $p$.
\item[diagrammebinomiale(n,p)] Diagramme en bâtons de la loi binomiale de paramètres $n$ et $p$.
\item[diagrammeuniforme(n,m)] Diagramme en bâtons de la loi uniforme discrète sur les entiers consécutifs de \verb|n| à \verb|m|.
\item[diagrammegeometrique(p)] Diagramme en bâtons de la loi géométrique de paramètre \verb|p|.
\item[diagrammepoisson(lambda)] Diagramme en bâtons de la loi de Poisson de moyenne \verb|lambda|.
\end{description}


\begin{exemple}
repere(-2,16,0.45cm,-0.1,0.25,15cm);
setall(0,16,0,0.25);
draw axex(1,1);
draw axey(0.1,0.1);
picture diag;
diampointsbatons:=0;
diag:=diagrammebinomiale(15,0.6);
draw diag withcolor vertfonce epaisseur 4;
fin;
\end{exemple}

\begin{codecache}
diampointsbatons:=5;
\end{codecache}

\begin{exemple}
repere.larg(-2,10,8cm,-0.1,0.5,6cm);
 setall(0,10,0,0.5);
 draw axex(1,1);
 draw axey(0.05,0.05);
 draw diagrammegeometrique(0.4)
                   epaisseur 2 couleur bleu;
fin;
\end{exemple}

\begin{exemple}
repere(-2,16,0.45cm,-0.1,0.25,15cm);
setall(0,16,0,0.25);
draw axex(1,1);
draw axey(0.1,0.1);
picture diag;
diampointsbatons:=0;
diag:=diagrammepoisson(6);
draw diag withcolor orange epaisseur 4;
fin;
\end{exemple}

\begin{description}
\item[densitenormale(mu,sigma,a,b)] Courbe représentant la densité de la loi normale de moyenne \verb|mu| et d'écart type \verb|sigma| entre \verb|a| et \verb|b|. Si \verb|a| et \verb|b| sont omis, le tracé est fait sur l'intervalle définissant le repère.
\item[densiteexponentielle(lambda)] Courbe représentant la densité de la loi normale de paramètre \verb|lambda|.
\end{description}

\begin{codecache}
prefnomme:="top";
\end{codecache}

\begin{exemple}[0.45]
repere(-4,32,0.23cm,-0.01,0.12,46cm);
  draw axex(2,2);
  draw axey(0.02,0.02);
  path C,d;
  C=densitenormale(16,4);
  fill souscourbe(C,0,14) couleur gris;
  draw souscourbe(C,0,14);
  draw C epaisseur 2 couleur rouge;
  d=droite(16);
  draw d dashed evenly;
  drawarrow (5,0.06)--(11,0.02);
  label.top("$P(X\leq 14)$",(5,0.06));
  nomme(d,"$\mu$");
fin;
\end{exemple}

\begin{exemple}
repere.larg(-1,9,8cm,-0.05,0.6,6cm);
  setall(0,9,0,0.6);
  draw axex(1,1);
  draw axey(0.1,0.1);
  path C,D;
  C=densiteexponentielle(0.5);
  D=densiteexponentielle(0.3);
  draw C epaisseur 2 couleur rouge;
  draw D epaisseur 2 couleur violet;
fin;
\end{exemple}


\section{Géométrie}
Certaines des macros suivantes sont largement inspirées des macros de \verb|geometriesyr16.mp| de Christophe \bsc{Poulain}.

\subsection{Polygones}
\begin{description}
\item[polygone(A,B,C,...)] Chemin fermé représentant le polygone $ABC...$

\item[triangle(A,B,C)] Cas particulier du précédent. Chemin fermé représentant le triangle $ABC$.

\item[parallélogramme(A,B,C)] Chemin fermé représentant $ABCD$ où $D$ est le quatrième point du parallélogramme.

\item[polygoneregulier(A,B,n)] Chemin fermé représentant le polygone régulier de sens direct à $n$ côtés dont un des côtés est $[AB]$.

\item[equilateral(A,B)] Cas particulier du précédent. Triangle équilatéral de sens direct de côté $[AB]$.

\item[carre(A,B)] Autre cas particulier. Carré de sens direct de côté $[AB]$.

\item[sommetpolygoneregulier(A,B,n,i)] Sommet numéro $i$ du polygone régulier à $n$ côtés dont un des côtés est $[AB]$. $A$ est le sommet numéro 1 et $B$ est le sommet numéro 2.
\end{description}

\begin{exemple}[0.51]
repere(-1,5,1cm,-1,4,1cm);
draw axes(1,1);
pair A,B,C,D,E,F,G;
A=(0,1);B=(2,0);C=(4,2);D=(3,3);E=(1,3);
F=(4,0);G=(3,2);
fill triangle(A,F,G) withcolor orange;
draw triangle(A,F,G);
draw polygone(A,B,C,D,E);
draw parallelogramme(D,G,E) withcolor vert;
fin;
\end{exemple}


\begin{exemple}[0.53]
repere(-1,5,1cm,-1,4,1cm);
draw axes(1,1);
pair A,B,M;
A=(1,1);B=(3,0.5);
fill polygoneregulier(A,B,5) withcolor bleu;
fill equilateral(A,B) withcolor cyan;
draw polygoneregulier(A,B,5);
M=sommetpolygoneregulier(A,B,5,3);
nomme.rt(M);
draw equilateral(A,B);
fin;
\end{exemple}

\subsection{Cercles et arcs}

\begin{description}
\item[cercle(A,B,C)] Cercle circonscrit au triangle $ABC$.
\item[cercle(O,A)] Cercle de centre $O$ passant par $A$.
\item[cercle(O,r)] Cercle de centre $O$ et de rayon $r$. L'unité de longueur est l'unité de l'axe des abscisses.
\item[arccercle(A,O,B)] Arc de cercle de sens direct de centre $O$, passant par $A$ et s'appuyant sur la demi-droite $[OB)$.
\end{description}


\begin{exemple}
repere(-1,5,1cm,-0.5,4,1cm);
draw axes(1,1);
pair A,B,C;
A=(1,1);B=(2,0);C=(3.5,2);
nomme.lft(A);nomme.urt(C);nomme.top(B);
draw triangle(A,B,C) withcolor bleu;
draw cercle(A,B,C) withcolor marine;
draw A--B withcolor rouge epaisseur 1;
draw cercle(A,B) withcolor rouge;
fin;
\end{exemple}


\begin{exemple}
repere(-1,5,1cm,-2,8,0.5cm);
draw axes(1,1);
pair A,M,B;
A=(2,2);M=(2,6);B=(3,2);
nomme.bot(A);nomme.rt(B);nomme.top(M);
draw B--A--M;
draw cercle(A,2);
draw arccercle(B,A,M);
fin;
\end{exemple}



\subsection{Codage des segments et des angles}

\begin{description}
\item[marqueangle(A,O,B,n)] Figure formée de \verb|n| arcs de cercle de centre $O$ et de rayon moyen \verb|taille_marque_a| (qui vaut par défaut \verb|0.4cm|) permettant de marquer l'angle géométrique $\widehat{AOB}$. Les arcs son séparés de \verb|sep_marque_a| qui vaut par défaut \verb|1.5|.

Il s'agit d'un chemin fermé qui peut donc être rempli.

\item[marqueangle(A,O,B)] Arc de cercle de centre \verb|O| et de rayon \verb|taille_marque_a| permettant de marquer l'angle orienté avec \verb|drawarrow|.

\item[nomme.pos(A,O,B,texte)] Place le texte entre \verb|A| et \verb|B|, à une distance \verb|taille_marque_a| du centre, à la position \verb|pos|.
\end{description}


\begin{exemple}
repere(-2,12,0.4cm,-2,10,0.4cm);
pair A,B,C;
A=(1,2);B=(11,2);C=(8,9);
draw axes(0,0);
draw triangle(A,B,C);
nomme.llft(A);nomme.lrt(B);nomme.top(C);
fill marqueangle(C,B,A,3) withcolor red;
draw marqueangle(C,B,A,3);
drawarrow marqueangle(A,C,B);
fill marqueangle(B,A,C,1) withcolor vert;
draw marqueangle(B,A,C,1);
nomme.rt(B,A,C,"\ang{45}");
fin;
\end{exemple}

\begin{description}
\item[marqueangledroit(A,O,B)] Chemin fermé permettant de marquer l'angle droit $\widehat{AOB}$ sous forme d'un losange (il s'agit donc d'un carré si l'angle est réellement droit). Le côté du losange est \verb|taille_marque_ad| et vaut \verb|0.3cm| par défaut.
\item[marquesegment(A,B,n)] Figure formées de \verb|n| marques sur le segment $[AB]$. Ces marques ont une taille de \verb|taille_marque_s| (\verb|0.3cm| par défaut), forment un angle en degrés de \verb|angle_marque_s| avec le segment (\verb|60| par défaut) et sont séparées de \verb|sep_marque_s| (\verb|2| par défaut).
\end{description}

\begin{exemple}[0.6]
repere(-1,10,0.5cm,-1,9,0.5cm);
pair A,B,C,A',B',C',u;
A=(3,1);B=(5,2);C=(1,5);u=(3,3);
A'-A=B'-B=C'-C=u;
draw projectionaxes(A,"$x_A$","$y_A$") dashed evenly;
draw axes(0,0);
drawoptions(withcolor pourpre);
draw triangle(A,B,C);draw triangle(A',B',C');
draw marqueangledroit(B,A,C);
draw marqueangledroit(B',A',C');
draw marquesegment(B,C,2);
draw marquesegment(B',C',2);
nomme.llft(A);nomme.lrt(B);nomme.ulft(C);
nomme.llft(A');nomme.lrt(B');nomme.ulft(C');
drawoptions(withcolor vertfonce);
draw vecteur.lrt(B,u);draw vecteur.lrt(C,u);
fin;
\end{exemple}%

\section{Divers}
\subsection{Composition des étiquettes}
Tous les textes et étiquettes peuvent être composés en utilisant la macro ci-dessous.
\begin{description}
 \item[LaTeX(ch)] \label{latex} Figure formée de la chaîne \verb+ch+ composée avec \LaTeX{} et mise à l'échelle \verb|defaultscale|. Cette macro utilise la commande \verb|textext| de \verb|luamplib| dans le cas de l'utilsation de Lua\LaTeX{} et \verb|textext| de \verb|latexmp| dans le cas d'une compilation \MP{} \og standard \fg. Ce dernier cas nécessite alors deux compilations.
\end{description}


\begin{exemple}[0.65]
repere(-1,7,1cm,-1,1,1cm);
for i=2 upto 6:
label(LaTeX("$\frac{1}{"&decimal(i)&"}$"),(i,0));
endfor
fin;
\end{exemple}

\begin{description}
\item[label.pos(fig,point)] Commande de \MP{} qui permet de placer la figure \verb|fig| au niveau du point \verb|point|.
\end{description}

\begin{exemple}[0.55]
repere(-1,5,1cm,-1,4,1cm);
draw axes(1,1);
label.ulft("Abscisses",(5,0.1));
label.lrt("Ordonnées",(0.1,4));
label("$f(x)=\pi^2\sqrt{x}$",(2,2));
fin;
\end{exemple}

\begin{description}
\item[legende.pos(fig,p)] Figure formée du chemin \verb|p| dessiné avec une flèche et de la figure ou de la chaine \verb|fig| située à la position \verb|pos| par rapport au premier point du chemin.
\end{description}

\begin{exemple}[0.6]
repere(-0.5,5,1cm,-0.5,4,1cm);
  draw axes(1,1);
  pair A,B;
  A=(2,1);B=(2,2);
  nomme.rt(A) couleur rouge;
  nomme.top(B) couleur rouge;
  legende.top("Le point $A$",(1,3){down}..{down}A);
  legende.bot("Le point $B$",(4,1)--B);
fin;
\end{exemple}

\subsection{Couleurs}
Certaines couleurs sont définies par leur nom et peuvent être utilisées directement : 

\begin{center}
\begin{figreperedoc}
repere(0,18,1cm,-3,1,1cm);
 path rectangle;
 save a,b,dech,decv;
 a:=25;b:=12;dech:=70;decv:=-20;
 rectangle = ((0,0)--(a,0)--(a,b)--(0,b)--cycle) transformed inverse _T;
 vardef couleur(expr t)=
    image(%
          fill rectangle withcolor scantokens(t);
          label.rt(LaTeX("\smash{" & t & "}"),(a,b/4) transformed inverse _T)
          )
 enddef;
 draw couleur("rouge");
 draw couleur("vert") shifted (dech,0);
 draw couleur("bleu") shifted (2*dech,0);
 draw couleur("cyan") shifted (3*dech,0);
 draw couleur("magenta") shifted (4*dech,0);
 draw couleur("jaune") shifted (5*dech,0);
 draw couleur("noir") shifted (6*dech,0);
 draw couleur("marron") shifted (0,decv);
 draw couleur("lime") shifted (dech,decv);
 draw couleur("orange") shifted (2*dech,decv);
 draw couleur("rose") shifted (3*dech,decv);
 draw couleur("pourpre") shifted (4*dech,decv);
 draw couleur("olive") shifted (5*dech,decv);
 draw couleur("violet") shifted (6*dech,decv);
 draw couleur("beige") shifted (0,2decv);
 draw couleur("marine") shifted (dech,2decv);
 draw couleur("moutarde") shifted (2*dech,2decv);
 draw couleur("grisclair") shifted (3*dech,2decv);
 draw couleur("gris") shifted (4*dech,2decv);
 draw couleur("grisfonce") shifted (5*dech,2decv);
 draw couleur("vertfonce") shifted (6*dech,2decv);
fin;
\end{figreperedoc}
\end{center}

Toutes ces couleurs sont définies selon le modèle \og rgb \fg. Pour les obtenir selon le modèle \og cmyk \fg, remplacer la première lettre par une majuscule.


\subsection{Remplissage}
Pour remplir des chemins fermés avec autre chose que de la couleur, \verb+repere+ permet l'utilisation de la syntaxe \verb+fill p avec motif+ où \verb+motif+ est un des motifs décrits ci-dessous. Cette instruction peut être complétée par des options de dessin (\verb+withpen+, \verb+withcolor+...).

\begin{description}
\item[hachures(pas,angle)] hachures espacées de \verb+pas+ et formant un angle en degrés de \verb+angle+ avec l'horizontale. Si les valeurs sont omises, \verb|pas| vaut 5 et \verb+angle+ vaut 60.


\item[briques(larg,haut,dec)] briques de largeur \verb+larg+, de hauteur \verb+haut+ et décalées d'une ligne à l'autre de \verb+dec+. Si les valeurs sont omises, \verb|larg| vaut 12, \verb|haut| vaut 6 et \verb+dec+ vaut 6.


\item[vagues(per,amp,dec)] (d'après le manuel de l'utilisateur) \og vagues \fg{} de période \verb+per+, d'amplitude \verb+amp+ et décalées d'une ligne à l'autre de \verb+dec+. Si les valeurs sont omises, \verb|per| vaut 20, \verb|amp| vaut 3 et \verb+dec+ vaut 10.
\end{description}



\begin{exemple}[0.55]
repere(-1.5,4.5,1cm,-1.5,7.5,1cm);
path c[];picture lab;
c1=fullcircle scaled 2.5;
for k=1 upto 6:
  i:=(k-1) mod 2;j:=(k-1) div 2;
  c[k]:=c1 shifted (3*i,3*j);
endfor;
fill c1 withcolor lime;
fill c1 avec hachures(10,30) dashed evenly;
fill c2 withcolor lime;
fill c2 avec hachures();
fill c3 withcolor (0,0.65,0.8,0.48);
fill c3 avec briques(15,5,4);
fill c4 withcolor (0,0.65,0.8,0.48);
fill c4 avec briques();
fill c5 withcolor (1,0,0,0.2);
fill c5 avec vagues(30,10,20)
           withpen pencircle scaled 2;
fill c6 withcolor (1,0,0,0.2);
fill c6 avec vagues();
for k=1 upto 6:
  i:=(k-1) mod 2;j:=(k-1) div 2;
  draw c[k];
  lab:=thelabel("c"&decimal(k),3*(i,j));
  unfill bbox lab;draw lab;
endfor;
fin;
\end{exemple}



\subsection{Figures pour une présentation}
\begin{description}
\item[figureinter] exporte la figure telle qu'elle est au moment où cette commande apparait. La numérotation est incrémentée et la figure peut continuer.
\end{description}
 L'exemple ci-dessous crée trois figures :
 
 \begin{exemplefiginter}[0.7]{3}
 repere(-3,3,0.7cm,-1,5,0.7cm);
  path C_f;
  vardef f(expr x)=x**2 enddef;
  C_f= courbefonc(f)();
  draw quadrillage(1,1);
  draw axes(1,1);
  draw cadre;
  figureinter;
  draw courbepoints(f)(-2,2,9) withcolor rouge;
  figureinter;
  draw C_f withcolor bleu withpen pencircle scaled 1;
 fin;
 \end{exemplefiginter}


Si ces trois figures s'appellent \verb|mafigure.1|, \verb|mafigure.2| et \verb|mafigure.3|,  elles peuvent être incluses dans un document de la classe \verb|beamer| avec le code ci-dessous :

\begin{center}
\begin{minipage}{0.6\linewidth}
\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightSteelBlue},language={[LaTeX]TeX}]
\documentclass{beamer}
 \ifpdf   % Pour utiliser pdflatex
  \DeclareGraphicsRule{*}{mps}{*}{}
 \fi
\begin{document}
\begin{frame}
\includegraphics<+>{mafigure.1}%
\includegraphics<+>{mafigure.2}%
\includegraphics<+>{mafigure.3}%
\end{frame}
\end{document}
\end{lstlisting}
\end{minipage}
\end{center}




\subsection{Code embarqué dans un document \LaTeX}

Certains packages permettent d'écrire du code \MP{} directement dans un document \LaTeX. \verb|repere| est compatible avec, entre autres, \verb|emp| et \verb|mpgraphics|.

\medskip

\begin{minipage}[t]{0.45\linewidth}
{\centering \textbf{Utilisation du package \texttt{emp}}\par}



\verb|pdflatex monfichier.tex|

\verb|mpost monfichier.mp|

\verb|mpost monfichier.mp|

\verb|pdflatex monfichier.tex|


\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightSteelBlue},language={[LaTeX]TeX}]
\documentclass{article}
\usepackage{emp}
\usepackage{ifpdf}
 \ifpdf % Pour utiliser pdflatex
  \DeclareGraphicsRule{*}{mps}{*}{}
 \fi
\begin{document}
\begin{empfile}
\begin{empcmds}
 input repere;
\end{empcmds}
\begin{emp}(0,0)
  repere(-3,3,1cm,-2,2,1cm);
   draw axes(1,1);
  fin;
\end{emp}
\end{empfile}
\end{document}
\end{lstlisting}
\end{minipage}
\hfill
\begin{minipage}[t]{0.45\linewidth}
{\centering \textbf{Utilisation du package \texttt{mpgraphics}}\par}


\verb|pdflatex -shell-escape monfichier.tex|

\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightSteelBlue},language={[LaTeX]TeX}]
\documentclass{article}
\usepackage[runs=2]{mpgraphics}
\begin{document}
\begin{mpdefs}
 input repere;
\end{mpdefs}
\begin{mpdisplay}
  repere(-3,3,1cm,-2,2,1cm);
   draw axes(1,1);
  fin;
\end{mpdisplay}
\end{document}
\end{lstlisting}
\end{minipage}


Il est aussi possible d'utiliser Lua\LaTeX{} avex le package \verb|luamplib|. Il faut alors charger les packages \verb|siunitx| et \verb|esvect| utilisés par \verb|repere|.

\begin{center}
\begin{minipage}[t]{0.5\linewidth}
{\centering \textbf{Utilisation de Lua\LaTeX}\par}


\verb|lualatex monfichier.tex|

\begin{lstlisting}[frame=single,frameround=tttt,backgroundcolor=\color{LightSteelBlue},language={[LaTeX]TeX}]
\documentclass{article}
\usepackage{fontspec}
\usepackage{siunitx}
\usepackage{esvect}
\usepackage{luamplib}
\mplibnumbersystem{double} % Si nécessaire
\begin{document}
\everymplib{input repere;}
\begin{mplibcode}
  repere(-3,3,1cm,-2,2,1cm);
  draw axes(1,1);
fin;
\end{mplibcode}
\end{document}
\end{lstlisting}
\end{minipage}
\end{center}

\section{Dessin à main levée avec \texttt{geometriesyr}}

\label{exgeom}Il est possible, dans une figure créée avec \verb+repere+, d'utiliser le \og dessin à main levée \fg{} de \verb+geometriesyr+. Il faut alors charger \verb+geometriesyr+ \emph{avant} \verb|repere| et utiliser les fonctions de dessin telles que \verb|cercles|, \verb|triangle|...

\begin{exemple}
repere(-0.5,5,1cm,-0.5,5,1cm);
pair A,B,C,D;
A=(0.5,0.5);B=(4,1);C=(3,4);
typetrace:="mainlevee";
draw axes(1,1);
drawoptions(withcolor violet);
draw triangle(A,B,C);
nomme.llft(A);nomme.lrt(B);
nomme.top(C);
draw marqueangle(B,A,C,1);
drawoptions(withcolor vertfonce);
draw cercles(CentreCercleC(A,B,C),A);
fin;
\end{exemple}



\begin{codecache}
end
\end{codecache}

\makeatletter
\immediate\closeout\verbatim@out
\makeatother
\end{document}


\vspace{2em}


\begin{exemplev}[1]{2}
repere(-9.5,6,1cm,-1.25,1.25,2cm);
%cercle
pair O,A,A',B,B',M,S,C;
numeric x;x=pi/4;
O=_c(-7,0);A=_c(-5,0);
B=_c(-7,1);A+A'=B+B'=2O;
M=rotation(A,O,180*x/pi);
C=projection(M,A,A');
S=projection(M,B,B');
draw cerclepoint(O,A);
drawarrow A'--A;drawarrow B'--B;
nomme.rt(A);nomme.top(B);nomme.llft(O);
drawoptions(withcolor rouge);
draw O--M;draw C--M--S dashed evenly;
draw codeperp(M,C,O,5);
draw codeperp(O,S,M,5);
draw codeangle.urt(A,O,M,0,
                         LaTeX("$x$"));
marque_p:="";
nomme.urt(M);
label.lft(LaTeX("$\sin x$"),S);
%repere
settout(-4.5,6,-1.25,1.25);
path C_f;
C_f=courbefonc(sin,-4.5,6,80);
pair m;m=_c(x,sin(x));
drawoptions();
draw axexpi.bot(1,2);
draw axey(0.5,1);
drawoptions(withcolor bleu);
draw C_f withpen pencircle scaled 1.5;
nomme.urt(C_f,2.5,LaTeX("$y=\sin x$"));
drawoptions(withcolor rouge);
draw projectionx.bot(m,LaTeX("$x$"))
                         dashed evenly;
%
draw M--m dashed evenly;
fin;
\end{exemplev}

\vspace{3em}

\begin{exemple}
repere(-0.5,5,1cm,-0.5,5,1cm);
coulpoint:=blue;coullabel:=blue;
pair A,B,C,D;
A=_c(0.5,0.5);B=_c(4,1);C=_c(3,4);
typetrace:="mainlevee";
draw axes(1,1);
drawoptions(withcolor violet);
draw triangle(A,B,C);
nomme.llft(A);nomme.lrt(B);
nomme.top(C);
draw marqueangle(B,A,C,0);
drawoptions(withcolor vertfonce);
draw cercles(CentreCercleC(A,B,C),A);
fin;
\end{exemple}





\begin{codecache}
end
\end{codecache}

\makeatletter
\immediate\closeout\verbatim@out
\makeatother
\end{document}


