<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
%! TEX root
\documentclass[a4paper,french]{article}
\input{mp-geom2d-doc-preamb.tex}


\begin{document}
%% === Page de garde ===================================================
\thispagestyle{empty}
\begin{tikzpicture}[remember picture, overlay]
 \node[below right, shift={(-4pt,4pt)}] at (current page.north west) {%
   \includegraphics{fond.pdf}%
 };
\end{tikzpicture}%

\noindent
{\includegraphics{mp-geom2d}\\
\Large Paquet \MP{} pour des figures de gÃ©omÃ©trie plane}\\[1cm]
\parbox{0.5\textwidth}{
\includegraphics[scale=0.86]{figure.pdf}
}\hfill
\parbox{0.5\textwidth}{\Large\raggedleft
   \textbf{Contributeurs}\\
   Maxime \textsc{Chupin}\\
   Jean-Michel \textsc{Sarlat}
}
\vfill
\begin{center}
Version \gddVersion\ du \printdate{\gddDate} \\
\url{https://gitlab.gutenberg-asso.fr/mchupin/mp-geom2d}\\
\url{https://ctan.org/pkg/mp-geom2d}
\end{center}
%% == Page de garde ====================================================
\newpage

\tableofcontents

\section{Objectif}

\mpgeomdd a Ã©tÃ© Ã©crit avec le but de proposer des macros \MP{} permettant
de rÃ©aliser une figure de gÃ©omÃ©trie \emph{en collant} d'assez prÃ¨s
Ã&nbsp; une description impÃ©rative:
\begin{quote}\itshape
Soit \(A\) le point de coordonnÃ©es (2,3).\\
Soit \(B\) le point de coordonnÃ©es (4,5).\\
Trace la droite \((A,B)\).\\
....
\end{quote}
Dans ce cadre, les objets gÃ©omÃ©triques sont le plus souvent nommÃ©s
(\(A\), \(B\), etc.) ou dÃ©signÃ©s par leur nature et leurs attributs
(droite \((A,B)\), etc.). Pour ne pas avoir Ã&nbsp; dÃ©passer ce mode de
description, en particulier pour Ã©viter d'avoir Ã&nbsp; dÃ©clarer le
\emph{type} de ces objets, le choix a Ã©tÃ© fait de les identifier par
un \emph{index}\footnote{Le type \typeMP{numeric}, qui est le type par
dÃ©faut dans \MP, ne demande pas de dÃ©claration prÃ©alable.} dans des
tables qui en prÃ©cisent les caractÃ©ristiques.

\begin{Note} Ã€ ce jour, l'objectif n'est pas atteint, le
dÃ©veloppement est loin d'Ãªtre achevÃ©; il est encore nÃ©cessaire de
faire appel Ã&nbsp; des commandes \MP{} ou Ã&nbsp; des \emph{macros
intermÃ©diaires} pour dÃ©crire une figure. Cela Ã©voluera sans doute
avec le temps, le temps de trouver une syntaxe satisfaisante...
\end{Note}


\section{Les fichiers}

\mpgeomdd est un ensemble d'outils pour la gÃ©omÃ©trie plane avec
\MP~\cite{ctan-metapost}. Cet 
ensemble est organisÃ© en plusieurs fichiers :

\begin{enumerate}
\item \fichier{geom2d.mp} : c'est le fichier principal, qui charge tous les
autres ;
\item \fichier{geom2d-main.mp} : il contient
  les structures et fonctions gÃ©nÃ©rales ;
\item \fichier{geom2d-arc.mp} :
  contient tout ce qui concerne les arcs de cercles ;
\item \fichier{geom2d-c2d.mp} :
  contient tout ce qui concerne les courbes du second degrÃ© ;
\item \fichier{geom2d-fct.mp} :
  contient quelques fonctions mathÃ©matiques usuelles ;
\item \fichier{geom2d-lbl.mp} :
  contient les fonctions relatives aux labels ;
\item \fichier{geom2d-plt.mp} :
  contient des fonctions facilitant la reprÃ©sentation de fonctions
  mathÃ©matiques ;
\item \fichier{geom2d-rep.mp}
  contient diffÃ©rents outils pour le tracÃ© de figure dans un repÃ¨re ;
\item \fichier{geom2d-tra.mp}
  contient les fonctions permettant de gÃ©rer la transparence (code
  empruntÃ© Ã&nbsp; Anthony \bsc{Phan}) ;
\item \fichier{geom2d-svgnames.mp} fournit les 150 couleurs de la spÃ©cification
SVG. 
\end{enumerate}

Nous allons, dans la suite, dÃ©crire plus en dÃ©tail chacune de ces
fonctions. Certaines fonctions s'appuient sur
l'extension \fichier{graph.mp} prÃ©sente dans toutes les bonnes
distributions \TeX.

\section{Principe gÃ©nÃ©ral de fonctionnement}

\mpgeomdd utilise des tables comme structure principale. Chaque objet est
numÃ©rotÃ© \emph{via} le compteur \variableGDD{gddO}, son type\footnote{Les types
sont propres Ã&nbsp; \mpgeomdd et seront dÃ©crits plus tard.} est stockÃ© dans
la table \variableGDD{gddT[]} Ã&nbsp; la place \variableGDD{gddT[gddO]}. Les
propriÃ©tÃ©s des objets sont dÃ©finies dans, lÃ&nbsp; encore, des tables de
type \typeMP{numeric} qui sont \variableGDD{gddA[]}, \variableGDD{gddB[]},
\dots, \variableGDD{gddF[]}.

Par exemple, pour un \typeGDD{Point} (type \mpgeomdd), la premiÃ¨re coordonnÃ©e
se trouve dans \variableGDD{gddA[]} et la seconde dans \variableGDD{gddB[]}
(les autres tables ne sont pas utilisÃ©es pour un tel objet).

Il y a trois tables particuliÃ¨res \variableGDD{gddP[]} qui est du type
\typeMP{path}, \variableGDD{gddPX[][]} qui est sa version Ã©tendue, et \variableGDD{gddS[]} qui est du type
\typeMP{string}. Nous verrons plus tard quelle est leur utilitÃ©.

Bien entendu, lors d'une utilisation classique de \mpgeomdd, l'appel Ã&nbsp;
toutes ces tables n'est pas chose courante. Les fonctions que nous
allons dÃ©crire dans la suite de ce document permettent de ne pas
avoir recours trop prÃ©cisÃ©ment Ã&nbsp; cette machinerie.


\section{TracÃ©s}

\mpgeomdd fournit des macros pour tracer des objets. Une commande permet de tracer
la plupart des objets de \mpgeomdd (qui sont dÃ©crits dans la
section~\ref{sec:types}), ainsi que certains type \MP. Les exemples tout au long
de la documentation permettront d'illustrer les commandes de tracÃ©.

Pour comprendre comment fonctionnent les reprÃ©sentations avec \mpgeomdd, il nous faut
tout d'abord dÃ©crire le mÃ©canisme de gestion des unitÃ©s.

\subsection{UnitÃ©}

\mpgeomdd dÃ©finit une unitÃ© gÃ©nÃ©rale avec la variable globale
\lstinline+gddU+. Ce \typeMP{numeric} vaut par
dÃ©faut \SI{1}{cm}.
\begin{colourband}
  \macro|gddU|
  \index{gddU@\lstinline+gddU+}
  \end{colourband}
\subsection{En place}

Lors de l'utilisation des commandes de tracÃ©, \mpgeomdd utilise la macro\label{gddEnPlace}
\begin{colourband}
\macro|gddEnPlace|
\index{gddEnPlace@\lstinline+gddEnPlace+}
\end{colourband}
Cette macro permet de spÃ©cifier les transformations gÃ©omÃ©triques nÃ©cessaires au
placement de l'objet, notamment le facteur d'Ã©chelle relatif Ã&nbsp; l'unitÃ©
\lstinline+gddU+.

En interne, cette macro est un \lstinline+scantoken+ de la variable globale
\variableGDD{gddW}\index{gddW@\lstinline+gddW+} (\typeMP{string}) qui contient les transformations. 

\subsection{Commandes de tracÃ©s}\label{sec:trace}

La macro de tracÃ© la plus courante est la macro \lstinline+trace+.
\begin{colourband}
\macro|trace(Â«objetÂ»)|
\begin{description}
  \item[\meta{objet}:] 
  \begin{itemize}
    \item pour le cÃ´tÃ© \MP, un \typeMP{path}, une
  \typeMP{picture} ou  un \typeMP{pair}, et dans ce cas \lstinline+trace+ sera
  Ã©quivalent Ã&nbsp; \lstinline+draw+;
    \item du cÃ´tÃ© de \mpgeomdd,
  n'importe quel des 6 objets dÃ©finis jusque lÃ&nbsp; : \typeGDD{triangle},
  \typeGDD{segment}, \typeGDD{droite}, \typeGDD{cercle}, \typeGDD{ellipse},
  \typeGDD{parabole}, \typeGDD{hyperbole},
  \typeGDD{polygone}, \typeGDD{chemin},
  \typeGDD{courbe} ou \typeGDD{vecteur} (pour ce dernier, une flÃ¨che sera
  ajoutÃ©e Ã&nbsp; l'extrÃ©mitÃ© du vecteur).
  \end{itemize}
\end{description}\index{trace@\lstinline+trace+}
\end{colourband}

Lorsque \lstinline+trace+ est utilisÃ©e sur un objet de \mpgeomdd, la macro fait
appel Ã&nbsp; la commande \MP\ \lstinline+draw+ avec le mÃ©canisme de mise en place
dÃ©crit plus haut.

\mpgeomdd fournit un tracÃ© avec flÃ¨che faisant non plus appel Ã&nbsp; \lstinline+draw+
mais Ã&nbsp; \lstinline+drawarrow+.

\begin{colourband}
\macro|fleche(Â«objetÂ»)|
\begin{description}
  \item[\meta{objet}:] 
  \begin{itemize}
    \item pour le cÃ´tÃ© \MP, un \typeMP{path}, une
  \typeMP{picture} ou  un \typeMP{pair}, et dans ce cas \lstinline+trace+ sera
  Ã©quivalent Ã&nbsp; \lstinline+drawarrow+;
    \item du cÃ´tÃ© de \mpgeomdd,
  n'importe quel des 6 objets dÃ©finis jusque lÃ&nbsp; : \typeGDD{triangle},
  \typeGDD{segment}, \typeGDD{droite}, \typeGDD{cercle}, \typeGDD{ellipse},
  \typeGDD{polygone}, \typeGDD{chemin},
  \typeGDD{courbe} ou \typeGDD{vecteur} (pour ce dernier, une flÃ¨che sera
  ajoutÃ©e Ã&nbsp; l'extrÃ©mitÃ© du vecteur).
  \end{itemize}
\end{description}\index{fleche@\lstinline+fleche+}
\end{colourband}

On peut aussi colorier un objet grÃ¢ce Ã&nbsp; la macro suivante.
\begin{colourband}
\macro|colorie(Â«objetÂ»)|
\begin{description}
  \item[\meta{objet}:] peut Ãªtre:
  \begin{itemize}
    \item pour le cÃ´tÃ© \MP, uniquement un \typeMP{path} et dans ce cas \lstinline+trace+ sera Ã©quivalent Ã&nbsp; \lstinline+fill+;
    \item du cÃ´tÃ© de \mpgeomdd,
  n'importe quel objet coloriable : \typeGDD{triangle},
   \typeGDD{cercle}, \typeGDD{ellipse}, \typeGDD{polygone}, \typeGDD{chemin}, ou
  \typeGDD{courbe}.
  \end{itemize}
\end{description}\index{colorie@\lstinline+colorie+}
\end{colourband}


Les commandes de tracÃ©s de \mpgeomdd font appel aux macros de
base de \MP : \lstinline+draw+ et \lstinline+fill+. Ainsi, pour spÃ©cifier la
couleur, on pourra
utiliser la commande \lstinline+withcolor+ ou bien la macro
\lstinline+drawoptions+.


On peut aussi colorier avec de la transparence\footnote{En rÃ©alitÃ©, on simule de
la transparence avec le code empruntÃ© Ã&nbsp; Anthony Phan :
\url{http://www-math.univ-poitiers.fr/~phan/metalpha.html}} avec la commande
suivante.
\begin{colourband}
\macro|colorieAvecTransparence(Â«objetÂ»,Â«couleurÂ»,Â«coefficient de transparenceÂ»)|
\begin{description}
  \item[\meta{objet}:] peut Ãªtre:
  \begin{itemize}
    \item pour le cÃ´tÃ© \MP, uniquement un \typeMP{path} et dans ce cas \lstinline+trace+ sera Ã©quivalent Ã&nbsp; \lstinline+fill+;
    \item du cÃ´tÃ© de \mpgeomdd,
  n'importe quel objet coloriable : \typeGDD{triangle},
   \typeGDD{cercle}, \typeGDD{ellipse}, \typeGDD{polygone}, \typeGDD{chemin}, ou
  \typeGDD{courbe}.
  \end{itemize}
  \item[\meta{couleur}:] est une \typeMP{color}.
  \item[\meta{coefficient de transparence}:] est un \typeMP{numeric} compris
  entre 0 et 1, 0 pour un coloriage opaque et 1 pour un coloriage invisible.
\end{description}\index{colorieAvecTransparence@\lstinline+colorieAvecTransparence+}
\end{colourband}



On pourra aussi hachurer une forme fermÃ©e\footnote{Le code est repris et adaptÃ©
de lâ€™ensemble de macros \texttt{geometriesyr16} de Christophe Poulain \url{https://melusine.eu.org/syracuse/poulecl/geometriesyr16/}.} avec la
commande suivante : 

\begin{colourband}
\macro|hachure(Â«objetÂ»,Â«angleÂ»,Â«espaceÂ»,Â«typeÂ»)|\return{\typeMP{image}}
\begin{description}
  \item[\meta{objet}:] peut Ãªtre:
  \begin{itemize}
    \item pour le cÃ´tÃ© \MP, uniquement un \typeMP{path} et dans ce cas \lstinline+trace+ sera Ã©quivalent Ã&nbsp; \lstinline+fill+;
    \item du cÃ´tÃ© de \mpgeomdd,
  n'importe quel objet \og{}coloriable\fg{} : \typeGDD{triangle},
   \typeGDD{cercle}, \typeGDD{ellipse}, \typeGDD{polygone}, \typeGDD{chemin}, ou
  \typeGDD{courbe}.
  \end{itemize}
  \item[\meta{angle}:] est lâ€™angle (\typeMP{numeric} en degrÃ©) des lignes de
  hachurage. 
  \item[\meta{espace}:] est lâ€™espace (\typeMP{numeric}) entre chaque ligne de
  hachurage (dans lâ€™unitÃ© de \mpgeomdd, il ne faut donc pas mettre dâ€™unitÃ©).
  \item[\meta{type}:] est le type de tracÃ©. Si \meta{type}$=0$, les lignes
  seront en trait pleins, si \meta{type}$=1$, les lignes seront en traits
  pointillÃ©s (\lstinline+dashed evenly+), si \meta{type}$=2$, les lignes
  seront en traits dâ€™axes, si \meta{type}$=3$, les lignes
  seront en traits pointillÃ©s avec des points (\lstinline+withdots+). Enfin, si
  \meta{type}$=4$, vous pouvez dÃ©finir le \emph{schÃ©ma} de trait avec la command \lstinline+SchemaHachure+. 
\end{description}\index{hachure@\lstinline+hachure+}
\end{colourband}

Attention, la macro \lstinline+hachure+ retourne une \typeMP{image}, il faudra
donc lâ€™utiliser conjointement Ã&nbsp; la macro \lstinline+trace+. 

Pour utiliser le quatriÃ¨me type de trait pour les hachures, il faudra dÃ©finir
son schÃ©ma (\emph{pattern}) Ã&nbsp; lâ€™aide de la commande suivante. 

\begin{colourband}
\macro|SchemaHachure(Â«schÃ©maÂ»)|
\begin{description}
  \item[\meta{schÃ©ma}:] est le \emph{pattern} que lâ€™on fournit classiquement Ã&nbsp;
  la commande \lstinline+dashpattern+. Nous renvoyons Ã&nbsp; la documentation de
  \MP{}. Notez cependant que les dimensions Ã&nbsp; fournir aux commandes
  \lstinline+on+ et \lstinline+off+ seront mis Ã&nbsp; lâ€™Ã©chelle Ã&nbsp; lâ€™unitÃ©
  \lstinline+gddU+ de \mpgeomdd. Il faut donc les consevoir comme exprimÃ©es dans
  lâ€™unitÃ© de \mpgeomdd.  
\end{description}\index{SchemaHachure@\lstinline+SchemaHachure+}
\end{colourband}

Nous illustrons
ci-dessous quelques commandes de tracÃ©, de coloriage et de hachurage. 

\begin{ExempleMP}
input geom2d;

beginfig(1);
gddU:=0.6cm;
A = Point(-1,1); B = Point(3,2);
C1= Cercle(origine,2);
C2 = Cercle(A,2); C3 = Cercle(B,3);

colorie C1 withcolor LightCyan;
colorieAvecTransparence(C2,DarkRed,0.2);
colorieAvecTransparence(C3,DarkBlue,0.2);

T1 = Triangle((-1,-2),(2,-2),(0.2,1));
trace hachure(T1,45,0.2,0) avecCrayon(0.6,DarkRed);
trace T1;
pE1 = Point(-2,-3); 
pE2 = Point(3,-4); 
E = EllipseF(pE1,pE2,3.9);
SchemaHachure(on0.2 off0.3);
trace hachure(E,-20,0.1,4);
trace E;
pointe pE1; pointe pE2;
endfig;
\end{ExempleMP}


Les macros ci-dessus, font appel Ã&nbsp; une macro plus bas niveau qui permet de
retourner le \typeMP{path} Ã&nbsp; tracer ou colorier pour tous les objets \mpgeomdd.

\begin{colourband}
\macro|gddTraceObjet(Â«objetÂ»)|\return{\typeMP{path}}
\begin{description}
  \item[\meta{objet}:]
   \typeGDD{triangle}, \typeGDD{segment}, \typeGDD{vecteur},
   \typeGDD{cercle}, \typeGDD{ellipse}, \typeGDD{parabole}, \typeGDD{hyperbole},\typeGDD{polygone}, \typeGDD{chemin}, ou
  \typeGDD{courbe}.
\end{description}\index{gddTraceObjet@\lstinline+gddTraceObjet+}
\end{colourband}

Si l'objet n'est pas fermÃ©, \mpgeomdd fournit la macro suivante qui ajoute un
\lstinline+--cycle+ Ã&nbsp; la suite du chemin :
\begin{colourband}
\macro|fermeture(Â«objetÂ»)|\return{\typeMP{path}}\indication{fermÃ© \lstinline+--cycle+}
\begin{description}
  \item[\meta{objet}:]
  \begin{itemize}
    \item du cÃ´tÃ© de \MP, \typeMP{path} ;
    \item du cÃ´tÃ© de \mpgeomdd, \typeGDD{triangle}, \typeGDD{segment}, \typeGDD{vecteur},
   \typeGDD{cercle}, \typeGDD{chemin}, ou
  \typeGDD{courbe}.
  \end{itemize}
\end{description}\index{fermeture@\lstinline+fermeture+}
\end{colourband}

On pourra spÃ©cifier le \emph{crayon} utilisÃ© pour les tracÃ©s avec la commande
suivante:

\begin{colourband}
  \macro|avecCrayon(Â«tailleÂ»,Â«couleurÂ»)|
  \begin{description}
    \item[\meta{taille}:] facteur d'Ã©chelle \typeMP{numeric} du \typeMP{pen}
    \lstinline+pencircle+ de \MP{} utilisÃ© ;
    \item[\meta{couleur}:] couleur \typeMP{color} Ã&nbsp; utiliser. 
  \end{description}\index{avecCrayon@\lstinline+avecCrayon+}
\end{colourband}
  
Cette macro est un raccourci pour le \emph{classique} \texttt{withpen
pencircle scaled ... withcolor ...}. On peut d'ailleurs Ã©videmment toujours
utiliser les commandes \MP{} pour le dessin. 




On peut reprÃ©senter les objets de type \typeGDD{point}. Pour cela, on dispose
d'une commande qui trace un petit cercle colorÃ© Ã&nbsp; l'endroit du point. La
commande est la suivante :

\begin{colourband}
\macro|pointe(Â«pointÂ»)|
\begin{description}
  \item[\meta{point}:] \typeGDD{point} ou \typeMP{pair}
\end{description}\index{pointe@\lstinline+pointe+}
\end{colourband}

Cette macro utilise trois paramÃ¨tres internes de \mpgeomdd pour la taille, la
couleur et le type de marque utilisÃ©s
(\lstinline+gddTaillePoint+\index{gddTaillePoint@\lstinline+gddTaillePoint+}, \lstinline+gddCouleurPoint+\index{gddCouleurPoint@\lstinline+gddCouleurPoint+}
 et \lstinline+gddPointeType+  \index{gddPointeType@\lstinline+gddPointeType+}
). Ces paramÃ¨tres peuvent Ãªtre modifiÃ©s avec les commandes suivantes:
\begin{colourband}
\macro|ParametreTaillePoint(Â«nÂ»)|
\begin{description}
  \item[\meta{n}:] \typeMP{numeric}, valeur par dÃ©faut 3.
\end{description}
\index{ParametreTaillePoint@\lstinline+ParametreTaillePoint+}
\end{colourband}

\begin{colourband}
\macro|ParametreCouleurPoint(Â«cÂ»)| 
\begin{description}
  \item[\meta{c}:] \typeMP{color}, valeur par dÃ©faut \lstinline+white+.
\end{description}
\index{ParametreCouleurPoint@\lstinline+ParametreCouleurPoint+}
\end{colourband}

Il existe deux autres types de pointage de point : la simple croix et le simple
disque. Pour choisir un autre type de pointage (en utilisant la mÃªme commande
\lstinline+pointe+), on utilisera la commande suivante:
\begin{colourband}
  \macro|ParametrePointeType(Â«sÂ»)|
  \begin{description}
  \item[\meta{s}:] \typeMP{string}, peut valoir \lstinline+pointe+
  (fonctionnement par dÃ©faut avec un cercle noir rempli dâ€™une autre couleur,
  blanc par dÃ©faut), \lstinline+"croix"+ (pour une simple croix) ou
  \lstinline+"disque"+ (pour un disque plein).
  \end{description} 
  \index{ParametrePointeType@\lstinline+ParametrePointeType+}
\end{colourband}

Il arrive rÃ©guliÃ¨rement que lâ€™on veuille pointer une liste de
points\footnote{Sur une idÃ©e dâ€™Alain Matthes.}. Pour cela,
on dispose de la commande suivante:

\begin{colourband}
\macro|pointes(Â«pointAÂ», Â«pointBÂ», Â«pointCÂ», etc.)|
\begin{description}
  \item[\meta{pointA}, \meta{pointB}, etc.:] liste de \typeGDD{point} ou
  \typeMP{pair} sÃ©parÃ©s par des virgules.
\end{description}\index{pointes@\lstinline+pointes+}
\end{colourband}
  

\subsection{Contenir les tracÃ©s}

Il est souvent nÃ©cessaire de restreindre les tracÃ©s Ã&nbsp; une zone du plan $\R^2$.
Pour cela, \mpgeomdd fournit la commande \lstinline+Fenetre+:
\begin{colourband}
\macro|Fenetre(Â«XminÂ»,Â«YminÂ»,Â«XmaxÂ»,Â«YminÂ»)|
\index{Fenetre@\lstinline+Fenetre+}
\end{colourband}
Cette fonction trace un rectangle dont deux sommets opposÃ©s sont les points
\lstinline|(Xmin,Ymin)| et \lstinline|(Xmax,Ymax)| avec la couleur \MP{}
\lstinline+background+ et dÃ©coupe l'image courante autour de ce cadre (avec la
commande \MP{} \lstinline+clip currentpicture+).

On pourra aussi restreindre les tracÃ©s Ã&nbsp; lâ€™intÃ©rieur dâ€™un chemin fermÃ© issu
dâ€™un objet \mpgeomdd. Pour cela, on utilisera la commande suivante:
\begin{colourband}
\macro|gddClip(Â«ObjetÂ»)|
\begin{description}
\item[\meta{Objet}:] tout objet \mpgeomdd \enquote{fermÃ©}.
\end{description}
\index{gddClip@\lstinline+gddClip+}
\end{colourband}
  


\section{Les types}\label{sec:types}

\mpgeomdd, fournit plusieurs types d'objets. Le type d'objet est
stockÃ© dans la table \variableGDD{gddT[]}, et les tables \variableGDD{gddA[]}
Ã&nbsp; \variableGDD{gddF[]}, ainsi que la table \variableGDD{gddX} contiennent les propriÃ©tÃ©s des objets.

Nous allons ici dÃ©crire chaque type de l'extension \mpgeomdd,
leurs propriÃ©tÃ©s respectives, ainsi que des mÃ©thodes associÃ©es directement Ã&nbsp;
l'objet.

\subsection{Le type \typeGDD{point}}

Ce type correspond au point de
l'espace euclidien.

\subsubsection{Constructeur}

Pour Ãªtre plus clair, voici la fonction principale
pour crÃ©er un tel objet :
%
\begin{mpcode}
vardef Point(expr a,b) =
  gddT[incr gddO] = "point";
  gddA[gddO] = a; gddB[gddO] = b; gddO
enddef;
\end{mpcode}

\begin{colourband}
\macro|Point(Â«xÂ»,Â«yÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{x}:] \typeMP{numeric} ;
  \item[\meta{y}:] \typeMP{numeric}.
\end{description}\index{Point@\lstinline+Point+}
\end{colourband}
\bigskip


Cette fonction \og{}retourne\fg{} le compteur \variableGDD{gdd0} et crÃ©e dans la
table de type une entrÃ©e \typeGDD{point} et les attributs (coordonnÃ©es)
correspondants \variableGDD{a} et \variableGDD{b} dans les tables
\variableGDD{gddA} et \variableGDD{gddB}.

Avec un tel type de fonctionnement, la plupart des manipulations se
font sur des \typeMP{numeric}s. En effet, pour dÃ©clarer un
\typeGDD{point}, il suffit d'Ã©crire
\begin{mpcode}
A = Point(2,3);
\end{mpcode}
\variableGDD{A} prend alors la valeur courante de \variableGDD{gddO}. C'est
l'identifiant du point.

On peut aussi dÃ©finir un \typeGDD{point} par ses coordonnÃ©es \emph{polaires}
avec la commande suivante.

\begin{colourband}
\macro|PointPolaire(Â«rÂ»,Â«aÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{r}:] \typeMP{numeric}, module du point;
  \item[\meta{a}:] \typeMP{numeric}, angle par rapport Ã&nbsp; l'axe des abscisses.
\end{description}\index{PointPolaire@\lstinline+PointPolaire+}
\end{colourband}
\bigskip



On peut dÃ©finir un point dans un repÃ¨re dÃ©fini lui par un point
d'origine et deux vecteurs avec la fonction suivante:
\begin{colourband}
\macro|PointDansRepere(Â«xÂ»,Â«yÂ»,Â«oÂ»,Â«iÂ»,Â«jÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{x}:] \typeMP{numeric} ;
  \item[\meta{y}:] \typeMP{numeric} ;
  \item[\meta{o}:] \typeGDD{point} d'origine du repÃ¨re ;
  \item[\meta{i}:] \typeGDD{vecteur} (ou \typeGDD{point}) dÃ©finissant l'axe des abscisses ;
  \item[\meta{j}:] \typeGDD{vecteur} (ou \typeGDD{point}) dÃ©finissant l'axe des ordonnÃ©es.
\end{description}\index{PointDansRepere@\lstinline+PointDansRepere+}
\end{colourband}

\bigskip

Le code suivant illustre l'utilisation de cette commande (avec des
\typeGDD{point}s au lieu de \typeGDD{vecteur}s, type dÃ©crit plus tard). 
\begin{mpcode}
O = Point(0,0);
I = Point(2,0);
J = Point(0,3);
A = PointDansRepere(2,3,O,I,J);
\end{mpcode}


\subsubsection{Macros associÃ©es}

On peut rÃ©cupÃ©rer l'abscisse et l'ordonnÃ©e d'un point avec les commandes
suivantes :
\begin{colourband}
\macro|Abscisse(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:] \typeGDD{point}, \typeGDD{vecteur} ou \typeMP{pair}.
\end{description}\index{Abscisse@\lstinline+Abscisse+}
\end{colourband}

\begin{colourband}
\macro|Ordonnee(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:] \typeGDD{point}, \typeGDD{vecteur} ou \typeMP{pair}.
\end{description}\index{Ordonnee@\lstinline+Ordonnee+}
\end{colourband}

On pourra ajouter les abscisses, les ordonnÃ©es ou bien, Ã&nbsp; la maniÃ¨re des
vecteurs, des points entre eux avec les commandes suivantes.
\begin{colourband}
\macro|AdditionAbscisses(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:] \typeGDD{point} ou \typeMP{pair}.
\end{description}\index{AdditionAbscisses@\lstinline+AdditionAbscisses+}
\end{colourband}
\begin{colourband}
\macro|AdditionOrdonnee(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:] \typeGDD{point} ou \typeMP{pair}.
\end{description}\index{AdditionOrdonnee@\lstinline+AdditionOrdonnee+}
\end{colourband}
et
\begin{colourband}
\macro|Addition(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:] \typeGDD{point} ou \typeMP{pair};
  \item[\meta{b}:] \typeGDD{point} ou \typeMP{pair}.
\end{description}\index{Addition@\lstinline+Addition+}
\end{colourband}

On peut aussi calculer la longueur entre deux points grÃ¢ce Ã&nbsp; la commande
suivante:
\begin{colourband}
\macro|Longueur(Â«aÂ»,Â«bÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:] \typeGDD{point} ou \typeMP{pair};
  \item[\meta{b}:] \typeGDD{point} ou \typeMP{pair}.
\end{description}\index{Longueur@\lstinline+Longueur+}
\end{colourband}

On peut calculer le point Ã©quidistant de deux points, le milieu :
\begin{colourband}
\macro|Milieu(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:] \typeGDD{point} ou \typeMP{pair};
  \item[\meta{b}:] \typeGDD{point} ou \typeMP{pair}.
\end{description}\index{Milieu@\lstinline+Milieu+}
\end{colourband}

On peut rÃ©aliser la rotation d'un point autour de l'origine $(0,0)$ avec la
commande suivante:
\begin{colourband}
\macro|Rotation(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:] \typeGDD{point} ou \typeMP{pair};
  \item[\meta{b}:] \typeMP{numeric}, l'angle de rotation en radian.
\end{description}\index{Rotation@\lstinline+Rotation+}
\end{colourband}

Si on veut rÃ©aliser la rotation d'un point autour d'un autre, on utilisera la
commande suivante:
\begin{colourband}
\macro|RotationCentre(Â«aÂ»,Â«bÂ»,Â«cÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:] \typeGDD{point} ou \typeMP{pair};
  \item[\meta{b}:] \typeGDD{point} ou \typeMP{pair}, centre de rotation;
  \item[\meta{c}:] \typeMP{numeric}, l'angle de rotation en radian.
\end{description}\index{RotationCentre@\lstinline+RotationCentre+}
\end{colourband}

On peut calculer l'isobarycentre d'une liste de points (ou de \typeMP{pair} de \MP) avec la commande suivante.
\begin{colourband}
\macro|IsoBarycentre(Â«aÂ»,Â«bÂ»,Â«cÂ», etc.)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:] \typeGDD{point} ou \typeMP{pair};
  \item[\meta{b}:] \typeGDD{point} ou \typeMP{pair} ;
  \item[] etc.
\end{description}\index{IsoBarycentre@\lstinline+IsoBarycentre+}
\end{colourband}

On peut calculer le barycentre d'une liste de points associÃ©s Ã&nbsp; des poids (mais
ici, il n'est pas possible d'utiliser des \typeMP{pair} de \MP).
\begin{colourband}
\macro|Barycentre((Â«AÂ»,Â«aÂ»),(Â«BÂ»,Â«bÂ»),(Â«CÂ»,Â«cÂ»), etc.)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{A}:] \typeGDD{point} ;
  \item[\meta{a}:] \typeMP{numeric}, poids associÃ© Ã&nbsp; \meta{A} ;
  \item[\meta{B}:] \typeGDD{point} ;
  \item[\meta{b}:] \typeMP{numeric}, poids associÃ© Ã&nbsp; \meta{B} ;
  \item[] etc.
\end{description}\index{Barycentre@\lstinline+Barycentre+}
\end{colourband}


On peut dÃ©terminer la bissectrice d'un secteur angulaire dÃ©fini par trois
points. La fonction retourne une \typeGDD{droite}.
\begin{colourband}
\macro|Bissectrice(Â«AÂ»,Â«BÂ»,Â«CÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{A}:] \typeGDD{point} ;
  \item[\meta{B}:] \typeGDD{point} ;
  \item[\meta{C}:] \typeGDD{point}.
\end{description}\index{Bissectrice@\lstinline+Bissectrice+}
\end{colourband}

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,0);
B = Point(0,0);
C = Point(1,1);
D = Bissectrice(A,B,C);
trace D;
marque.bot "A";
marque.bot "B";
marque.bot "C";
Fenetre(-0.5,-0.5,2,2);
endfig;
\end{ExempleMP}


Le type \typeGDD{point} est Ã©videmment liÃ© au type \MP{} \typeMP{pair}.

\mpgeomdd fournit des macros qui permettent de passer de \typeGDD{point} Ã&nbsp;
\typeMP{pair} et rÃ©ciproquement.
\begin{colourband}
\macro|PointTOPair(Â«aÂ»,Â«bÂ»)|\return{\typeMP{pair}}
\begin{description}
  \item[\meta{a}:] \typeMP{numeric}, abscisse ;
  \item[\meta{b}:] \typeMP{numeric}, ordonnÃ©e.
\end{description}\index{PointTOPair@\lstinline+PointTOPair+}
\end{colourband}


\begin{colourband}
\macro|PairTOPoint(Â«pÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{p}:] \typeMP{pair}.
\end{description}\index{PairTOPoint@\lstinline+PairTOPoint+}
\end{colourband}

Ces deux commandes sont complÃ©tÃ©es par deux autres qui assurent qu'un Ã©lÃ©ment est
d'un type donnÃ©:
\begin{colourband}
\macro|PairImp(Â«pÂ»)|\return{\typeGDD{pair}}
\begin{description}
  \item[\meta{p}:] \typeGDD{point} ou \typeMP{pair}.
\end{description}\index{PairImp@\lstinline+PairImp+}
\end{colourband}


\begin{colourband}
\macro|PointImp(Â«pÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{p}:] \typeGDD{point} ou \typeMP{pair}.
\end{description}\index{PointImp@\lstinline+PointImp+}
\end{colourband}

On peut aussi rÃ©cupÃ©rer un point le long d'un objet \mpgeomdd (dÃ©crit dans les
sections suivantes). La macro suivante retourne un \typeGDD{point} le long du
chemin (cyclique ou non) de l'objet le paramÃ©trant entre 0 et 1.

\begin{colourband}
\macro|PointDe(Â«oÂ»,Â«tÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{o}:] n'importe quel objet \mpgeomdd (mÃªme un \typeGDD{point} pour
  lequel lui-mÃªme est retournÃ©);
  \item[\meta{t}:] \typeMP{numeric} compris entre 0 et 1 (qui paramÃ¨tre le
  chemin de l'objet entre 0 et 1).
\end{description}\index{PointDe@\lstinline+PointDe+}
\end{colourband}



\subsection{Le type \typeGDD{vecteur}}

Ce type correspond aux vecteurs
dÃ©finis Ã&nbsp; l'aide de deux coordonnÃ©es de l'espace euclidien.

\subsubsection{Constructeurs}

La fonction
crÃ©atrice d'un tel objet est celle-ci
%
\begin{mpcode}
vardef Vecteur(expr a,b) =
  save n; n = incr gddO;
  gddT[n] = "vecteur"; gddA[n] = a; gddB[n] = b; n
enddef;
\end{mpcode}

\begin{colourband}
\macro|Vecteur(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{vecteur}}
\begin{description}
  \item[\meta{a}:] \typeMP{numeric} ;
  \item[\meta{b}:] \typeMP{numeric}.
\end{description}\index{Vecteur@\lstinline+Vecteur+}
\end{colourband}
\bigskip

Cette fonction a la mÃªme architecture que celle correspondante au
\typeGDD{point} : elle retourne la valeur courante de \variableGDD{gddO}
aprÃ¨s incrÃ©mentation, puis affecte le type \typeGDD{vecteur} Ã&nbsp;
l'entrÃ©e correspondante dans la table \variableGDD{gddT}.

On peut aussi dÃ©finir un vecteur Ã&nbsp; partir d'un \typeMP{pair} \MP.
\begin{mpcode}
vardef VecteurP(expr a) =
  save n; n = incr gddO;
  gddT[n] = "vecteur"; gddA[n] = xpart a; gddB[n] = ypart a; n
enddef;
\end{mpcode}

\begin{colourband}
\macro|VecteurP(Â«aÂ»)|\return{\typeGDD{vecteur}}
\begin{description}
  \item[\meta{a}:] \typeMP{pair}.
\end{description}\index{VecteurP@\lstinline+VecteurP+}
\end{colourband}
\bigskip

Un vecteur peut se dÃ©finir alors comme ceci:
\begin{ExempleMP}
input geom2d;
beginfig(1);
AB = Vecteur(2,3);
pair a;
a := (3,2);
A = VecteurP(a);
trace AB;
trace A;
endfig;
\end{ExempleMP}

\subsubsection{Macros associÃ©es}

Comme les objets de \mpgeomdd ne sont pas des \typeMP{numeric}s, les opÃ©rations classiques
de l'espace vectoriel ne peuvent pas s'Ã©crire avec les simples caractÃ¨res
\lstinline-+-, \lstinline+-+, et \lstinline-*-.

\begin{colourband}
\macro|AdditionVecteur(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{vecteur}}
\begin{description}
  \item[\meta{a}:] \typeGDD{vecteur} ;
  \item[\meta{b}:] \typeGDD{vecteur}.
\end{description}\index{AdditionVecteur@\lstinline+AdditionVecteur+}
\end{colourband}
\bigskip


\begin{colourband}
\macro|SoustractionVecteur(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{vecteur}}
\begin{description}
  \item[\meta{a}:] \typeGDD{vecteur} ;
  \item[\meta{b}:] \typeGDD{vecteur}.
\end{description}\index{SoustractionVecteur@\lstinline+SoustractionVecteur+}
\end{colourband}
\bigskip


\begin{colourband}
\macro|ScalaireVecteur(Â«kÂ»,Â«bÂ»)|\return{\typeGDD{vecteur}}
\begin{description}
  \item[\meta{k}:] \typeMP{numeric} ;
  \item[\meta{b}:] \typeGDD{vecteur}.
\end{description}\index{ScalaireVecteur@\lstinline+ScalaireVecteur+}
\end{colourband}
\bigskip

On pourra alors faire les opÃ©rations classiques sur les vecteurs.

\begin{ExempleMP}
input geom2d;
beginfig(1);
AB = Vecteur(2,3);
BC = Vecteur(1,0);
AC = AdditionVecteur(AB,BC);
kAC = ScalaireVecteur(3.0,AC);
trace AB;
trace BC;
trace AC;
endfig;
\end{ExempleMP}

On peut aussi calculer le produit scalaire de deux vecteurs avec la commande
suivante.

\begin{colourband}
\macro|ProduitScalaire(Â«aÂ»,Â«bÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:] \typeGDD{vecteur} ;
  \item[\meta{b}:] \typeGDD{vecteur}.
\end{description}\index{ProduitScalaire@\lstinline+ProduitScalaire+}
\end{colourband}
\bigskip

On peut aussi calculer la norme euclidienne d'un vecteur.
\begin{colourband}
\macro|Norme(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:] \typeGDD{vecteur}.
\end{description}\index{Norme@\lstinline+Norme+}
\end{colourband}
\bigskip

La commande suivante permet d'obtenir l'angle, en radian, entre $[0,\uppi]$ formÃ©
entre deux vecteurs. Si on note $u$ et $v$ les deux vecteurs de $\R^2$, l'angle
calculÃ© par la commande suivante est obtenu avec la formule suivante :
\[\theta = \arccos \left(\frac{u\cdot v}{\|u\|\|v\|}\right).\]

\begin{colourband}
\macro|VecteursAngle(Â«aÂ»,Â«bÂ»)|\return{\typeMP{numeric} (dans $[0,\uppi]$)}
\begin{description}
  \item[\meta{a}:] \typeGDD{vecteur} ;
  \item[\meta{b}:] \typeGDD{vecteur}.
\end{description}\index{VecteursAngle@\lstinline+VecteursAngle+}
\end{colourband}
\bigskip


\subsection{Le type \typeGDD{segment}}
Les segments sont
dÃ©finis par deux points de $\R^2$.


\subsubsection{Constructeur}
La fonction crÃ©atrice de cet objet est
celle-ci
\begin{mpcode}
vardef Segment (expr a,b) =
  save n; n = incr gddO;
  gddT[n] = "segment"; gddA[n] = PointImp(a); gddB[n] = PointImp(b); n
enddef;
\end{mpcode}

\begin{colourband}
\macro|Segment(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{segment}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{point} ;
  \item[\meta{b}:]  \typeGDD{point}.
\end{description}\index{Segment@\lstinline+Segment+}
\end{colourband}

\bigskip

Un segment se dÃ©finit alors comme ceci:
\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(2,3);
B = Point(4,5);
C = Point(2,1);
AB = Segment(A,B);
BC = Segment(B,C);
AC = Segment(A,C);
fleche AB;
fleche BC;
fleche AC;
endfig;
\end{ExempleMP}

\subsubsection{Macros associÃ©es}

On peut calculer la longueur d'un segment avec la macro suivante.
\begin{colourband}
\macro|LongueurSegment(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{segment}.
\end{description}\index{LongueurSegment@\lstinline+LongueurSegment+}
\end{colourband}

On peut aussi convertir un segment en vecteur avec la macro suivante qui fait la
diffÃ©rence des coordonnÃ©es des deux points dÃ©finissant le segment.
\begin{colourband}
\macro|SegmentTOVecteur(Â«aÂ»)|\return{\typeGDD{vecteur}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{segment}.
\end{description}\index{SegmentTOVecteur@\lstinline+SegmentTOVecteur+}
\end{colourband}



\subsection{Le type \typeGDD{droite}}
Une droite est simplement dÃ©finie par
deux points.

\subsubsection{Constructeur}

Ainsi la fonction crÃ©atrice de cet objet est la suivante
\begin{mpcode}
vardef Droite (expr a,b) =
  save n; n = incr gddO;
  gddT[n] = "droite"; gddA[n] = PointImp(a); gddB[n] = PointImp(b); n
enddef;
\end{mpcode}
\begin{colourband}
\macro|Droite(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{point} ;
  \item[\meta{b}:]  \typeGDD{point}.
\end{description}\index{Droite@\lstinline+Droite+}
\end{colourband}
\bigskip

Lors de la reprÃ©sentation des droites (voir section~\ref{sec:trace}), le
caractÃ¨re \emph{infini} de la droite est gÃ©rÃ© par la variable globale
\lstinline+gddExtensionDroite+ 
\index{gddExtensionDroite@\lstinline+gddExtensionDroite+}
qui vaut 10 par dÃ©faut.



On pourra la modifier avec la commande suivante:
\begin{colourband}
\macro|Set(Â«dÂ»)|
\begin{description}
  \item[\meta{d}:]  \typeMP{numeric} (valeur par dÃ©faut 10).
\end{description}\index{ParametreExtensionDroite@\lstinline+ParametreExtensionDroite+}
\end{colourband}
\bigskip


\subsubsection{Macros associÃ©es}


La macro suivante permet, sous forme d'un triplet, et donc d'une \typeMP{color},
d'obtenir les coefficients d'une droite donnÃ©e. Pour une droite $(D)$, la macro
donne le triplet $(u,v,w)\in\R^3$ tel que $\forall (x,y)\in(D)$, $ux+vy+w=0$.

\begin{colourband}
\macro|EquationDroite(Â«aÂ»)|\return{\typeMP{color}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{droite}.
\end{description}\index{EquationDroite@\lstinline+EquationDroite+}
\end{colourband}

On peut calculer la projection d'un point sur une droite avec la commande
suivante.

\begin{colourband}
\macro|ProjectionPointSurDroite(Â«pÂ»,Â«aÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{p}:] \typeGDD{point} ;
  \item[\meta{a}:]  \typeGDD{droite}.
\end{description}\index{ProjectionPointSurDroite@\lstinline+ProjectionPointSurDroite+}
\end{colourband}

On peut obtenir l'ordonnÃ©e relative d'un point sur une droite avec la macro
suivante.
\begin{colourband}
\macro|OrdonneeRelativePointDroite(Â«pÂ»,Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{p}:] \typeGDD{point} ;
  \item[\meta{a}:]  \typeGDD{droite}.
\end{description}\index{OrdonneeRelativePointDroite@\lstinline+OrdonneeRelativePointDroite+}
\end{colourband}

Le calcul de la distance d'un point Ã&nbsp; une droite se fait avec la macro suivante.
\begin{colourband}
\macro|DistancePointDroite(Â«pÂ»,Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{p}:] \typeGDD{point} ;
  \item[\meta{a}:]  \typeGDD{droite}.
\end{description}\index{DistancePointDroite@\lstinline+DistancePointDroite+}
\end{colourband}

La macro suivante permet d'obtenir la droite perpendiculaire Ã&nbsp; un droite passant
par un point.
\begin{colourband}
\macro|DroitePerpendiculaire(Â«aÂ»,Â«pÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{droite} ;
  \item[\meta{p}:] \typeGDD{point}.
\end{description}\index{DroitePerpendiculaire@\lstinline+DroitePerpendiculaire+}
\end{colourband}

Sur le mÃªme modÃ¨le, la macro suivante permet d'obtenir la droite parallÃ¨le Ã&nbsp; une autre passant
par un point.
\begin{colourband}
\macro|DroiteParallele(Â«aÂ»,Â«pÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{droite} ;
  \item[\meta{p}:] \typeGDD{point}.
\end{description}\index{DroiteParallele@\lstinline+DroiteParallele+}
\end{colourband}

On pourra obtenir le \typeGDD{point} d'intersection de deux droites avec la
macro suivante.
\begin{colourband}
\macro|IntersectionDroites(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{droite} ;
  \item[\meta{b}:] \typeGDD{droite}.
\end{description}\index{IntersectionDroites@\lstinline+IntersectionDroites+}
\end{colourband}

La macro suivante permet de reporter un point sur une droite avec une certaine
longueur (signÃ©e), Ã&nbsp; la maniÃ¨re d'un compas. 

\begin{colourband}
\macro|ReportSurDroite(Â«PÂ»,Â«DÂ»,Â«lÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{P}:]  \typeGDD{point} ;
  \item[\meta{D}:] \typeGDD{droite} ;
  \item[\meta{l}:] \typeMP{numeric} (peut Ãªtre nÃ©gatif).
\end{description}\index{ReportSurDroite@\lstinline+ReportSurDroite+}
\end{colourband}

Le cÃ´tÃ© du report par rapport au point \meta{P} dÃ©pend de la dÃ©finition de 
la droite : pour une droite dÃ©finie par deux \typeGDD{point}s $A$ et $B$, alors
la direction du report sera suivant le vecteur $\overrightarrow{AB}$. Pour
changer de direction, il suffira de multiplier le paramÃ¨tre de distance \meta{l}
par $-1$. 

Voici un exemple permettant d'illustrer l'utilisation de quelques commandes
relatives aux droites.

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(0,0);
B = Point(3,2);
AB = Droite(A,B);
trace AB;
pointe A;
pointe B;
C = Point(0,2);
DC = DroitePerpendiculaire(AB,C);
trace DC;
pointe C;
D = ProjectionPointSurDroite(C,AB);
pointe D;
Fenetre(-2,-2,4,4);
endfig;
\end{ExempleMP}





\subsection{Le type \typeGDD{cercle}}
Un cercle peut Ãªtre dÃ©fini par un point et un
rayon.

\subsubsection{Constructeurs}
La fonction crÃ©atrice de base de cet objet est la suivante
\begin{mpcode}
vardef Cercle (expr a,b) =
    save n; n = incr gddO;
    gddT[n] = "cercle"; gddA[n] = PointImp(a); gddB[n] = b; n
enddef;
\end{mpcode}
\begin{colourband}
\macro|Cercle(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{cercle}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{point} ou \typeMP{pair},
  centre du cercle ;
  \item[\meta{b}:] \typeMP{numeric}, rayon du cercle.
\end{description}\index{Cercle@\lstinline+Cercle+}
\end{colourband}
\bigskip


Deux autres fonctions permettent de dÃ©finir des cercles. La fonction
\foncGDD{CercleCP} dÃ©finit le cercle par un centre et un point par lequel passe
le cercle.
\begin{colourband}
\macro|CercleCP(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{cercle}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{point} ou \typeMP{pair},
  centre du cercle ;
  \item[\meta{b}:]  \typeGDD{point},
  tel que \meta{b}$-$\meta{a} est le rayon.
\end{description}\index{CercleCP@\lstinline+CercleCP+}
\end{colourband}
\bigskip



On peut aussi dÃ©finir un cercle par deux points dÃ©finissant son diamÃ¨tre. La
fonction correspondante est la suivante

\begin{colourband}
\macro|CercleD(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{cercle}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{point} ou \typeMP{pair} ;
  \item[\meta{b}:]  \typeGDD{point} ou \typeMP{pair},
  tel que $($\meta{a}$-$\meta{b}$)$ est le diamÃ¨tre du cercle.
\end{description}\index{CercleD@\lstinline+CercleD+}
\end{colourband}
\bigskip

On peut aussi dÃ©finir un cercle comme le cercle qui passe par trois points avec
la macro suivante.

\begin{colourband}
\macro|CercleTroisPoints(Â«aÂ»,Â«bÂ»,Â«cÂ»)|\return{\typeGDD{cercle}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{point} ou \typeMP{pair} ;
  \item[\meta{b}:]  \typeGDD{point} ou \typeMP{pair} ;
  \item[\meta{c}:]  \typeGDD{point} ou \typeMP{pair}.
\end{description}\index{CercleTroisPoints@\lstinline+CercleTroisPoints+}
\end{colourband}
\bigskip




\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(3,1);
B = Point(0,2);
O = Point(0,0);
r = 1.0;
COr = Cercle(O,r);
COA = CercleCP(O,A);
CAB = CercleD(A,B);
COAB = CercleTroisPoints(O,A,B);
trace COr;
trace COA;
trace CAB;
trace COAB;
pointe A; pointe B; pointe O;
endfig;
\end{ExempleMP}

\subsubsection{Macros associÃ©es}

De nombreuses macros sont associÃ©es aux cercles.

On pourra rÃ©cupÃ©rer le rayon d'un cercle avec la commande suivante.


\begin{colourband}
\macro|Rayon(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{cercle}.
\end{description}\index{Rayon@\lstinline+Rayon+}
\end{colourband}
\bigskip

On pourra obtenir le centre (\typeGDD{point}) d'un cercle avec la commande :
\begin{colourband}
\macro|Centre(Â«aÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{cercle}, \typeGDD{ellipse} ou \typeGDD{hyperbole}.
\end{description}\index{Centre@\lstinline+Centre+}
\end{colourband}
\bigskip

On peut calculer l'intersection entre deux cercles grÃ¢ce Ã&nbsp; la macro suivante.

\begin{colourband}
\macro|IntersectionCercles(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{cercle} ;
  \item[\meta{b}:]  \typeGDD{cercle}.
\end{description}\index{IntersectionCercles@\lstinline+IntersectionCercles+}
\end{colourband}
\bigskip

Cette macro ne donnera qu'un seul point d'intersection. Pour obtenir les deux
points d'intersection, il faudra inverser l'ordre d'appel sur les cercles comme
l'exemple suivant l'illustre.

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(0,0);
CA = Cercle(A,1);
B = Point(1.5,0);
CB = Cercle(B,2);
D1 = IntersectionCercles(CA,CB);
D2 = IntersectionCercles(CB,CA);
trace CA; trace CB;
pointe A; pointe B;  pointe D1; pointe D2;
endfig;
\end{ExempleMP}

Si il n'existe pas d'intersection, alors la compilation Ã©chouera avec l'erreur
\texttt{! Pythagorean subtraction X.XXXX+-+X.XXXX has been replaced by 0}. Si
les deux cercles sont confondus, alors l'erreur sera \texttt{! Division by zero.}.

\mpgeomdd fournit aussi une macro permettant d'obtenir les intersections entre une
droite et un cercle.

\begin{colourband}
\macro|IntersectionDroiteCercle(Â«dÂ»,Â«cÂ»,Â«nÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{d}:]  \typeGDD{droite} ;
  \item[\meta{c}:]  \typeGDD{cercle} ;
  \item[\meta{n}:] \typeMP{numeric} qui vaut 1 ou 2 suivant le point
  d'intersection que l'on souhaite (s'il n'existe qu'un point d'intersection
  alors les deux valeurs renvoient le mÃªme point).
\end{description}\index{IntersectionDroiteCercle@\lstinline+IntersectionDroiteCercle+}
\end{colourband}
\bigskip

S'il n'existe pas d'intersection entre la droite et le cercle, vous obtiendrez
l'erreur \texttt{! Intersection between line and circle does not exist}.

L'exemple suivant permet d'illuster cette macro.
\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(2,2);
C_A = Cercle(A,1);
B = Point(0,1);
C = Point(4,2);
BC = Droite(B,C);
E1 = IntersectionDroiteCercle(BC,C_A,1);
trace C_A;
trace BC dashed evenly;
pointe A; pointe B; pointe C; pointe E1;
Fenetre(-0.5,-0.5,5,4);
endfig;
\end{ExempleMP}



On peut obtenir les tangentes intÃ©rieures et extÃ©rieures communes Ã&nbsp; deux cercles
avec les deux macros suivantes. LÃ&nbsp; encore, comme il existe deux tangentes, pour
obtenir les deux, on inversera l'ordre d'appel des deux cercles.

\begin{colourband}
\macro|TangenteCommuneExterieure(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{cercle} ;
  \item[\meta{b}:]  \typeGDD{cercle}.
\end{description}\index{TangenteCommuneExterieure@\lstinline+TangenteCommuneExterieure+}
\end{colourband}
\bigskip


\begin{colourband}
\macro|TangenteCommuneInterieure(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{cercle} ;
  \item[\meta{b}:]  \typeGDD{cercle}.
\end{description}\index{TangenteCommuneInterieure@\lstinline+TangenteCommuneInterieure+}
\end{colourband}
\bigskip

L'exemple suivant illustre l'utilisation de ces deux macros.
\begin{ExempleMP}[sidebyside=false]
input geom2d;
beginfig(1);
C1 = Cercle((-2,0),2);
C2 = Cercle((1.5,0),1);
T1 = TangenteCommuneExterieure(C1,C2);
T2 = TangenteCommuneExterieure(C2,C1);
T3 = TangenteCommuneInterieure(C1,C2);
T4 = TangenteCommuneInterieure(C2,C1);
trace C1; trace C2;
trace T1; trace T2;
trace T3; trace T4;

Fenetre(-5,-3,6,3);
endfig;
\end{ExempleMP}

La macro suivante permet de calculer l'axe radical (\typeGDD{droite}) de deux
cercles\footnote{La mÃ©thode de construction a Ã©tÃ© largement inspirÃ©e du code de
T.~Thurston dans son document \emph{Drawing with \MP}~\cite{ctan-drawing-with-metapost}.}.
\begin{colourband}
\macro|AxeRadical(Â«aÂ»,Â«bÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{cercle} ;
  \item[\meta{b}:]  \typeGDD{cercle}.
\end{description}\index{AxeRadical@\lstinline+AxeRadical+}
\end{colourband}
\bigskip

La macro suivante permet d'obtenir le centre radical de trois cercles.
\begin{colourband}
\macro|CentreRadical(Â«aÂ»,Â«bÂ»,Â«cÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{cercle} ;
  \item[\meta{b}:]  \typeGDD{cercle} ;
  \item[\meta{c}:]  \typeGDD{cercle}.
\end{description}\index{CentreRadical@\lstinline+CentreRadical+}
\end{colourband}
\bigskip

La macro suivante permet de calculer l'axe de similitude de trois cercles.
\begin{colourband}
\macro|AxeDeSimilitude(Â«aÂ»,Â«bÂ»,Â«cÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{cercle} ;
  \item[\meta{b}:]  \typeGDD{cercle} ;
  \item[\meta{c}:]  \typeGDD{cercle}.
\end{description}\index{AxeDeSimilitude@\lstinline+AxeDeSimilitude+}
\end{colourband}
\bigskip

\subsection{Le type \typeGDD{ellipse}}
\subsubsection{Constructeurs}

Les ellipses peuvent Ãªtre dÃ©finies de plusieurs faÃ§ons. Tout d'abord, on peut la
dÃ©finir avec son centre, un des points de l'ellipse sur le grand axe (appelÃ©
vertex), et un des points de l'ellipse sur le petit axe (appelÃ© co-vertex).
Cependant, lors de la crÃ©ation d'une ellipse de nombreux attributs sont calculÃ©s.

Le code du constructeur est le suivant:
\begin{mpcode}
  vardef Ellipse(expr C,A,B) = 
  % C : centre
  % A : vertex
  % B : co-vertex  
  save n,a,b,c,e,_tmp,slope,_D,_K,_h,_ff; 
  pair _tmp;
  n = incr gddO;
  gddT[n] = "ellipse"; gddA[n] = PointImp(C); gddB[n] = PointImp(A);
  gddC[n] = PointImp(B);
  % calcul des deux foyers
  a = Longueur(C,A);
  b = Longueur(C,B);
  c = sqrt(a**2-b**2);
  e = c/a;
  _tmp = e*(Pt(A)-Pt(C));
  % les foyers
  gddD[n] = PairTOPoint(Pt(C)+_tmp);
  gddE[n] = PairTOPoint(Pt(C)-_tmp);
  gddX[n][1] = a;
  gddX[n][2] = b;
  gddX[n][3] = e;
  % angle du demi grand axe
  slope = angle(PairImp(A)-PairImp(C));
  gddX[n][4] = slope;
  % directrices 
  _h = (a*a-c*c)/c;
  % prejection sur la directice
  _ff = Droite(gddE[n],gddD[n]);
  _K = ReportSurDroite(gddD[n],_ff,_h);
  _D = DroitePerpendiculaire(_ff,_K);
  gddX[n][5] := _D; % on stock la directrice
  gddX[n][6] := SymetrieCentrale(_D,gddA[n]); % on stock la deuxiÃ¨me directrice
  n
enddef;
\end{mpcode}

\begin{colourband}
\macro|Ellipse(Â«cÂ»,Â«aÂ»,Â«bÂ»)|\return{\typeGDD{ellipse}}
\begin{description}
  \item[\meta{c}:]  \typeGDD{point} ou \typeMP{pair}, le centre ;
  \item[\meta{a}:]  \typeGDD{point} ou \typeMP{pair}, le vertex ;
  \item[\meta{b}:]  \typeGDD{point} ou \typeMP{pair}, le co-vertex.
\end{description}\index{Ellipse@\lstinline+Ellipse+}
\end{colourband}
\bigskip

Cette macro s'utilise comme le montre l'exemple suivant.
\begin{ExempleMP}
input geom2d;
beginfig(1);
C = Point(0,0);
A = Point(3,1);
B = Rotation((1.5,0.5),Pi/2);
E = Ellipse(C,A,B);
trace E;
pointe A; pointe B; pointe C;
endfig;
\end{ExempleMP}

On pourra dÃ©finir une ellipse avec la donnÃ©e de ses deux foyers et du 
demi-grand axe avec la commande suivante:
\begin{colourband}
\macro|EllipseF(Â«AÂ»,Â«BÂ»,Â«aÂ»)|\return{\typeGDD{ellipse}}
\begin{description}
  \item[\meta{A}:]  \typeGDD{point} ou \typeMP{pair}, premier foyer ;
  \item[\meta{B}:]  \typeGDD{point} ou \typeMP{pair}, deuxiÃ¨me foyer ;
  \item[\meta{a}:]  \typeGDD{numeric}, le demi-grand axe.
\end{description}\index{EllipseF@\lstinline+EllipseF+}
\end{colourband}
\bigskip


Cette macro s'utilise comme le montre l'exemple suivant.
\begin{ExempleMP}
input geom2d;
beginfig(1);
F1 = Point(3,1);
F2 = Point(1.5,0.5);
E = EllipseF(F1,F2,1.7);
trace E;
pointe F1; pointe F2;
endfig;
\end{ExempleMP}

On pourra aussi dÃ©finir une ellipse Ã&nbsp; partir dâ€™un foyer, de sa directrice et de
lâ€™excentricitÃ© avec la commande suivante: 
\begin{colourband}
\macro|EllipseFD(Â«FÂ»,Â«DÂ»,Â«eÂ»)|\return{\typeGDD{ellipse}}
\begin{description}
  \item[\meta{F}:]  \typeGDD{point} ou \typeMP{pair}, un foyer ;
  \item[\meta{D}:]  \typeGDD{droite}, la directrice associÃ©e ;
  \item[\meta{e}:]  \typeGDD{numeric}, lâ€™excentricitÃ© ($&lt;1$).
\end{description}\index{EllipseFD@\lstinline+EllipseFD+}
\end{colourband}
\bigskip

\subsubsection{Macros associÃ©es}

On pourra obtenir le centre (\typeGDD{point}) d'une ellipse avec la commande :
\begin{colourband}
  \macro|Centre(Â«aÂ»)|\return{\typeGDD{point}}
  \begin{description}
    \item[\meta{a}:]  \typeGDD{cercle}, \typeGDD{ellipse} ou \typeGDD{hyperbole}.
  \end{description}\index{Centre@\lstinline+Centre+}
\end{colourband}

On obtient le vertex et le co-vertex avec les commandes suivantes:
\begin{colourband}
\macro|Vertex(Â«aÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}.
\end{description}\index{Vertex@\lstinline+Vertex+}
\end{colourband}
\bigskip

\begin{colourband}
\macro|CoVertex(Â«aÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}.
\end{description}\index{CoVertex@\lstinline+CoVertex+}
\end{colourband}
\bigskip

La commande suivante permet d'obtenir les deux foyers selon l'entier passÃ© en
argument.
\begin{colourband}
\macro|Foyer(Â«aÂ»,Â«nÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse} ;
  \item[\meta{n}:] \typeMP{numeric}, entier qui vaut 1 ou 2 pour obtenir chaque
  foyer.
\end{description}\index{Foyer@\lstinline+Foyer+}
\end{colourband}
\bigskip

On peut obtenir le demi-grand axe et le demi-petit axe avec les commandes
suivantes.
\begin{colourband}
\macro|DemiGrandAxe(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}.
\end{description}\index{DemiGrandAxe@\lstinline+DemiGrandAxe+}
\end{colourband}
\bigskip


\begin{colourband}
\macro|DemiPetitAxe(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}.
\end{description}\index{DemiPetitAxe@\lstinline+DemiPetitAxe+}
\end{colourband}
\bigskip

On obtient l'excentricitÃ©, souvent notÃ©e $e$, avec la commande suivante.

\begin{colourband}
\macro|Excentricite(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}, \typeGDD{parabole} ou \typeGDD{hyperbole}.
\end{description}\index{Excentricite@\lstinline+Excentricite+}
\end{colourband}
\bigskip

Pour obtenir l'inclinaison (coefficient directeur de la droite passant par les
foyers de l'ellipse), on utilisera la commande suivante.

\begin{colourband}
\macro|Inclinaison(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}, \typeGDD{parabole} ou \typeGDD{hyperbole}.
\end{description}\index{Inclinaison@\lstinline+Inclinaison+}
\end{colourband}
\bigskip

On peut obtenir les directrices de l'ellipse avec la commande suivante:

\begin{colourband}
\macro|Directrice(Â«aÂ»,Â«nÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}, \typeGDD{parabole} ou \typeGDD{hyperbole}
  ; 
  \item[\meta{n}:]  1 ou 2 (\typeMP{numeric}), pour choisir l'une des deux
  directrices. 
\end{description}\index{Directrice@\lstinline+Directrice+}
\end{colourband}
\bigskip

Pour obtenir la tangente (\typeGDD{droite}) Ã&nbsp; un point de l'ellipse, on
utilisera la commande suivante.

\begin{colourband}
\macro|TangenteEllipse(Â«eÂ»,Â«pÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{e}:]  \typeGDD{ellipse} ;
  \item[\meta{p}:]  \typeGDD{point} ou \typeMP{pair}.
\end{description}\index{TangenteEllipse@\lstinline+TangenteEllipse+}
\end{colourband}
\bigskip

\begin{ExempleMP}
input geom2d;
beginfig(1);
F1 = Point(3,1);
F2 = Point(1.5,0.5);
E = EllipseF(F1,F2,2.4);
pointe F1; pointe F2;
trace E;
M' = PointDe(E,0.5);
D = TangenteEllipse(E,M');
trace D;
pointe M';
pointe Foyer(E,1);
pointe Foyer(E,2);
Fenetre(-0.2,-2.5,6,4);
endfig;
\end{ExempleMP}


Pour obtenir les tangentes (\typeGDD{droite}) passant par un point extÃ©rieur Ã&nbsp;
l'ellipse, on utilisera la commande suivante.  Si le point choisi n'est pas
extÃ©rieur Ã&nbsp; l'ellipse, alors il y aura une erreur de compilation.

\begin{colourband}
\macro|TangenteExterieureEllipse(Â«eÂ»,Â«pÂ»,Â«nÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{e}:]  \typeGDD{ellipse} ;
  \item[\meta{p}:]  \typeGDD{point} ou \typeGDD{pair} ;
  \item[\meta{n}:] \typeMP{numeric} qui vaut 1 ou 2 pour choisir la tangente
  parmi les deux possibles.
\end{description}\index{TangenteExterieureEllipse@\lstinline+TangenteExterieureEllipse+}
\end{colourband}
\bigskip

Les points de tangence sont accessibles comme deuxiÃ¨me point de la dÃ©finition de
la \typeGDD{droite} grÃ¢ce Ã&nbsp; la table \variableGDD{gddB[]}.

\begin{ExempleMP}
input geom2d;
beginfig(1);
F1 = Point(3,1);
F2 = Point(1.5,0.5);
E = EllipseF(F1,F2,2.4);
pointe F1; pointe F2;
trace E;
M = Point(4,3);
D1 = TangenteExterieureEllipse(E,M,1);
trace D1;
pointe gddB[D1];
D2 = TangenteExterieureEllipse(E,M,2);
trace D2;
pointe gddB[D2];
pointe M;
pointe Foyer(E,1);
pointe Foyer(E,2);
Fenetre(-0.2,-2.5,6,4);
endfig;
\end{ExempleMP}

\subsection{Le type \typeGDD{parabole}}

Le constructeur de base de la parabole dÃ©finit cet objet Ã&nbsp; partir du foyer et
de la directrice. 

Le code du constructeur est le suivant:
\begin{mpcode}
vardef ParaboleFD(expr F,D) =
  % F : foyer (point)
  % D : directrice (droite)
  save u, v, w, d, i, n,_tmp,slope; 
  pair _tmp;
  n = incr gddO;
  (u,v,w) = EquationDroite(D);
  % ordonnÃ©e relative
  d := u * gddA[F] + v * gddB[F] + w;
  gddT[n] := "parabole"; 
  gddX[n][1] := D; % on stocke la directrice
  gddX[n][2] := D; % on stocke la directrice (compatibilitÃ© avec hyperbole)
  % sommet 
  _tmp := (((-d/2)*(u,v)) shifted PairImp(F));
  gddB[n] = PointImp(_tmp);
  gddC[n] = PointImp(_tmp);
  % le foyer (doublÃ© pour compatibilitÃ©)
  gddD[n] := F;
  gddE[n] := F;
  gddX[n][3] := 1.0; % excentricitÃ©
  % angle du demi-grand axe
  slope = angle(PairImp(gddA[D])-PairImp(gddB[D]))+90;
  gddX[n][4] = slope;
  i := -gddC2Dparam-1;
  gddP[n] := (
    ((i*(v,-u)+((i*i-d*d)/(2d))*(u,v))
    for i:= -gddC2Dparam upto gddC2Dparam:
      ..(i*(v,-u)+((i*i-d*d)/(2d))*(u,v))
    endfor)) shifted PairImp(F);
   n
enddef;
\end{mpcode}

\begin{colourband}
  \macro|ParaboleFD(Â«fÂ»,Â«dÂ»)|\return{\typeGDD{chemin}}
  \begin{description}
    \item[\meta{f}:] est le foyer (\typeGDD{point}) de la parabole;
    \item[\meta{d}:] est la directrice (\typeGDD{droite}) de la parabole.
  \end{description}
  \index{ParaboleFD@\lstinline+ParaboleFD+}
\end{colourband}

Lors de la reprÃ©sentation d'une parabole, le caractÃ¨re \emph{infini} est gÃ©rÃ©
par la variable globale \lstinline+gddC2Dparam+ qui vaut 15 par dÃ©faut. 

Pour la modifier, on utilisera la commande suivante:
\begin{colourband}
\macro|ParametreConiqueCoef(Â«nÂ»)|
\begin{description}
  \item[\meta{n}:] \typeMP{numeric}, paramÃ¨tre pour le tracÃ© des hyperboles et
  paraboles (valeur par dÃ©faut 15). 
\end{description}
\index{ParametreConiqueCoef@\lstinline+ParametreConiqueCoef+}
\end{colourband}

\subsubsection{Fonctions associÃ©es}


On obtient l'excentricitÃ©, souvent notÃ©e $e$, avec la commande suivante.

\begin{colourband}
\macro|Excentricite(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}, \typeGDD{parabole} ou \typeGDD{hyperbole}.
\end{description}\index{Excentricite@\lstinline+Excentricite+}
\end{colourband}
\bigskip


Pour obtenir l'inclinaison (coefficient directeur de la droite axe de symÃ©trie
de la parabole), on utilisera la commande suivante:

\begin{colourband}
\macro|Inclinaison(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}, \typeGDD{parabole} ou \typeGDD{hyperbole}.
\end{description}\index{Inclinaison@\lstinline+Inclinaison+}
\end{colourband}
\bigskip

On peut obtenir le sommet de la parabole avec la commande suivante:

\begin{colourband}
\macro|Sommet(Â«aÂ»,Â«nÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{parabole} ou \typeGDD{hyperbole} ;
  \item[\meta{n}:]  1 ou 2 (\typeMP{numeric}), argument utile pour l'hyperbole
  qui possÃ¨de deux sommets. Ici, peu importe la valeur de \meta{n}, l'unique
  sommet sera donnÃ©.
\end{description}\index{Sommet@\lstinline+Sommet+}
\end{colourband}
\bigskip

On peut obtenir la directrice de la parabole avec la commande suivante:

\begin{colourband}
\macro|Directrice(Â«aÂ»,Â«nÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}, \typeGDD{parabole} ou \typeGDD{hyperbole}
  ; 
  \item[\meta{n}:]  1 ou 2 (\typeMP{numeric}), argument utile pour l'hyperbole
  qui possÃ¨de deux directrices. Ici, peu importe la valeur de \meta{n},
  l'unique directrice sera donnÃ©e.
\end{description}\index{Directrice@\lstinline+Directrice+}
\end{colourband}
\bigskip

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(0,0);
B = Point(3,2);
AB = Droite(A,B);
F = Point(-1,1);
Para = ParaboleFD(F,AB);
trace AB;
trace Para;
pointe Sommet(Para,1);
pointe F;
Fenetre(-4,-5,2,5);
endfig;
\end{ExempleMP}


\subsection{Le type \typeGDD{hyperbole}}

Le constructeur de base de l'hyperbole dÃ©finit cet objet Ã&nbsp; partir du foyer et
de la directrice. 

Le code du constructeur est le suivant:
\begin{mpcode}
vardef HyperboleFD(expr F,D,e) =
  % F : foyer (point)
  % D : directrice (droite)
  % e : exentricitÃ© (numeric)
  % pm : +1 ou -1 pour les deux branches
  save u, v, w, d, i, n,_tmp,slope,aa,bb; 
  pair _tmp;
  n = incr gddO;

  (u,v,w) = EquationDroite(D);
  d := u * gddA[F] + v * gddB[F] + w;
  gddT[n] := "hyperbole"; 
  
  % sommets 
  _tmp := -(d+1*sqrt(e*e*d*d))/(e*e-1)*(u,v)shifted (ProduitScalaire(F,Vecteur(v,-u))*(v,-u));
  gddB[n] := PointImp(_tmp);
  _tmp := -(d-1*sqrt(e*e*d*d))/(e*e-1)*(u,v)shifted
  (ProduitScalaire(F,Vecteur(v,-u))*(v,-u));
  gddC[n] := PointImp(_tmp);
  % centre comme milieu des deux sommets
  gddA[n] = Milieu(gddB[n],gddC[n]);
  % le foyer (doublÃ© pour compatibilitÃ©)
  gddD[n] := F;
  gddE[n] := RotationCentre(F, gddA[n], Pi);
  gddX[n][3] := e; % excentricitÃ©
  % directrices
  gddX[n][1] := D; % on stocke la directrice
  gddX[n][2] := Droite(RotationCentre(gddA[D], gddA[n], Pi),RotationCentre(gddB[D], gddA[n], Pi));
  % angle de l'axe
  slope = angle(PairImp(gddA[D])-PairImp(gddB[D]))+90;
  gddX[n][4] = slope;
  % cercle principale
  gddX[n][5] = CercleD(gddB[n],gddC[n]);
  % asymptotes
  aa = IntersectionDroiteCercle(D,gddX[n][5],1);
  bb = IntersectionDroiteCercle(D,gddX[n][5],2);
  gddX[n][6] = Droite(gddA[n],aa);
  gddX[n][7] = Droite(gddA[n],bb);
  % tracÃ©s des moitiÃ©s
  i := -gddC2Dparam-1;
  gddPX[n][1] := (
    (
    (i*(v,-u)-(d+sqrt(e*e*d*d+i*i*(e*e-1)))/(e*e-1)*(u,v))
    for i:= -gddC2Dparam upto gddC2Dparam:
      ..(i*(v,-u)-(d+sqrt(e*e*d*d+i*i*(e*e-1)))/(e*e-1)*(u,v))
    endfor
  ) shifted (ProduitScalaire(F,Vecteur(v,-u))*(v,-u))
  );
  gddPX[n][2] := (
    (
    (i*(v,-u)-(d-sqrt(e*e*d*d+i*i*(e*e-1)))/(e*e-1)*(u,v))
    for i:= -gddC2Dparam upto gddC2Dparam:
      ..(i*(v,-u)-(d-sqrt(e*e*d*d+i*i*(e*e-1)))/(e*e-1)*(u,v))
    endfor
  ) shifted (ProduitScalaire(F,Vecteur(v,-u))*(v,-u))
  );
  n
enddef;
\end{mpcode}

On peut voir dans ce constructeur l'utilisation de la table de \typeMP{path}
Ã©tendu \variableGDD{gddPX[][]} qui permet d'associer plusieurs \typeMP{path}s Ã&nbsp;
un seul objet. 

\begin{colourband}
  \macro|HyperboleFD(Â«fÂ»,Â«dÂ»,Â«eÂ»)|\return{\typeGDD{hyperbole}}
  \begin{description}
    \item[\meta{f}:] est le foyer (\typeGDD{point}) de lâ€™hyperbole;
    \item[\meta{d}:] est la directrice (\typeGDD{droite}) de lâ€™hyperbole;
    \item[\meta{e}:] est l'excentricitÃ© de l'hyperbole. 
  \end{description}
  \index{HyperboleFD@\lstinline+HyperboleFD+}
\end{colourband}

On pourra aussi dÃ©finir une hyperbole avec ses deux foyers et la distance entre
un sommet et le centre de lâ€™hyperbole  (dÃ©finition bifocale).

\begin{colourband}
  \macro|HyperboleF(Â«f1Â»,Â«f2Â»,Â«aÂ»)|\return{\typeGDD{hyperbole}}
  \begin{description}
    \item[\meta{f1}:] est un foyer (\typeGDD{point}) de lâ€™hyperbole;
    \item[\meta{f2}:] est le deuxiÃ¨me foyer (\typeGDD{point}) de lâ€™hyperbole;
    \item[\meta{a}:] est la moitiÃ© de la distance entre les deux sommets de lâ€™hyperbole. 
  \end{description}
  \index{HyperboleF@\lstinline+HyperboleF+}
\end{colourband}

\subsubsection{Fonctions associÃ©es}

On pourra obtenir le centre (\typeGDD{point}) d'une hyperbole avec la commande :
\begin{colourband}
  \macro|Centre(Â«aÂ»)|\return{\typeGDD{point}}
  \begin{description}
    \item[\meta{a}:]  \typeGDD{cercle}, \typeGDD{ellipse} ou \typeGDD{hyperbole}.
  \end{description}\index{Centre@\lstinline+Centre+}
\end{colourband}


On obtient l'excentricitÃ©, souvent notÃ©e $e$, avec la commande suivante.

\begin{colourband}
\macro|Excentricite(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}, \typeGDD{parabole} ou \typeGDD{hyperbole}.
\end{description}\index{Excentricite@\lstinline+Excentricite+}
\end{colourband}
\bigskip


Pour obtenir l'inclinaison (coefficient directeur de la droite passant par les
foyers de l'hyperbole), on utilisera la commande suivante.

\begin{colourband}
\macro|Inclinaison(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}, \typeGDD{parabole} ou \typeGDD{hyperbole}.
\end{description}\index{Inclinaison@\lstinline+Inclinaison+}
\end{colourband}
\bigskip

On peut obtenir les sommets de l'hyperbole avec la commande suivante:

\begin{colourband}
\macro|Sommet(Â«aÂ»,Â«nÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{parabole} ou \typeGDD{hyperbole} ;
  \item[\meta{n}:]  1 ou 2 (\typeMP{numeric}), pour choisir l'un des deux sommets.
\end{description}\index{Sommet@\lstinline+Sommet+}
\end{colourband}
\bigskip

On peut obtenir les directrices de l'hyperbole avec la commande suivante:

\begin{colourband}
\macro|Directrice(Â«aÂ»,Â«nÂ»)|\return{\typeGDD{droite}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{ellipse}, \typeGDD{parabole} ou \typeGDD{hyperbole}
  ; 
  \item[\meta{n}:]  1 ou 2 (\typeMP{numeric}), pour choisir l'une des deux
  directrices. 
\end{description}\index{Directrice@\lstinline+Directrice+}
\end{colourband}
\bigskip

Pour obtenir le \emph{cercle principal} de l'hyperbole, on pourra utiliser la
commande suivante:


\begin{colourband}
  \macro|CerclePrincipale(Â«hÂ»)|\return{\typeGDD{cercle}}
  \begin{description}
    \item[\meta{h}:]  \typeGDD{hyperbole}.
  \end{description}\index{CerclePrincipale@\lstinline+CerclePrincipale+}
\end{colourband}
\bigskip

On pourra aussi obtenir les deux asymptotes de l'hyperbole avec la commande
suivante:

\begin{colourband}
  \macro|AsymptoteHyperbole(Â«hÂ»,Â«nÂ»)|\return{\typeGDD{droite}}
  \begin{description}
    \item[\meta{h}:]  \typeGDD{hyperbole} ;
    \item[\meta{n}:]  1 ou 2 (\typeMP{numeric}), pour choisir l'une des deux
    asymptotes. 
  \end{description}\index{AsymptoteHyperbole@\lstinline+AsymptoteHyperbole+}
\end{colourband}
\bigskip

Parce qu'une hyperbole est constituÃ©e de deux parties disjointes, on ne peut
pas, comme pour les autres objets \mpgeomdd, utiliser directement la commande
\lstinline+trace+ directement sur l'objet. Il faudra utiliser la commande
suivante pour obtenir le \typeMP{path} associÃ© Ã&nbsp; une des deux parties de
l'hyperbole.

\begin{colourband}
  \macro|DemiHyperbole(Â«hÂ»,Â«nÂ»)|\return{\typeGDD{path}}
  \begin{description}
    \item[\meta{h}:]  \typeGDD{hyperbole} ;
    \item[\meta{n}:]  1 ou 2 (\typeMP{numeric}), pour choisir l'une des deux
    parties. 
  \end{description}\index{DemiHyperbole@\lstinline+DemiHyperbole+}
\end{colourband}
\bigskip



\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(0,0);
B = Point(3,2);
AB = Droite(A,B);
F = Point(-1,1);
Hyper = HyperboleFD(F,AB,1.5);
trace AB;
trace DemiHyperbole(Hyper,1);
trace DemiHyperbole(Hyper,2);
trace Directrice(Hyper,2);
trace CerclePrincipale(Hyper) dashed evenly;
trace AsymptoteHyperbole(Hyper,1) dashed evenly;
trace AsymptoteHyperbole(Hyper,2) dashed evenly;
pointe Centre(Hyper);
pointe Foyer(Hyper,1);
pointe Foyer(Hyper,2);
pointe Sommet(Hyper,1);
pointe Sommet(Hyper,2);
Fenetre(-3,-5,3,5);
endfig;
\end{ExempleMP}


\subsection{Le type \typeGDD{triangle}}

Les triangles sont dÃ©finis par trois
points de $\R^2$.

\subsubsection{Constructeur}
La fonction crÃ©atrice de cet objet est la suivante
\begin{mpcode}
vardef Triangle (expr a,b,c) =
  save n; n = incr gddO; gddT[n] = "triangle";
  gddA[n] = PointImp(a); gddB[n] = PointImp(b); gddC[n] = PointImp(c); n
enddef;
\end{mpcode}

\begin{colourband}
\macro|Triangle(Â«aÂ»,Â«bÂ»,Â«cÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{point} ;
  \item[\meta{b}:]  \typeGDD{point} ;
  \item[\meta{c}:]  \typeGDD{point}.
\end{description}\index{Triangle@\lstinline+Triangle+}
\end{colourband}


\bigskip

Ici, on voit l'appel Ã&nbsp; la troisiÃ¨me table \variableGDD{gddC} pour stocker le
troisiÃ¨me point.

Un triangle se dÃ©finit alors comme ceci:
\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(3,1);
B = Point(1,3);
C = Point(0,0);
ABC = Triangle(A,B,C);
trace ABC;
endfig;
\end{ExempleMP}

\subsubsection{Macros associÃ©es}

La macro suivante permet de calculer l'aire d'un triangle.
\begin{colourband}
\macro|AireTriangle(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{triangle}.
\end{description}\index{AireTriangle@\lstinline+AireTriangle+}
\end{colourband}

On peut calculer aussi l'orthocentre d'un triangle avec la commande suivante.
\begin{colourband}
\macro|Orthocentre(Â«aÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{triangle}.
\end{description}\index{Orthocentre@\lstinline+Orthocentre+}
\end{colourband}

La macro suivante calcule le cercle inscrit d'un triangle.
\begin{colourband}
\macro|CercleInscrit(Â«aÂ»)|\return{\typeGDD{cercle}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{triangle}.
\end{description}\index{CercleInscrit@\lstinline+CercleInscrit+}
\end{colourband}

On peut aussi obtenir le cercle circonscrit avec la macro suivante.
\begin{colourband}
\macro|CercleCirconscrit(Â«aÂ»)|\return{\typeGDD{cercle}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{triangle}.
\end{description}\index{CercleCirconscrit@\lstinline+CercleCirconscrit+}
\end{colourband}

On peut aussi calculer les cercles exinscrits. Soient $A$, $B$ et $C$ trois points
dÃ©finissant un triangle $ABC$\footnote{Ã‰videmment, les points peuvent s'appeler
autrement.}. La commande suivante permet d'obtenir, au choix, un des trois
cercles exinscrits.
\begin{colourband}
\macro|CercleExinscrit(Â«aÂ»,Â«nÂ»)|\return{\typeGDD{cercle}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{triangle} ;
  \item[\meta{n}:]  \typeMP{numeric} qui vaut 1, 2 ou 3. Si \meta{n}$=1$, c'est
  le cercle exinscrit tangent au cÃ´tÃ© $[BC]$ du triangle, si \meta{n}$=2$, c'est
  celui tangent au cÃ´tÃ© $[AC]$ et si \meta{n}$=3$, c'est celui tangent au cÃ´tÃ© $[AB]$.
\end{description}\index{CercleExinscrit@\lstinline+CercleExinscrit+}
\end{colourband}

On peut aussi obtenir le cercle d'Euler d'un triangle avec la commande suivante.
\begin{colourband}
\macro|CercleEuler(Â«aÂ»)|\return{\typeGDD{cercle}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{triangle}.
\end{description}\index{CercleEuler@\lstinline+CercleEuler+}
\end{colourband}

Voici un exemple d'illustration des quelques-unes des macros relatives aux
triangles.
\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(3,1);
B = Point(1,3);
C = Point(0,0);
AB = Droite(A,B);
BC = Droite(B,C);
ABC = Triangle(A,B,C);
trace AB dashed evenly;
trace BC dashed evenly;
trace ABC avecCrayon(1.5,black);
Euler = CercleEuler(ABC);
trace Euler avecCrayon(1,DarkRed);
C_E1 = CercleExinscrit(ABC,2);
trace C_E1 avecCrayon(1,LightBlue);
C_C = CercleCirconscrit(ABC);
trace C_C avecCrayon(1,LightCoral);
Fenetre(-1,-4,4,4);
endfig;
\end{ExempleMP}

\subsection{Le type \typeGDD{polygone}}
Les polygones sont dÃ©finis par $N$
points de $\R^2$.

\subsubsection{Constructeurs}

La fonction crÃ©atrice de cet objet est la suivante
\begin{mpcode}
vardef Polygone (text plist) =
  save n,_point,i; n = incr gddO; gddT[n] = "polygone";
  i:=1;
  for _point = plist:
    gddX[gddO][i] = PointImp(_point);
    i:=i+1;
  endfor
  gddA[n] = i-1; % nombre de cÃ´tÃ©
  gddB[n] = IsoBarycentre(plist); % centre
  n
enddef;
\end{mpcode}

\begin{colourband}
\macro|Polygone(Â«listeÂ»)|\return{\typeGDD{polygone}}
\begin{description}
  \item[\meta{liste}:] est une liste de \typeGDD{point} ou de \typeMP{pair}.
\end{description}\index{Polygone@\lstinline+Polygone+}
\end{colourband}


\bigskip

Ici, on voit l'appel Ã&nbsp; la \emph{double} table \variableGDD{gddX} pour stocker
les $N$ points.

Un polygone se dÃ©finit alors comme ceci:
\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(2,0);
B = Point(3,1);
C = Point(0,2);
D = Point(0,0);
P = Polygone(A,B,C,D);
trace P;
endfig;
\end{ExempleMP}

On pourra aussi construire des polygones rÃ©guliers avec la commande suivante.
\begin{colourband}
\macro|PolygoneRegulier(Â«NÂ»,Â«rayonÂ»,Â«rotationÂ»,Â«translationÂ»)|\return{\typeGDD{polygone}}
\begin{description}
  \item[\meta{N}:] entier (\typeMP{numeric}) indiquant le nombre de points ;
  \item[\meta{rayon}:] \typeMP{numeric}, rayon du cercle circonscrit ;
  \item[\meta{rotation}:]  \typeMP{numeric}, rotation du polygone ;
  \item[\meta{translation}:]  \typeGDD(point) ou \typeGDD{vecteur} (ou mÃªme
  \typeMP{pair}), dÃ©placement du centre du polygone.
\end{description}\index{PolygoneRegulier@\lstinline+PolygoneRegulier+}
\end{colourband}

\begin{ExempleMP}
  input geom2d;
  beginfig(1);
  P = PolygoneRegulier(7,3,0,origine);
  trace P;
  endfig;
  \end{ExempleMP}

\subsubsection{Macros associÃ©es}

On pourra obtenir le nombre de cÃ´tÃ©s d'un polygone avec la commande suivante.

\begin{colourband}
\macro|NombreCotesPolygone(Â«aÂ»)|\return{\typeMP{numeric}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{polygone}.
\end{description}\index{NombreCotesPolygone@\lstinline+NombreCotesPolygone+}
\end{colourband}
\bigskip

On pourra avoir accÃ¨s aux diffÃ©rents sommets du polygone, numÃ©rotÃ©s Ã&nbsp; partir de
1, avec la macro suivante.

\begin{colourband}
\macro|PointPolygone(Â«aÂ»,Â«iÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{a}:]  \typeGDD{polygone} ;
  \item[\meta{i}:] \typeMP{numeric}, entier plus grand que 1, permettant
  d'accÃ©der au $i$\ieme{} point du polygone.
\end{description}\index{PointPolygone@\lstinline+PointPolygone+}
\end{colourband}
  \bigskip

\subsection{Le type \typeGDD{chemin}} Pour ce type particulier, \mpgeomdd stocke
le \typeMP{path} dans la table \variableGDD{gddP} rÃ©servÃ©e. Ainsi la fonction
crÃ©atrice de ce type d'objet est la suivante
\begin{mpcode}
vardef Chemin (expr p) =
gddT[incr gddO] = "chemin"; gddP[gddO] = p; gddO
enddef;
\end{mpcode}
\begin{colourband}
\macro|Chemin(Â«pÂ»)|\return{\typeGDD{chemin}}
\begin{description}
  \item[\meta{p}:] un \typeMP{path} de \MP
\end{description}\index{Chemin@\lstinline+Chemin+}
\end{colourband}


\subsubsection{Macros associÃ©es}

La macro suivante contruit, Ã&nbsp; partir d'une liste de \typeGDD{point}s, une ligne
brisÃ©e de type \typeGDD{chemin}.

\begin{colourband}
  \macro|LigneBrisee(Â«listeÂ»)|\return{\typeGDD{chemin}}
  \begin{description}
    \item[\meta{liste}:] est une liste de \typeGDD{point} ou de \typeMP{pair}.
  \end{description}\index{LigneBrisee@\lstinline+LigneBrisee+}
\end{colourband}
  

\subsection{Le type \typeGDD{courbe}}

Pour ce type particulier, \mpgeomdd stocke
une chaine de caractÃ¨re (un nom de fichier Ã&nbsp; exploiter avec l'extension
\fichier{graph.mp}) dans la table \variableGDD{gddS} rÃ©servÃ©e.

\subsubsection{Constructeur}

Ainsi la fonction
crÃ©atrice de ce type d'objet est la suivante
\begin{mpcode}
vardef CourbeDat (expr s) =
  gddT[incr gddO] = "courbe"; gddS[gddO] = s; gddO
enddef;
\end{mpcode}
\begin{colourband}
\macro|CourbeDat(Â«sÂ»)|\return{\typeGDD{courbe}}
\begin{description}
  \item[\meta{s}:] un nom de fichier sous forme de \typeMP{string} de \MP
\end{description}\index{CourbeDat@\lstinline+CourbeDat+}
\end{colourband}

\bigskip

\section{Arc de cercle}

Avec \mpgeomdd{}, quelques commandes permettent de travailler avec les arcs de
cercle. Tout d'abord, on peut dÃ©cider de ne reprÃ©senter qu'un arc de cercle d'un
\typeGDD{cercle} prÃ©cÃ©demment dÃ©fini. Ceci se fait avec la commande suivante qui
prend en argument un \typeGDD{cercle} et deux angles en radian, et retourne un
\typeMP{path} de \MP{} correspondant Ã&nbsp; l'arc de cercle compris entre les deux
angles donnÃ©s (l'angle 0 Ã©tant parallÃ¨le Ã&nbsp; l'axe $Ox$).

\begin{colourband}
\macro|gddTraceArcDeCercle(Â«CÂ»,Â«aÂ»,Â«bÂ»)|\return{\typeMP{path}}
\begin{description}
  \item[\meta{C}:] \typeGDD{cercle} dont on souhaite reprÃ©senter un arc ;
  \item[\meta{a}:] premier angle en radian (\typeMP{numeric}) ;
  \item[\meta{b}:] deuxiÃ¨me angle en radian (\typeMP{numeric}).
\end{description}\index{gddTraceArcDeCercle@\lstinline+gddTraceArcDeCercle+}
\end{colourband}

\begin{ExempleMP}
input geom2d;
beginfig(1);
C = Cercle(origine,2);
trace C;
trace gddTraceArcDeCercle(C,Pi/3,Pi) avecCrayon(2,DarkRed);
endfig;
\end{ExempleMP}

On peut aussi dÃ©finir un objet \typeGDD{chemin}. Pour cela on pourra utiliser
les deux commandes suivantes. La premiÃ¨re permet de dÃ©finir un arc de cercle Ã&nbsp;
partir d'un point, d'un rayon et de deux angles.

\begin{colourband}
\macro|Arc(Â«PÂ»,Â«rÂ»,Â«aÂ»,Â«bÂ»)|\return{\typeGDD{chemin}}
\begin{description}
  \item[\meta{P}:] \typeGDD{point} ou \typeMP{pair} centre de l'arc de cercle ;
  \item[\meta{r}:] rayon de l'arc de cercle (\typeMP{numeric}) ;
  \item[\meta{a}:] premier angle en radian (\typeMP{numeric}) ;
  \item[\meta{b}:] premier angle en radian (\typeMP{numeric}).
\end{description}\index{Arc@\lstinline+Arc+}
\end{colourband}


\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(2,2);
Ac = Arc(A,2,Pi/3,Pi);
pointe A;
trace Ac;
endfig;
\end{ExempleMP}

La deuxiÃ¨me commande dÃ©finissant un \typeGDD{chemin} est la suivante. Elle prend
comme arguments trois points, notons les $C$, $A$ et $B$ : le centre de l'arc de
cercle $C$, et les points $A$ et $B$. Elle prend ensuite comme argument le rayon
de l'arc dÃ©fini entre les segments $[C,A]$ et $[C,B]$.

\begin{colourband}
\macro|ArcEntrePoints(Â«PÂ»,Â«rÂ»,Â«AÂ»,Â«BÂ»,Â«sÂ»)|\return{\typeGDD{chemin}}
\begin{description}
  \item[\meta{P}:] \typeGDD{point} ou \typeMP{pair} centre de l'arc de cercle ;
  \item[\meta{r}:] rayon de l'arc de cercle (\typeMP{numeric}) ;
  \item[\meta{A}:] premier \typeGDD{point}  ou \typeMP{pair} ;
  \item[\meta{B}:] deuxiÃ¨me \typeGDD{point}  ou \typeMP{pair} ;
  \item[\meta{s}:] \typeMP{numeric}, $-1$ ou $1$ suivant le sens choisi.
\end{description}\index{ArcEntrePoints@\lstinline+ArcEntrePoints+}
\end{colourband}

\begin{ExempleMP}
input geom2d;
beginfig(1);
C = Point(0,0);
A = Point(2,2);
B = Point(0,3);
Cab = ArcEntrePoints(C,1,A,B,1);
Cba = ArcEntrePoints(C,1,A,B,-1);
trace Segment(C,A);
trace Segment(C,B);
pointe A; pointe B; pointe C;
fleche Cab;
fleche Cba avecCrayon(1,DarkRed);
endfig;
\end{ExempleMP}

\section{Quelques macros}

Cette section regroupe quelques macros qui ne sont pas spÃ©cifiques Ã&nbsp; un type. 
\bigskip

La macro suivante permet de calculer un point dâ€™intersection entre deux objets
\mpgeomdd. Câ€™est en rÃ©alitÃ© une surcouche Ã&nbsp; la primitive \MP{}
\lstinline|intersectionpoint| appliquÃ©e sur les objets \emph{tracÃ©s} (avec
\lstinline+gddTraceObjet+). 
\begin{colourband}
\macro|PointIntersection(Â«oÂ»,Â«bÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{o}:] un objet \mpgeomdd ;
  \item[\meta{b}:] un objet \mpgeomdd.
\end{description}\index{PointIntersection@\lstinline+PointIntersection+}
\end{colourband}

\section{Quelques transformations}

\subsection{HomothÃ©tie}

On peut rÃ©aliser une homothÃ©tie sur n'importe quel objet \mpgeomdd avec la commande
suivante.

\begin{colourband}
\macro|Homothetie(Â«pÂ»,Â«oÂ»,Â«kÂ»)|\return{du mÃªme type que \meta{p}}
\begin{description}
  \item[\meta{p}:] un objet \mpgeomdd ;
  \item[\meta{o}:] \typeGDD{point} ou \typeMP{pair}, centre de l'homothÃ©tie ;
  \item[\meta{k}:] \typeMP{numeric}, facteur de l'homothÃ©tie.
\end{description}\index{Homothetie@\lstinline+Homothetie+}
\end{colourband}

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,2);
B = Point(0,2);
C_B = Cercle(B,1);
T = Triangle((1,1),(0,0),(0,1));
C_H = Homothetie(C_B, A, 2);
T_H = Homothetie(T, A ,-1);
trace C_B; trace C_H;
trace T; trace T_H;
pointe A; pointe B;
endfig;
\end{ExempleMP}

\subsection{SymÃ©trie axiale}

On peut rÃ©aliser une symÃ©trie axiale sur n'importe quel objet \mpgeomdd avec la
commande suivante.

\begin{colourband}
\macro|SymetrieAxiale(Â«pÂ»,Â«dÂ»)|\return{du mÃªme type que \meta{p}}
\begin{description}
  \item[\meta{p}:] un objet \mpgeomdd ;
  \item[\meta{d}:] \typeGDD{droite} dÃ©finissant l'axe de symÃ©trie.
\end{description}\index{SymetrieAxiale@\lstinline+SymetrieAxiale+}
\end{colourband}

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,2);
B = Point(0,2);
C_B = Cercle(B,1);
T = Triangle((1,1),(0,0),(0,1));
D = Droite((-1,0),(3,-1));
C_H = SymetrieAxiale(C_B, D);
T_H = SymetrieAxiale(T, D);
trace C_B; trace C_H;
trace T; trace T_H;
trace D;
pointe A; pointe B;
Fenetre(-2.5,-3.5,3,3.2);
endfig;
\end{ExempleMP}

\subsection{SymÃ©trie centrale}

On peut rÃ©aliser une symÃ©trie centrale sur n'importe quel objet \mpgeomdd avec la
commande suivante.

\begin{colourband}
\macro|SymetrieCentrale(Â«pÂ»,Â«dÂ»)|\return{du mÃªme type que \meta{p}}
\begin{description}
  \item[\meta{p}:] un objet \mpgeomdd ;
  \item[\meta{d}:] \typeGDD{point} dÃ©finissant le centre de symÃ©trie.
\end{description}\index{SymetrieCentrale@\lstinline+SymetrieCentrale+}
\end{colourband}

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,2);
B = Point(0,2);
C_B = Cercle(B,1);
T = Triangle((1,1),(0,0),(0,1));
D = Point(-1,0);
C_H = SymetrieCentrale(C_B, D);
T_H = SymetrieCentrale(T, D);
trace C_B; trace C_H;
trace T; trace T_H;
pointe D;
pointe A; pointe B;
Fenetre(-3.5,-3.5,3,3.2);
endfig;
\end{ExempleMP}

\subsection{Inversion}

On peut calculer l'inversion d'un point, d'un cercle ou d'une droite par rapport Ã&nbsp; un cercle avec la macro
suivante.
\begin{colourband}
\macro|Inversion(Â«pÂ»,Â«cÂ»)|\return{\typeGDD{point}}
\begin{description}
  \item[\meta{p}:]  \typeGDD{point}, \typeGDD{cercle} ou \typeGDD{droite} ;
  \item[\meta{c}:]  \typeGDD{cercle}.
\end{description}\index{Inversion@\lstinline+Inversion+}
\end{colourband}
\bigskip

\begin{ExempleMP}
input geom2d;
beginfig(1);
  A = Point(2,2);
  C = Cercle(A,2);
  trace C;
  marque.rt "A";
  B = Point(-0.5,1);
  D = Inversion(B,C);
  drawoptions(withcolor DarkRed);
  marque.rt "B";  marque.rt "D";

  drawoptions(withcolor DarkBlue);
  E = Point(3,1);
  CE = Cercle(E,0.5);
  trace CE;
  marque.rt "E";
  iCE = Inversion(CE,C);
  trace iCE;


  drawoptions(withcolor DarkGreen);
  d = Droite((3,3),(4,2));
  trace d;
  Cd = Inversion(d,C);
  trace Cd;
  Fenetre(-1,-1,5.5,6);
endfig;
\end{ExempleMP}


\section{Annotations et labels}

\subsection{Signes}

\mpgeomdd fournit la macro suivante pour marquer un angle droit formÃ© par trois
points:
\begin{colourband}
\macro|SigneOrtho(Â«aÂ»,Â«bÂ»,Â«cÂ»,Â«xÂ»)|
\begin{description}
  \item[\meta{a},\meta{b},\meta{c}:] sont les trois \typeGDD{point}s formant
  l'angle droit $\widehat{ABC}$ ;
  \item[\meta{x}:] est la \og{}taille\fg{} (\typeMP{numeric}) du signe d'orthogonalitÃ©.
\end{description}\index{SigneOrtho@\lstinline+SigneOrtho+}
\end{colourband}

On peut aussi rÃ©aliser des marques entre deux points ou sur un segment, un
vecteur, ou tout type d'objet. Pour cela, la premiÃ¨re macro est la suivante:
\begin{colourband}
\macro|Marque(Â«aÂ»,Â«bÂ»,Â«nÂ»)|
\begin{description}
  \item[\meta{a}:] premier \typeGDD{point} formant
  le segment Ã&nbsp; marquer;
  \item[\meta{b}:] deuxiÃ¨me \typeGDD{point} formant
  le segment Ã&nbsp; marquer;
  \item[\meta{n}:] est le type (\typeMP{numeric}) de marque, il y en a quatre
  \meta{n}$=1$, $2$, $3$ ou $4$.
\end{description}\index{Marque@\lstinline+Marque+}
\end{colourband}

On peut aussi marquer n'importe quel type de trait avec la macro suivante:
\begin{colourband}
\macro|MarqueTrait(Â«aÂ»,Â«nÂ»)|
\begin{description}
  \item[\meta{a}:] est n'importe quel objet \mpgeomdd ou mÃªme un \typeMP{path} \MP;
  \item[\meta{n}:] est le type (\typeMP{numeric}) de marque, il y en a quatre
  \meta{n}$=1$, $2$, $3$ ou $4$.
\end{description}\index{MarqueTrait@\lstinline+MarqueTrait+}
\end{colourband}
    
  
\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(4,0);
B = Point(0,0);
C = Point(0,2);
trace Segment(B,A);
trace Segment(B,C);
marque.bot "A";
marque.bot "B";
marque.lft "C";
trace SigneOrtho(A,B,C,0.5);
trace Marque(A,B,1);
trace MarqueTrait(Segment(B,C),3);
endfig;
\end{ExempleMP}
  

\subsection{Labels}

Comme le code produit avec \mpgeomdd est un code \MP{}\cite{ctan-metapost}, on peut utiliser les outils
classiques de labÃ©lisation. Cependant, pour permettre plus de flexibilitÃ© (et
notamment une compatibilitÃ© avec \hologo{LuaLaTeX} et
\package{luamplib}~\cite{ctan-luamplib} ou
\package{minim-mp}~\cite{ctan-minim-mp}), si le code est compilÃ© avec \MP{},
alors le package~\package{latexmp}~\cite{ctan-latexmp} est chargÃ© et fournit la
commande \lstinline+textext()+.

De plus, \mpgeomdd fournit quelques commandes pour se faciliter la vie.

On peut marquer les points avec la commande suivante. Cette commande
\emph{pointe} le point (avec la commande \lstinline+pointe+, voir
section~\ref{sec:trace}) et inscrit un label.
\begin{colourband}
\macro|marque.Â«placeÂ» "Â«nomÂ»"|
\begin{description}
  \item[\meta{place}:] peut Ãªtre les classiques placements de \MP{} :
  \lstinline+top+, \lstinline+bot+, \lstinline+rt+,
  \lstinline+lft+,+\lstinline+urt+, \lstinline+ulft+, \lstinline+lrt+, \lstinline+llft+.
  \item[\meta{nom}:] entre double quote, doit Ãªtre un nom de variable de
  point. Le nom sera composÃ© en mode mathÃ©matique (entre \lstinline+$+). Si le
  nom contient un \lstinline+_+, tout ce qui sera aprÃ¨s sera mis en
  indice (ex. \lstinline+A_be+ deviendra $A_{be}$). Si le nom est
  \lstinline+alpha+, \lstinline+beta+, \lstinline+gamma+ ou \lstinline+delta+,
  alors le rÃ©sultat donnera la lettre grecque composÃ©e en mode mathÃ©matique.
\end{description}\index{marque@\lstinline+marque+}
\end{colourband}


\mpgeomdd fournit aussi une adaptation au classique \lstinline+label+ de \MP{}.

\begin{colourband}
\macro|gddLabel.Â«placeÂ»(Â«materielÂ»,Â«pointÂ»)|
\begin{description}
  \item[\meta{place}:] peut Ãªtre les classiques placements de \MP{} :
  \lstinline+top+, \lstinline+bot+, \lstinline+rt+,
  \lstinline+lft+,+\lstinline+urt+, \lstinline+ulft+, \lstinline+lrt+, \lstinline+llft+.
  \item[\meta{materiel}:] classiquement ce qu'on donne Ã&nbsp; \lstinline+label+, une
  chaÃ®ne de caractÃ¨res, ou une \typeMP{picture} (qui peut-Ãªtre produite par
  exemple avec \lstinline+btex ... etex+ ou, puisque \package{latexmp} est
  chargÃ© par \mpgeomdd, \lstinline+textext()+).
  \item[\meta{point}:] doit Ãªtre un \typeGDD{point} de \mpgeomdd.
\end{description}\index{gddLabel@\lstinline+gddLabel+}
\end{colourband}

On peut aussi Ã©tiquetter un \typeGDD{chemin}, une \typeGDD{courbe} ou un
\typeMP{path} avec la macro suivante:

\begin{colourband}
\macro|EtiquetteChemin.Â«placeÂ»(Â«materielÂ»,Â«cheminÂ»,Â«positionÂ»)|
\begin{description}
  \item[\meta{place}:] peut Ãªtre les classiques placements de \MP{} :
  \lstinline+top+, \lstinline+bot+, \lstinline+rt+,
  \lstinline+lft+,+\lstinline+urt+, \lstinline+ulft+, \lstinline+lrt+, \lstinline+llft+.
  \item[\meta{materiel}:] classiquement ce qu'on donne Ã&nbsp; \lstinline+label+, une
  chaÃ®ne de caractÃ¨res, ou une \typeMP{picture} (qui peut-Ãªtre produite par
  exemple avec \lstinline+btex ... etex+ ou, puisque \package{latexmp} est
  chargÃ© par \mpgeomdd, \lstinline+textext()+).
  \item[\meta{chemin}:] doit Ãªtre un \typeGDD{chemin}, une \typeGDD{courbe}, ou
  un \typeMP{path}.
\end{description}\index{EtiquetteChemin@\lstinline+EtiquetteChemin+}
\end{colourband}
  


\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(0,0);
B_23 = Point(3,3);
alpha = Point(0,2);
trace Segment(A,B_23);
C = Milieu(A,B_23);
pointe C;
gddLabel.top(textext("Milieu"),C);
marque.top "A";
marque.urt "B_23";
marque.llft "alpha";
P = Chemin(Pt(A)..Pt(alpha)..Pt(B_23));
trace P;
EtiquetteChemin.top("Test",P,0.6);
endfig;
\end{ExempleMP}


\section{RepÃ¨re}

\mpgeomdd fournit un ensemble de commandes permettant de faciliter le dessin de
repÃ¨re.

La commande principale est la dÃ©finition du repÃ¨re, c'est-Ã&nbsp;-dire la boÃ®te dans
laquelle le dessin sera reprÃ©sentÃ©.
\begin{colourband}
  \macro|Repere(Â«lÂ»,Â«hÂ»,Â«oxÂ»,Â«oyÂ»,Â«uxÂ»,Â«uyÂ»)|
  \begin{description}
    \item[\meta{l}:] \typeMP{numeric}, largeur du repÃ¨re (en unitÃ© \lstinline+gddU+) ;
    \item[\meta{h}:] \typeMP{numeric}, hauteur du repÃ¨re (en unitÃ© \lstinline+gddU+) ;
    \item[\meta{ox}:] \typeMP{numeric}, distance (en unitÃ© \lstinline+gddU+) de
    l'origine (\typeGDD{point} $(0,0)$) par rapport au bord gauche ;
    \item[\meta{oy}:] \typeMP{numeric}, distance (en unitÃ© \lstinline+gddU+) de
    l'origine (\typeGDD{point} $(0,0)$) par rapport au bord bas ;
    \item[\meta{ux}:] \typeMP{numeric}, unitÃ© de l'axe $(Ox)$ (en unitÃ© \lstinline+gddU+) ;
    \item[\meta{uy}:] \typeMP{numeric}, unitÃ© de l'axe $(Oy)$ (en unitÃ© \lstinline+gddU+).
  \end{description}\index{Repere@\lstinline+Repere+}
\end{colourband}

Cette commande ne retourne, ni ne trace rien. Elle sert Ã&nbsp; spÃ©cifier quelques
variables internes de dÃ©finition du dessin. Elle modifie d'ailleurs le
comportement de la macro \lstinline+gddEnPlace+ (voir
page~\pageref{gddEnPlace}). Noter que cette commande impose le fait que
l'origine (c'est-Ã&nbsp;-dire le \typeGDD{point} $(0,0)$) soit Ã&nbsp; l'intÃ©rieur du
repÃ¨re.

Cette macro s'accompagne de deux autres, elles aussi \emph{silencieuses}, ne
servant qu'Ã&nbsp; :
\begin{itemize}
\item sauvegarder la \typeMP{picture} courante ;
\item construire une \typeMP{picture} avec le contenu se trouvant entre
\lstinline+Debut+ et \lstinline+Fin+ ;
\item rogner (avec \lstinline+clip+) la \typeMP{picture} aux cadre du repÃ¨re
construit ;
\item ajouter la \typeMP{picture} courant Ã&nbsp; celle sauvegarder ;
\item enfin rÃ©tablir le
fonctionnement de \lstinline+gddEnPlace+ comme avant l'utilisation de
\lstinline+Repere+.
\end{itemize} 

Ces deux commandes sont appelÃ©es \lstinline+Debut+ et
\lstinline+Fin+.

\begin{colourband}
\macro|Debut|
\index{Debut@\lstinline+Debut+}
\end{colourband}


\begin{colourband}
\macro|Fin|
\index{Fin@\lstinline+Fin+}
\end{colourband}

Ainsi, il est trÃ¨s simple d'illustrer le fait qu'Ã&nbsp; un changement de base
orthogonale prÃªt, un cercle est une ellipse.

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,1);
CA = Cercle(A,2);
Repere(5,5,1,1,1,0.5);
Debut;
trace CA;
Fin;
endfig;
\end{ExempleMP}

On dispose de deux commandes pour tracer les axes du repÃ¨re. La premiÃ¨re trace
les axes passant par l'origine.
\begin{colourband}
\macro|Axes|\indication{trace un ensemble d'Ã©lÃ©ments sur le repÃ¨re}
\index{Axes@\lstinline+Axes+}
\end{colourband}

Cette commande inscrit aussi les labels des axes des abscisses et des ordonnÃ©es
qui sont stockÃ©es dans les variables globales dÃ©diÃ©es suivantes:
\begin{colourband}
\macro|gddXlabel|\indication{\typeMP{string}, valeur par dÃ©faut \lstinline+"$x$"+}
\index{gddXlabel@\lstinline+gddXlabel+}
\end{colourband}

\begin{colourband}
\macro|gddYlabel|\indication{\typeMP{string}, valeur par dÃ©faut \lstinline+"$y$"+}
\index{gddYlabel@\lstinline+gddYlabel+}
\end{colourband}

Attention, ces commandes doivent s'utiliser avant l'appel Ã&nbsp; \lstinline+Debut+.

L'exemple suivant permet d'illustrer le tracÃ© des axes.

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,1);
CA = Cercle(A,2);
Repere(5,5,1,1,1,1);
gddYlabel:="$z$";
Axes;
Debut;
trace CA;
Fin;
endfig;
\end{ExempleMP}

On pourra aussi dÃ©finir un repÃ¨re en utilisant une syntaxe permettant de
spÃ©cifier les abscisses et les ordonnÃ©es extrÃ©males.

\begin{colourband}
  \macro|RepereMinMax(Â«xminÂ»,Â«xmaxÂ»,Â«yminÂ»,Â«ymaxÂ»,Â«uxÂ»,Â«uyÂ»)|
  \begin{description}
    \item[\meta{xmin}:] \typeMP{numeric}, abscisse minimum (en unitÃ© \lstinline+gddU+).
    \item[\meta{xmax}:] \typeMP{numeric}, abscisse maximum (en unitÃ© \lstinline+gddU+).
    \item[\meta{ymin}:] \typeMP{numeric}, ordonnÃ©e minimum (en unitÃ© \lstinline+gddU+).
    \item[\meta{ymax}:] \typeMP{numeric}, ordonnÃ©e maximum (en unitÃ© \lstinline+gddU+).
    \item[\meta{ux}:] \typeMP{numeric}, unitÃ© de l'axe $(Ox)$ (en unitÃ© \lstinline+gddU+).
    \item[\meta{uy}:] \typeMP{numeric}, unitÃ© de l'axe $(Oy)$ (en unitÃ© \lstinline+gddU+).
  \end{description}\index{RepereMinMax@\lstinline+RepereMinMax+}
\end{colourband}

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,1);
CA = Cercle(A,2);
RepereMinMax(-1,4,-1,4,1,1);
Axes;
Debut;
trace CA;
Fin;
endfig;
\end{ExempleMP}

\mpgeomdd fournit aussi de quoi tracer les axes sur le bord du cadre avec la
commande suivante.
\begin{colourband}
\macro|AxesBords|\indication{trace un ensemble d'Ã©lÃ©ments sur le repÃ¨re}
\index{AxesBords@\lstinline+AxesBords+}
\end{colourband}

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,1);
CA = Cercle(A,2);
RepereMinMax(-1,4,-1,4,1,1);
AxesBords;
Debut;
trace CA;
Fin;
endfig;
\end{ExempleMP}

Les commandes suivantes permettent de graduer les axes (classiques ou sur le
bord). LÃ&nbsp; encore, ce sont des commandes qui n'ont pas d'arguments ni ne
retournent rien et qui tracent.

\begin{colourband}
\macro|Graduations|\indication{trace un ensemble d'Ã©lÃ©ments sur le repÃ¨re}
\index{Graduations@\lstinline+Graduations+}
\end{colourband}


\begin{colourband}
\macro|GraduationsBords|\indication{trace un ensemble d'Ã©lÃ©ments sur le repÃ¨re}
\index{GraduationsBords@\lstinline+GraduationsBords+}
\end{colourband}

On utilisera la version en cohÃ©rence avec les axes choisis.

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,1);
CA = Cercle(A,2);
RepereMinMax(-1,4,-1,4,1,1);
AxesBords;
GraduationsBords;
Debut;
trace CA;
Fin;
endfig;
\end{ExempleMP}

Si on dÃ©sire marquer les unitÃ©s, \mpgeomdd{} propose la macro suivante (qui n'est
utilisable que si l'on ne place pas les axes sur le bord).
\begin{colourband}
\macro|Unites(Â«unitÃ©Â»)|\indication{trace un ensemble d'Ã©lÃ©ments sur le repÃ¨re}
\begin{description}
  \item[\meta{unitÃ©}:] \typeMP{numeric}, valeur Ã&nbsp; inscrire sur les deux axes.
\end{description}
\index{Unites@\lstinline+Unites+}
\end{colourband}

\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,1);
CA = Cercle(A,2);
RepereMinMax(-1,4,-1,4,1,1);
Axes;
Debut;
  Graduations;
  Unites(2);
  trace CA;
Fin;
endfig;
\end{ExempleMP}

On peut aussi ajouter une grille sur notre repÃ¨re avec la macro suivante.
\begin{colourband}
\macro|GrilleRepere|\indication{trace un ensemble d'Ã©lÃ©ments sur le repÃ¨re}
\index{GrilleRepere@\lstinline+GrilleRepere+}
\end{colourband}
Dans l'exemple suivant, on rÃ¨gle la couleur de la grille avec la commande
\hologo{MetaPost} \lstinline+drawoptions+.
\begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,1);
CA = Cercle(A,2);
RepereMinMax(-1,4,-1,4,1,1);
drawoptions(withcolor LightGrey);
GrilleRepere;
drawoptions();
Axes;
Debut;
  Graduations;
  Unites(1);
  trace CA;
Fin;
endfig;
\end{ExempleMP}
On pourra aussi ajouter un cadre au repÃ¨re avec la macro suivante.
\begin{colourband}
  \macro|CadreRepere|\return{\typeMP{path}}
  \index{CadreRepere@\lstinline+CadreRepere+}
\end{colourband}
  Dans l'exemple suivant, on rÃ¨gle la couleur de la grille avec la commande
  \hologo{MetaPost} \lstinline+drawoptions+.
  \begin{ExempleMP}
input geom2d;
beginfig(1);
A = Point(1,1);
CA = Cercle(A,2);
RepereMinMax(-1,4,-1,4,1,1);
drawoptions(withcolor LightGrey);
GrilleRepere;
drawoptions();
Axes;
Debut;
  Graduations;
  Unites(1);
  trace CA;
  trace CadreRepere withcolor OrangeRed;
Fin;
endfig;
  \end{ExempleMP}

\section{Quelques constantes et fonctions mathÃ©matiques}

\mpgeomdd dÃ©finit deux constantes mathÃ©matiques \lstinline+Pi+ et \lstinline+_E+
\index{Pi@\lstinline+Pi+}\index{_E@\lstinline+_E+} pour les constantes
$\uppi\simeq 3.14159265$ et $\mathrm{e}=2.71828183$.

De plus, le package dÃ©finit quelques fonctions mathÃ©matiques de la variable
rÃ©elle :
\begin{colourband}
\macro|sin(Â«xÂ»)| \index{sin@\lstinline+sin+}
\macro|cos(Â«xÂ»)| \index{cos@\lstinline+cos+}
\macro|tan(Â«xÂ»)| \index{tan@\lstinline+tan+}
\macro|exp(Â«xÂ»)| \index{exp@\lstinline+exp+}
\macro|ln(Â«xÂ»)|  \index{ln@\lstinline+ln+}
\macro|ch(Â«xÂ»)| \index{ch@\lstinline+ch+}
\macro|sh(Â«xÂ»)| \index{sh@\lstinline+sh+}
\macro|th(Â«xÂ»)| \index{th@\lstinline+th+}
\macro|arcsin(Â«xÂ»)| \index{arcsin@\lstinline+arcsin+}
\macro|arccos(Â«xÂ»)| \index{arccos@\lstinline+arccos+}
\macro|arctan(Â«xÂ»)|  \index{arctan@\lstinline+arctan+}
\end{colourband}

\section{ReprÃ©sentation de courbes et de fonctions}

\mpgeomdd{} fournit aussi quelques macros facilitant la reprÃ©sentation simple de
courbes et de fonctions mathÃ©matiques.

\subsection{Fonction de la variable rÃ©elle}

Pour reprÃ©senter une fonction de la variable rÃ©elle, on utilisera la macro
suivante:
\begin{colourband}
  \macro|Representation(Â«fonctionÂ»)(Â«tiÂ»,Â«tfÂ»,Â«nÂ»)|\return{\typeMP{path}}
  \begin{description}
    \item[\meta{fonction}:] est une macro \MP{} qui dÃ©finit la fonction
    mathÃ©matique d'une variable rÃ©elle que l'on souhaite reprÃ©senter ;
    \item[\meta{ti}:] est la valeur (\typeMP{numeric}) initiale de la variable Ã&nbsp;
    partir de laquelle on souhaite construire la reprÃ©sentation de la fonction ;
    \item[\meta{tf}:] est la valeur (\typeMP{numeric}) finale de la variable
    jusqu'Ã&nbsp; laquelle on souhaite construire la reprÃ©sentation de la fonction ;
    \item[\meta{n}:] est le nombre de pas (\typeMP{numeric}) utilisÃ© pour la
    discrÃ©tisation de la reprÃ©sentation.
  \end{description}
  \index{Representation@\lstinline+Representation+}
\end{colourband}

\begin{ExempleMP}
input geom2d;
beginfig(1);
RepereMinMax(-2Pi,2Pi,-1.1,1.1,0.4,1);
Axes;
Debut;
  Graduations;
  trace Representation(cos,-2Pi,2Pi,100);
Fin;
endfig;
  \end{ExempleMP}

\subsection{Courbe paramÃ©trique}

Pour reprÃ©senter une courbe plane dÃ©finie par deux fonctions dÃ©crivant 
l'abscisse et l'ordonnÃ©e en fonction d'un paramÃ¨tre, on utilisera la macro suivante:
\begin{colourband}
  \macro|Courbe(Â«fct_abscisseÂ»)(Â«fct_ordonneeÂ»)(Â«tiÂ»,Â«tfÂ»,Â«nÂ»)|\return{\typeMP{path}}
  \begin{description}
    \item[\meta{fct\_abscisse}:] est une macro \MP{} qui dÃ©finit la fonction
    mathÃ©matique d'une variable rÃ©elle dÃ©crivant l'Ã©volution de l'abscisse des
    points de la courbe que l'on souhaite reprÃ©senter ;
    \item[\meta{fct\_ordonnee}:] est une macro \MP{} qui dÃ©finit la fonction
    mathÃ©matique d'une variable rÃ©elle dÃ©crivant l'Ã©volution de l'ordonnÃ©e des
    points de la courbe que l'on souhaite reprÃ©senter ;
    \item[\meta{ti}:] est la valeur (\typeMP{numeric}) initiale de la variable Ã&nbsp;
    partir de laquelle on souhaite construire la reprÃ©sentation de la fonction ;
    \item[\meta{tf}:] est la valeur (\typeMP{numeric}) finale de la variable
    jusqu'Ã&nbsp; laquelle on souhaite construire la reprÃ©sentation de la fonction ;
    \item[\meta{n}:] est le nombre de pas (\typeMP{numeric}) utilisÃ© pour la
    discrÃ©tisation de la reprÃ©sentation.
  \end{description}
  \index{Courbe@\lstinline+Courbe+}
\end{colourband}

\begin{ExempleMP}
input geom2d;
vardef f_a(expr t)= cos(t) enddef;
vardef f_o(expr t)= sin(2*t) enddef;

beginfig(1);
RepereMinMax(-1.1,1.1,-1.1,1.1,2,2);
Axes;
Debut;
  Graduations;
  trace Courbe(f_a,f_o,-2Pi,2Pi,100);
Fin;
endfig;
  \end{ExempleMP}

  Pour reprÃ©senter une courbe plane dÃ©finie par une fonction dÃ©crivant les
  coordonÃ©es polaires en fonction d'un paramÃ¨tre, on utilisera la macro suivante:
  \begin{colourband}
    \macro|CourbeEnPolaires(Â«fonctionÂ»)(Â«tiÂ»,Â«tfÂ»,Â«nÂ»)|\return{\typeMP{path}}
    \begin{description}
      \item[\meta{fonction}:] est une macro \MP{} qui dÃ©finit la fonction
      mathÃ©matique d'une variable rÃ©elle dÃ©crivant l'Ã©volution des coordonnÃ©es polaires des
      points de la courbe que l'on souhaite reprÃ©senter ;
      \item[\meta{ti}:] est la valeur (\typeMP{numeric}) initiale de la variable Ã&nbsp;
      partir de laquelle on souhaite construire la reprÃ©sentation de la fonction ;
      \item[\meta{tf}:] est la valeur (\typeMP{numeric}) finale de la variable
      jusqu'Ã&nbsp; laquelle on souhaite construire la reprÃ©sentation de la fonction ;
      \item[\meta{n}:] est le nombre de pas (\typeMP{numeric}) utilisÃ© pour la
      discrÃ©tisation de la reprÃ©sentation.
    \end{description}
    \index{CourbeEnPolaires@\lstinline+CourbeEnPolaires+}
  \end{colourband}

  \begin{ExempleMP}
input geom2d;
a := 2;
vardef cardioide(expr t)= a*(1+cos(t)) enddef;
beginfig(1);
RepereMinMax(-1.1,4.1,-2.8,2.8,1,1);
Axes;
Debut;
  Graduations;
  trace CourbeEnPolaires(cardioide,0,2Pi,100);
Fin;
endfig;
    \end{ExempleMP}


\subsection{Champs de vecteurs}

\mpgeomdd fournit des macros pour la reprÃ©sentation des champs de vecteurs.

Tout d'abord, on peut tracer des champs de vecteurs associÃ©s Ã&nbsp; une Ã©quation
diffÃ©rentielle du premier ordre pour une fonction $y$ de la variable $x$:
\[y'=F(x,y).\]
La macro associÃ©e est la suivante:
\begin{colourband}
  \macro|ChampVecteurs(Â«fonctionÂ»)(Â«xÂ»,Â«yÂ»,Â«pxÂ»,Â«pyÂ»,Â«dxÂ»,Â«couleurÂ»)|\return{\typeMP{path}}
  \begin{description}
    \item[\meta{fonction}:] est une macro \MP{} qui dÃ©finit une fonction
    mathÃ©matique de $\R^2$ dans $\R$ ;
    \item[\meta{x}:] est une valeur (\typeMP{numeric}), en unitÃ© \variableGDD{gddU}, qui permet de dÃ©caler la
    grille des vecteurs suivant la direction $x$, les points Ã©tant tous les
    \meta{x}$+i$\meta{px} pour $i$ entier ;
    \item[\meta{y}:] est une valeur (\typeMP{numeric}), en unitÃ© \variableGDD{gddU}, qui permet de dÃ©caler la
    grille des vecteurs suivant la direction $y$, les points Ã©tant tous les
    \meta{y}$+i$\meta{py} pour $i$ entier ;
    \item[\meta{px}:] est la valeur (\typeMP{numeric}), en unitÃ©
    \variableGDD{gddU}, du pas de la grille suivant l'axe $x$ pour
    la reprÃ©sentation des vecteurs ;
    \item[\meta{py}:] est la valeur (\typeMP{numeric}), en unitÃ©
    \variableGDD{gddU}, du pas de la grille suivant l'axe $y$ pour
    la reprÃ©sentation des vecteurs ;
    \item[\meta{dx}:] est la norme (\typeMP{numeric}), en unitÃ©
    \variableGDD{gddU}, des vecteurs du champ de vecteur ;
    \item[\meta{couleur}:] est la couleur (\typeMP{color}) utilisÃ©e pour tracer
    les vecteurs.
  \end{description}
  \index{ChampVecteurs@\lstinline+ChampVecteurs+}
\end{colourband}

Comme cette macro utilise la macro \lstinline+drawarrow+ de \MP{}, il faudra
jouer avec le paramÃ¨tre \lstinline+ahlength+ pour rÃ©gler la taille du triangle
des flÃ¨ches (voir~\cite{ctan-metapost}).

\begin{ExempleMP}
input geom2d;
vardef F(expr x,y) = x - 2 * x * y enddef;
vardef f(expr x) = 1/2 + a * exp(- x*x) enddef;
beginfig(1);
RepereMinMax(-2.5,2.5,-2.8,2.8,1,1);
Axes;
Debut;
Graduations;
ahlength := 1;
ChampVecteurs(F,0,0,0.2,0.2,0.1,0.5white);
% Courbes intÃ©grales
for n = 0 upto 16:
    a := (n/2) - 4;
    trace Representation(f,-2.5,2.5,50)
    avecCrayon(1,(0.7,0.2,0.2));
endfor
Fin;
endfig;
  \end{ExempleMP}

Sur le mÃªme modÃ¨le, on peut tracer des champs de vecteurs d'une fonction de
$\R^2$ dans $\R^2$. 
La macro associÃ©e est la suivante:
\begin{colourband}
  \macro|ChampVecteursDD(Â«fonctionÂ»)(Â«xÂ»,Â«yÂ»,Â«pxÂ»,Â«pyÂ»,Â«dxÂ»,Â«couleurÂ»)|\return{\typeMP{path}}
  \begin{description}
    \item[\meta{fonction}:] est une macro \MP{} qui dÃ©finit une fonction
    mathÃ©matique de $\R^2$ dans $\R^2$ (donc qui retourne une \typeMP{pair}) ;
    \item[\meta{x}:] est une valeur (\typeMP{numeric}), en unitÃ© \variableGDD{gddU}, qui permet de dÃ©caler la
    grille des vecteurs suivant la direction $x$, les points Ã©tant tous les
    \meta{x}$+i$\meta{px} pour $i$ entier ;
    \item[\meta{y}:] est une valeur (\typeMP{numeric}), en unitÃ© \variableGDD{gddU}, qui permet de dÃ©caler la
    grille des vecteurs suivant la direction $y$, les points Ã©tant tous les
    \meta{y}$+i$\meta{py} pour $i$ entier ;
    \item[\meta{px}:] est la valeur (\typeMP{numeric}), en unitÃ©
    \variableGDD{gddU}, du pas de la grille suivant l'axe $x$ pour
    la reprÃ©sentation des vecteurs ;
    \item[\meta{py}:] est la valeur (\typeMP{numeric}), en unitÃ©
    \variableGDD{gddU}, du pas de la grille suivant l'axe $y$ pour
    la reprÃ©sentation des vecteurs ;
    \item[\meta{dx}:] est la norme (\typeMP{numeric}), en unitÃ©
    \variableGDD{gddU}, des vecteurs du champ de vecteur ;
    \item[\meta{couleur}:] est la couleur (\typeMP{color}) utilisÃ©e pour tracer
    les vecteurs.
  \end{description}
  \index{ChampVecteursDD@\lstinline+ChampVecteursDD+}
\end{colourband}

  \begin{ExempleMP}[sidebyside=false]
input geom2d;
gddXlabel := "$\theta$";
gddYlabel := "$\dot\theta$";
numeric b,c;
b:=0.5;
c=1.0;

vardef F(expr x,y) = (y,-b*y-c*sin(x)) enddef;

beginfig(1);
Repere(10,6,2,4,2,2);
Axes;
Unites(1);
Debut;
Graduations;
trajectoire := CourbeDat("solution0",0);
ChampVecteursDD(F,0.5,0.5,0.2,0.2,0.15,0.5white);
trace trajectoire  avecCrayon(1,(0.7,0.2,0.2));
pointe Point(0,0) avecCrayon(1,(0.7,0.2,0.2));
pointe Point(3.1415,0) avecCrayon(1,(0.7,0.2,0.2));
Fin;
endfig;
      \end{ExempleMP}




\section{Couleurs \texttt{svgnames}}

\begin{mplibcode}
input exemples/svgnames/palette.mp
\end{mplibcode}



\pagestyle{empty}
\begin{landscape}
  \section{Galerie}
  \subsection{RepÃ¨re et tangentes extÃ©rieures}
  \begin{minipage}{0.5\linewidth}
    \begin{center}
      \begin{mplibcode}
        input exemples/cercles/cercles2.mp;
      \end{mplibcode}
    \end{center}
  \end{minipage}
  \begin{minipage}{0.5\linewidth}
    \lstinputlisting[basicstyle=\ttfamily\small]{exemples/cercles/cercles2.mp}
  \end{minipage}
\end{landscape}

\begin{landscape}
  \subsection{Vecteur dans un repÃ¨re}

  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/reperes/reperes2.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/reperes/reperes2.mp}
  \end{multicols}
\end{landscape}

\begin{landscape}
  \subsection{ThÃ©orÃ¨me de Pascal}

  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/divers/pascalline.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/divers/pascalline.mp}
  \end{multicols}
\end{landscape}

\begin{landscape}
  \subsection{Hyperbole}

  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/coniques/hyper.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/coniques/hyper.mp}
  \end{multicols}
\end{landscape}

\begin{landscape}
  \subsection{AstroÃ¯de comme enveloppe de droites}

  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/courbes/cp01.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/courbes/cp01.mp}
  \end{multicols}
\end{landscape}


\begin{landscape}
  \subsection{Courbe de Lissajous}

  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/courbes/cp02.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/courbes/cp02.mp}
  \end{multicols}
\end{landscape}

\begin{landscape}
  \subsection{Ã‰tude de fonctions}

  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/courbes/cp05.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/courbes/cp05.mp}
  \end{multicols}
\end{landscape}

\begin{landscape}
  \subsection{Le bicorne}

  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/courbes/cp08.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/courbes/cp08.mp}
  \end{multicols}
\end{landscape}

\begin{landscape}
  \subsection{Une fonction et ses dÃ©rivÃ©es}

  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/fonctions/fonction2.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/fonctions/fonction2.mp}
  \end{multicols}
\end{landscape}

\begin{landscape}
  \subsection{CardioÃ¯de}

  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/polaires/pol02.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/polaires/pol02.mp}
  \end{multicols}
\end{landscape}

\begin{landscape}
  \subsection{Axe de similitude}
  \begin{center}
    \begin{mplibcode}
      input exemples/cercles/axessimilitude.mp;
    \end{mplibcode}
  \end{center}
  \begin{multicols}{2}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/cercles/axessimilitude.mp}
  \end{multicols}
\end{landscape}


\begin{landscape}
  \subsection{TracÃ© d'une cubique}
  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/cubiques/K001.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/cubiques/K001.mp}
  \end{multicols}
\end{landscape}

\begin{landscape}
  \subsection{Apollonius}

  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/triangles/apollonius.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/triangles/apollonius.mp}
  \end{multicols}
\end{landscape}

\begin{landscape}
  \subsection{Ã‰pure d'ogive}

  \begin{multicols}{2}
    \begin{center}
      \begin{mplibcode}
        input exemples/construction/ogiveentiers.mp;
      \end{mplibcode}
    \end{center}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/construction/ogiveentiers.mp}
  \end{multicols}
\end{landscape}

\begin{landscape}
  \subsection{Triangle orthique et problÃ¨me de Fagnano}

  Figure 21 de~\cite{toeplitz}.
  \begin{center}
    \begin{mplibcode}
      input exemples/triangles/pedale.mp;
    \end{mplibcode}
  \end{center}
  \begin{multicols}{2}
    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/triangles/pedale.mp}
  \end{multicols}
\end{landscape}
\newpage

\begin{landscape}
  \subsection{ChaÃ®ne de Pappus}

  La chaÃ®ne de Pappus par inversion gÃ©omÃ©trique.
  \begin{multicols}{2}
    \begin{mplibcode}
      input exemples/cercles/pappuschain.mp;
    \end{mplibcode}

    \lstinputlisting[basicstyle=\ttfamily\scriptsize]{exemples/cercles/pappuschain.mp}
  \end{multicols}
\end{landscape}
\newpage
\section{Historique}
\begin{description}
  \item[mai 2025:] Ajout de la macro \lstinline+pointes+ pour le pointage dâ€™une
  liste de points. Ajout des macros \lstinline+ParametrePointTaille+,
  \lstinline+ParametrePointCouleur+, \lstinline+ParametrePointeType+ et
  \lstinline+ParametreConiqueCoef+ pour modifier les valeurs des variables
  globales. Ajout de la commande \lstinline|gddClip|. Traduction des macros, de
  la documentation et des exemples en anglais. 
  \item[25 fÃ©vrier 2025:] ajout de la macro \lstinline|PointIntersection|. Ajout
  de la macro \lstinline+HyperboleF+. Quelques bugs, et amÃ©lioration de la
  documentation. 
  \item[fÃ©vrier 2025:] ajout de la macro \lstinline+hachure+ ainsi que la macro
  \lstinline+SchemaHachure+. Correction dâ€™un bug dans la macro
  \lstinline+EllipseFD+. Version 1.2.
  \item[dÃ©cembre 2024:] ajout de la macro \lstinline+DroiteParallele+. 
  \item[novembre 2024:] ajout de la macro \lstinline+EllipseFD+ ainsi que le
  stockage des directrices dans le type \typeGDD{ellipse}. Correction de la
  commande \lstinline+gddLabel+. Ajout de lâ€™exemple de la chaÃ®ne de Pappus.  
  \item[21 octobre 2024:] corrections de Quark67 (merci Ã&nbsp; lui) sur la
  documentation et modifications suite Ã&nbsp; ses remarques.
  \lstinline+DemieHyperbole+ devient 
  \lstinline+DemiHyperbole+ (sans compatibilitÃ©). CrÃ©ation de deux nouveaux
  types 
  de pointage de \typeGDD{point} : croix et disque (voir commande \lstinline+pointe+).
  \item[13 octobre 2024:] publication de la version 1.0 sur le CTAN.  
\end{description}

\printbibliography
\addcontentsline{toc}{section}{RÃ©fÃ©rences}%Including it as a chapter
\printindex
\addcontentsline{toc}{section}{Index}%Including it as a chapter


\end{document}
</pre></body></html>