% DR, 4-5/7/1995

\documentclass[a4paper]{article}
\usepackage{mflogo,% definit \MF et \MP -> a utiliser avec la derniere
                   %    version de la police `logo', incluant P et S.
            fullpage}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{french}
\begin{document}

\def\pst{\texttt{PSTricks}}
\def\PS{\emph{PostScript}}

\title{\MP{} et le probl\`eme de Truchet}
\author{Denis Roegel}
\date{5 juillet 1995}
\maketitle
\thispagestyle{empty}

{\small

Le probl\`eme de Truchet devait \^etre r\'esolu soit par l'emploi
de macros \pst, soit par une solution \PS\ directe. 
Je n'ai suivi aucune de ces voies, non pas parce
qu'elles m'apparaissaient difficiles, mais parce que je ne pouvais
pas m'investir dans ces langages. J'ai pr\'ef\'er\'e profiter de cet
exercice pour perfectionner ma connaissance de \MP. Je crois qu'il
vaut mieux ma\^\i triser un langage unique, 
plut\^ot que d'en conna\^\i tre beaucoup superficiellement.

\bigskip
\MP{}\footnote{\MP{} a \'et\'e d\'evelopp\'e par John~D. Hobby, 
ATT Bell Laboratories, USA. 
Le manuel et d'autres documents 
sont disponibles sur CTAN ainsi que sur \texttt{http://www.loria.fr/tex}.}
est un langage graphique d\'eriv\'e de \MF{}
et partage donc un certain nombre de caract\'eristiques avec \pst/\TeX\null. 
C'est un \emph{macrolangage}---tout
comme \TeX{}---et un programme \MP{} g\'en\`ere des fichiers 
\PS{} pouvant \^etre 
r\'eutilis\'es par \TeX\ ou \'eventuellement un autre logiciel.
\pst{} g\'en\`ere aussi du \PS{} mais les commandes y sont directement
\'ecrites dans le fichier \texttt{.dvi}. Parmi les acquis de \MF, 
on trouve en particulier la structure d\'eclarative :
il est possible de sp\'ecifier les coordonn\'ees des points cl\'es
par des ensembles d'\'equations lin\'eaires. Avec un peu d'habitude,
cette structure d\'eclarative devient tr\`es naturelle et accro\^\i t
notablement la souplesse des figures produites.

\bigskip
Ma solution au probl\`eme de Truchet n'est pas un exercice \MP{}
typique, en ce sens qu'elle n'utilise pas ces potentialit\'es
d\'eclaratives. J'ai plut\^ot tir\'e profit des
caract\'eristiques suivantes :

\begin{itemize}
\item la possibilit\'e de d\'eclarer des tableaux de dimension
quelconque, dont le nombre d'\'el\'ements n'est pas connu \`a l'avance ;
par exemple \verb|numeric tilecolor[][][]| d\'eclare un tableau de nombres
(entiers ou r\'eels) qui pourront \^etre acc\'ed\'es par trois index ;
ceci n'est qu'un exemple, car en g\'en\'eral, le nom d'une variable
de tableau est compos\'e de \emph{tags} et de \emph{suffixes}, un peu
comme les param\`etres d'une macro \TeX\ peuvent \^etre s\'epar\'es
par des d\'elimiteurs\ldots ;

\item la pr\'esence des structures de contr\^ole usuelles : 
      \texttt{for}, \texttt{forever}, \texttt{exitif}, \texttt{endfor} ;

\item la g\'en\'eration de nombres al\'eatoires (distributions uniforme et
      normale) ;

\item le trac\'e de courbes de B\'ezier 
passant par certains points et soumis \`a des
contraintes ; les courbes sont des objets de type \texttt{path},
elles peuvent subir diverses transformations (translations, rotations, 
d\'eformations) et \^etre colori\'ees, par d\'efaut dans le syst\`eme RGB ;

\item le remplissage de zones d\'elimit\'ees par une courbe 
de type \texttt{path} ;
\item le d\'ecoupage en \emph{macros} pour l'organisation des 
      fonctionnalit\'es et en particulier la possibilit\'e d'\'evaluer
      ou non les param\`etres d'une commande (type \texttt{expr}
      ou \texttt{text}).
\end{itemize}

Dans la solution que je propose, un pavage consiste en un tableau de pav\'es
et pour chacun d'eux, la donn\'ee de
son orientation et la coloration de ses lignes et
parties. Les algorithmes employ\'es sont les suivants :

\begin{description}
\item[lignes] leur coloriage repose sur une op\'eration plus simple,
le \emph{suivi} d'une ligne : une ligne encore non colori\'ee est choisie et
parcourue d'un bout \`a l'autre ; on change de couleur 
\`a chaque nouvelle ligne.
\item[surfaces] leur coloriage repose sur l'observation que deux
couleurs suffisent \`a colorier tout pavage du type consid\'er\'e ; 
l'algorithme consiste \`a colorier un premier pav\'e et \`a diffuser ses
couleurs sur ses voisins, jusqu'\`a avoir rempli tout le pavage ;
le remplissage est donc r\'ealis\'e pav\'e par pav\'e 
au sein m\^eme de \MP{} ; il eut \'et\'e possible de d\'efinir une macro \MP{}
prenant en argument un point d'un pavage, construisant la courbe bordant
la r\'egion s\'electionn\'ee et remplissant alors cette r\'egion avec
les commandes de \MP{} ; une telle macro peut s'av\'erer int\'eressante
dans un cas plus g\'en\'eral, mais pas pour un probl\`eme aussi simple
et abord\'e avec une structure de tableau comme j'ai choisi de le faire.
\end{description}

\MP{} offre de tr\`es nombreuses autres possibilit\'es, 
en particulier l'int\'egration
de portions de texte dans les figures gr\^ace \`a l'ex\'ecution de
sous-processus \TeX\null. Les sorties g\'en\'er\'ees sont des fichiers \PS,
pouvant \^etre inclus directement par \verb|\includegraphics| dans un fichier
\LaTeX, sans que des calculs complexes doivent encore 
\^etre faits par \TeX\null.

}

\end{document}