X-Git-Url: https://melusine.eu.org/syracuse/G/git/?p=mp-gdd.git;a=blobdiff_plain;f=doc%2Fmp-gdd-doc.tex;h=0a2515faa919514a8b96739f08cf1b3732be8535;hp=d92b03ad26b87d85f77286f785777f894f4dc3d7;hb=HEAD;hpb=eee9c7246fae994a97b84e63bbf9705a9ea490f1 diff --git a/doc/mp-gdd-doc.tex b/doc/mp-gdd-doc.tex index d92b03a..0a2515f 100644 --- a/doc/mp-gdd-doc.tex +++ b/doc/mp-gdd-doc.tex @@ -1,20 +1,98 @@ -\documentclass{article} +\documentclass[a4paper]{article} \usepackage[utf8]{inputenc} \usepackage[charter]{mathdesign} \usepackage[margin=2.5cm]{geometry} \usepackage{xspace} +\usepackage[svgnames]{xcolor} \usepackage{multicol} \usepackage{listings} +\usepackage{showexpl} % examples \usepackage{mflogo} \usepackage[frenchb]{babel} +\usepackage{tikz} +\usepackage{url} + +\renewcommand{\ttdefault}{lmtt} + + +\definecolor{hellgelb}{rgb}{1,1,0.85} +\definecolor{colKeys}{rgb}{0,0,1} +\definecolor{colIdentifier}{rgb}{0,0,0} +\definecolor{colComments}{rgb}{1,0,0} +\definecolor{colString}{rgb}{0,0.5,0} + + +\lstset{% + language=metapost,% + float=hbp,% + basicstyle=\ttfamily\small, % + identifierstyle=\color{DarkSlateGrey}, % + keywordstyle=\color{DarkBlue}\itshape, % + stringstyle=\color{Green}, % + commentstyle=\color{colComments}, % + columns=flexible, % + tabsize=4, % + frame=single, % + extendedchars=true, % + showspaces=false, % + showstringspaces=false, % + numbers=left, + numbersep=0.8em, + numberstyle=\tiny, % + breaklines=true, % + breakautoindent=true, + captionpos=b, + xleftmargin=1em, + sensitive=true, + morekeywords=[7]{Point,Vecteur}, + keywordstyle=[7]\color{FireBrick}, + morekeywords=[8]{gddO,gddA,gddB,gddC,gddT}, + keywordstyle=[8]\color{Sienna}, + morekeywords=[9]{PointImp}, + keywordstyle=[9]\color{Olive} +} +\lstset{explpreset={pos=t,wide=false,rframe={},preset=\centering}} +\lstdefinestyle{syntax}{backgroundcolor=\color{blue!15},numbers=none,xleftmargin=0pt,xrightmargin=0pt, + frame=single} +\lstdefinestyle{code}{backgroundcolor=\color{red!15},%numbers=left, + xleftmargin=0pt,xrightmargin=0pt, + frame=single} + \newcommand\mpgdd{\texttt{mpgdd}\xspace} \newcommand\fichier[1]{\texttt{#1}} \newcommand\variable[1]{\texttt{#1}} \newcommand\typeMP[1]{\texttt{#1}} \newcommand\typeGDD[1]{\texttt{#1}} +\newcommand\foncGDD[1]{\texttt{#1}} \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-gdd}\\ +{\large Paquet \MP{} pour des figures de géométrie plane}\\[1cm] +\parbox{0.6\textwidth}{ +\includegraphics[scale=0.86]{figure.pdf} +}\hfill +\parbox{0.4\textwidth}{\Large\raggedleft + \textbf{Contributeurs}\\ + Maxime \textsc{Chupin}\\ + Jean-Michel \textsc{Sarlat} +} +\vfill +\begin{center} +Version 0.1 du 25 septembre 2011\\ +\url{http://melusine.eu.org/syracuse/G/mp-gdd/} +\end{center} +%% == Page de garde ==================================================== +\newpage \section{Introduction} @@ -47,15 +125,41 @@ fonctions. Il est à noté aussi que certaines fonctions s'appuient sur l'extension \fichier{graph.mp} présent dans toutes les bonnes distributions \TeX. +\section{Objectif} + +\mpgdd 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 +à 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 à dépasser ce mode de +description, en particulier pour éviter d'avoir à 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. + +\textbf{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 à des commandes \MP{} ou à des \emph{macros +intermédiaires} pour décrire une figure. Cela évoluera sans doute +avec le temps, le temps de trouver une syntaxe satisfaisante... + \section{Principe général de fonctionnement} -\mpgdd utilise des tables comme structure principale. -Chaque objet est numéroté via le compteur \variable{gddO}, son -type\footnote{Les types son propres à \mpgdd et seront décrit plus - tard.} est stocké dans la table \variable{gddT[]} à la place -\variable{gddT[gddO]}. Les propriétés des objets sont définies dans, là -encore, des tables de type \typeMP{numeric} qui sont -\variable{gddA[]}, \variable{gddB[]},\dots,\variable{gddF[]}. +\mpgdd utilise des tables comme structure principale. Chaque objet est +numéroté via le compteur \variable{gddO}, son type\footnote{Les types +sont propres à \mpgdd et seront décrits plus tard.} est stocké dans +la table \variable{gddT[]} à la place \variable{gddT[gddO]}. Les +propriétés des objets sont définies dans, là encore, des tables de +type \typeMP{numeric} qui sont \variable{gddA[]}, \variable{gddB[]}, +\dots, \variable{gddF[]}. Par exemple, pour un \typeGDD{Point} (type \mpgdd), la première coordonnée se trouve dans \variable{gddA[]} et la seconde dans \variable{gddB[]} @@ -66,7 +170,9 @@ Il y a deux tables particulières \variable{gddP[]} qui est du type \typeMP{string}. Nous verrons plus tard quelle est leur utilité. Bien entendu, lors d'une utilisation classique de \mpgdd, l'appel à -toutes ces tables n'est pas chose courante. +toutes ces tables n'est pas chose courante. Les fonctions que nous +allons décrire dans la suite de ce documents permettent de ne pas +avoir recours trop précisément à cette machinerie. \section{Les types} @@ -79,10 +185,10 @@ stocké dans la table \variable{gddT[]}, et les tables \variable{gddA[]} Nous allons ici décrire chaque type de l'extension \mpgdd ainsi que leurs propriétés respectives. -\paragraph{Le type \typeGDD{point}} Ce type correspond au point de +\paragraph{Le type \typeGDD{Point}} Ce type correspond au point de l'espace euclidien. Pour être plus clair voici la fonction principale pour créer un tel objet : - +% \begin{lstlisting} vardef Point(expr a,b) = gddT[incr gddO] = "point"; @@ -90,6 +196,40 @@ vardef Point(expr a,b) = enddef; \end{lstlisting} +Cette fonction «retourne» le compteur \variable{gdd0} et crée dans la +table de type une entrée \typeGDD{point} et les attributs (coordonnées) +correspondants \variable{a} et \variable{b} dans les tables +\variable{gddA} et \variable{gddB}. + +Avec un tel type de fonctionnement, la plupart des manipulations se +fait sur des \typeMP{numeric}s. En effet, pour déclarer un +\typeGDD{point}, il suffit d'écrire +\begin{lstlisting} +A = Point(2,3); +\end{lstlisting} +\variable{A} prend alors la valeur courante de \variable{gddO}. C'est +l'identifiant du point. + +\paragraph{Le type \typeGDD{Vecteur}} Ce type correspond aux vecteurs +définis à l'aide de deux points de l'espace euclidien. La fonction +créatrice d'un tel objet est celle-ci +% +\begin{lstlisting} +vardef Vecteur(expr a,b) = + save n; n = incr gddO; + gddT[n] = "vecteur"; gddA[n] = PointImp(a); gddB[n] = PointImp(b); n +enddef; +\end{lstlisting} +Cette fonction a la même architecture que celle correspondante au +\typeGDD{point} : elle retourne la valeur courante de \variable{gddO} +après incrémentation, puis affecte le type \typeGDD{vecteur} à +l'entrée correspondante dans la table \variable{gddT}. Par contre, les +entrées des tables \variable{gddA} et \variable{gddB} sont +différentes. En effet, on stock ici les identifiants des points +formant le vecteur. La fonction \foncGDD{PointImp} s'assure que +l'entrée correspond bien à un identifiant de point et non pas une +\typeMP{pair} \MP. Elle sera décrite plus en détail ultérieurement. + \section{Fonctions générales}