% 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}