\documentclass[12pt]{article}
\usepackage[frenchb]{babel}
\usepackage[latin1]{inputenc}
\usepackage[dvips,a4paper,margin=1.5cm]{geometry}
\usepackage[dvips]{graphicx}
\usepackage{amsmath,pst-all}
\input christ5.tex
\title{Des pavages en MetaPost}
\author{Christophe Poulain}
\date{\today}
\begin{document}
\maketitle
\tableofcontents
\section{Introduction}
En parcourant le CD-ROM \og{}Pour la Science 1996-2002\fg{} que
Jean-Michel {\sc Sarlat} m'a fait découvrir ; je suis tombé, dans le
numéro 272, sur un article de Ian
{\sc Stewart} qui traite des pavages en toute simplicité. Intrigué par
les figures obtenues et pour le plaisir, je me suis mis dans l'idée de
les obtenir à l'aide de MetaPost.
\section{Cas n°1 : dans un carré}
\subsection{Le début\ldots}
\compo{1}{pavages}{1}{Si on considère le carré unité $ABCD$ (dans le
sens trigonométrique) ci-contre, on peut obtenir des pavages assez
simplement :
}\par\vspace{5mm}\par
\begin{itemize}
\item[$\bullet$] on considère une courbe $\cal C$ reliant $A$ à $C$,
\item[$\bullet$] puis on construit l'image de la courbe $\cal C$ par
la rotation de centre $B$, d'angle $-\dfrac{\pi}{2}$ ; l'image du
symétrique, par rapport à la droite $(BC)$ de la courbe $\cal C$ par
la rotation de centre $B$ et d'angle $-\dfrac{\pi}{2}$ et enfin l'image
de la courbe $\cal C$ par la rotation de centre $B$ et d'angle
$\dfrac{\pi}{2}$.
\end{itemize}
\par Un petit dessin valant mieux qu'un long discours, voilà ce que ça
donne.
\begin{center}
\hspace*{2cm}\includegraphics{pavagescarreexemples.10}\rnode{A}{}
\hfill\rnode{B}{}\includegraphics{pavagescarreexemples.11}\rnode{C}{}
\hfill\rnode{D}{}\includegraphics{pavagescarreexemples.12}\hspace*{2cm}
\end{center}
\ncline[linewidth=1mm]{->}{A}{B}
\ncline[linewidth=1mm]{->}{C}{D}
j'ai choisi la même présentation que dans le magazine ; à savoir
indiquer par des couleurs et des traçages différents, ce qui apparaît
dans la nouvelle construction.
\subsection{...et la \og{}généralisation\fg{}}
On trouvera ci-dessous les figures des étapes 3, 4 et 5. Une mise à
l'échelle est nécessaire pour la représentation.
\\On trouvera, en annexe, la macro permettant ces constructions.
$$\includegraphics[scale=0.75]{pavagescarreexemples.13}$$
$$\includegraphics[scale=0.5]{pavagescarreexemples.14}$$
$$\includegraphics[scale=0.5]{pavagescarreexemples.15}$$
\section{Cas n°2 : le triangle équilatéral}
\subsection{Le début...}
\compo{2}{pavages}{1}{Si on considère le triangle équilatéral unité
$ABC$ (dans le sens trigonométrique),
on peut obtenir des pavages assez simplement :}
\par\vspace{5mm}\par
\begin{itemize}
\item[$\bullet$] on considère une courbe $\cal C$ reliant $A$ à $B$,
\item[$\bullet$] puis on construit l'image de la courbe $\cal C$ par
la symétrie d'axe $(AB)$ ; l'image de la courbe $\cal C$ par la
rotation de centre le symétrie de l'isobarycentre de $ABC$ par rapport
à la droite $(AB)$, et d'angle $-\dfrac{2\pi}3$ ; l'image de la courbe
$\cal C$ par la rotation de centre le symétrie de l'isobarycentre de
$ABC$ par rapport à la droite $(AB)$, et d'angle $\dfrac{2\pi}3$.
\end{itemize}
\par Un petit dessin valant mieux qu'un long discours, voilà ce que ça
donne. ({\em les échelles sont différentes afin de bien faire
comprendre ce qui se passe.})
\begin{center}
\hspace*{2cm}\includegraphics{pavagesequiexemples.1}\rnode{A}{}\hfill
\rnode{B}{}\includegraphics{pavagesequiexemples.2}\rnode{C}{}\hfill
\rnode{D}{}\includegraphics{pavagesequiexemples.3}\hspace*{2cm}
\end{center}
\ncline[linewidth=1mm]{->}{A}{B}
\ncline[linewidth=1mm]{->}{C}{D}
\subsection{...et la "généralisation"}
On trouvera ci-dessous les figures des étapes 3, 4 et 5 avec toujours
une mise à l'échelle et la macro en annexe.
$$\includegraphics[scale=0.75]{pavagesequiexemples.4}$$
$$\includegraphics[scale=0.5]{pavagesequiexemples.5}$$
$$\includegraphics[scale=0.5]{pavagesequiexemples.6}$$
\appendix
\section{Annexe}
\subsection{Macro pour le pavage à l'aide d'un carré}
\begin{verbatim}
%%D'apres 'Pour la science' n°272 Avril 2000 - p106

input geometriesyr12;

vardef pavages(expr chemin,tour,coul)=
  save $;
  picture $;
  pair A,B,C,D;
  A=u*(0,0);
  B=u*(1,0);
  C=u*(1,1);
  D=u*(0,1);
  path especes;
  especes=chemin--rotation(chemin,B,-90)--reverse(rotation
(symetrie(chemin,B,C),B,-90))--rotation(chemin,B,90)--cycle;
  if tour=0:
    $=image(
      trace chemin;
      );
  elseif tour=1:
    $=image(
      fill especes withcolor coul;
      trace especes;
      A:=A shifted(u*(0,-1));
      B:=B shifted(u*(1,-1));
      C:=C shifted(u*(1,0));
      );
  elseif tour>=2:
    $=pavages(chemin,tour-1,coul);
    $:=image(
      trace $;
      trace symetrie($,B,C);
      trace rotation(symetrie($,B,C),B,-90);
      trace rotation($,B,90);
      A:=A shifted(u*(0,-(2**(tour-1))));
      B:=B shifted(u*(2**(tour-1),-(2**(tour-1))));
      C:=C shifted(u*(2**(tour-1),0));
      );
  fi;
  $
enddef;

vardef pavagescar(expr chemin,tour,coul)=
  save $;
  picture $;
  pair A,B,C,D;
  A=u*(0,0);
  B=u*(1,0);
  C=u*(1,1);
  D=u*(0,1);
  if tour=0:
    $=image(
      trace chemin;
      trace A--B--C--D--cycle dashed dashpattern(on12bp off6bp on3bp
      off 6bp) withcolor gris;
      );
  elseif tour=1:
    $=image(
      trace chemin;
      drawoptions(dashed evenly);
      trace rotation(chemin,B,-90);
      trace reverse(rotation(symetrie(chemin,B,C),B,-90));
      trace rotation(chemin,B,90);
      drawoptions();
      A:=A shifted(u*(0,-1));
      B:=B shifted(u*(1,-1));
      C:=C shifted(u*(1,0));
      trace A--B--C--D--cycle dashed dashpattern(on12bp off6bp on3bp
      off 6bp) withcolor gris;
      trace iso(A,D)--iso(B,C) dashed dashpattern(on12bp off6bp on3bp
      off 6bp) withcolor gris;
      trace iso(A,B)--iso(C,D) dashed dashpattern(on12bp off6bp on3bp
      off 6bp) withcolor gris;
      );
  elseif tour>=2:
    $=image(
      trace pavages(chemin,tour-1,coul);
      drawoptions(dashed evenly);
      trace symetrie(pavages(chemin,tour-1,coul+0.5blanc),B,C);
      trace rotation(symetrie(pavages(chemin,tour-1,coul+0.5blanc)
,B,C),B,-90);
      trace rotation(pavages(chemin,tour-1,coul+0.5blanc),B,90);
      drawoptions();
      A:=A shifted(u*(0,-(2**(tour-1))));
      B:=B shifted(u*(2**(tour-1),-(2**(tour-1))));
      C:=C shifted(u*(2**(tour-1),0));
      );
    trace A--B--C--D--cycle dashed dashpattern(on12bp off6bp on3bp off
    6bp) withcolor gris;
    trace iso(A,D)--iso(B,C) dashed dashpattern(on12bp off6bp on3bp
    off 6bp) withcolor gris;
    trace iso(A,B)--iso(C,D) dashed dashpattern(on12bp off6bp on3bp
    off 6bp) withcolor gris;
  fi;
  $
enddef;

\end{verbatim}

\subsection{Macro pour le pavage à l'aide d'un triangle équilatéral}
\begin{verbatim}
%%D'apres 'Pour la science' n°272 Avril 2000 - p106

input geometriesyr12;

vardef pavagesequi(expr chemin,tour,coul,coull)=
  save $;
  picture $;
  pair A,B,C;
  A=u*(0,0);
  B=u*(1,0);
  C=rotation(B,A,60);
  path especes;
  especes=chemin--rotation(chemin,symetrie(iso(A,B,C),A,B),-120)--
rotation(chemin,symetrie(iso(A,B,C),A,B),120)--cycle;
  if tour=0:
    $=image(
      trace chemin;
      );
  elseif tour=1:
    $=image(
      fill especes withcolor coul;
      fill (chemin--symetrie(chemin,iso(A,B))--cycle) withcolor coull;
      trace especes;
      trace symetrie(chemin,iso(A,B));
      A:=symetrie(C,A);
      B:=symetrie(C,B);
      );
  elseif tour>=2:
    $=pavagesequi(chemin,1,coul,coull);
    for k=2 upto tour:
      $:=image(
        trace $;
        trace rotation($,symetrie(iso(A,B,C),A,B),-120);
        trace rotation($,symetrie(iso(A,B,C),A,B),120);
        trace symetrie($,iso(A,B));
        A:=symetrie(C,A);
        B:=symetrie(C,B)
        );
    endfor;
  fi;
  $
enddef;

vardef pavagesequiqui(expr chemin,tour,coul,coull)=
  save $;
  picture $;
  pair A,B,C;
  A=u*(0,0);
  B=u*(1,0);
  C=rotation(B,A,60);
  path especes;
  especes=chemin--rotation(chemin,symetrie(iso(A,B,C),A,B),-120)--
rotation(chemin,symetrie(iso(A,B,C),A,B),120)--cycle;
  if tour=0:
    $=image(
      trace chemin;
      );
  elseif tour=1:
    $=image(
      trace chemin;
      drawoptions(dashed evenly);
      trace rotation(chemin,symetrie(iso(A,B,C),A,B),-120);
      trace rotation(chemin,symetrie(iso(A,B,C),A,B),120);
      trace symetrie(chemin,iso(A,B));
      drawoptions();
      A:=symetrie(C,A);
      B:=symetrie(C,B);
      );
  elseif tour=2:
    $=image(
      fill especes withcolor coul;
      fill (chemin--symetrie(chemin,iso(A,B))--cycle) withcolor coull;
      trace especes;
      trace symetrie(chemin,iso(A,B));
      A:=symetrie(C,A);
      B:=symetrie(C,B);
      );
    $:=image(
      trace $;
      drawoptions(dashed evenly);
      trace rotation(pavagesequi(chemin,1,coul+0.5blanc,coull+0.5blanc)
,symetrie(iso(A,B,C),A,B),-120);
      trace rotation(pavagesequi(chemin,1,coul+0.5blanc,coull+0.5blanc)
,symetrie(iso(A,B,C),A,B),120);
      trace symetrie(pavagesequi(chemin,1,coul+0.5blanc,coull+0.5blanc),iso(A,B));
      drawoptions();
      A:=symetrie(C,A);
      B:=symetrie(C,B);
      );
  elseif tour>=3:
    $=pavagesequi(chemin,1,coul,coull);
    for k=2 upto tour-1:
      $:=image(
        trace $;
        trace rotation($,symetrie(iso(A,B,C),A,B),-120);
        trace rotation($,symetrie(iso(A,B,C),A,B),120);
        trace symetrie($,iso(A,B));
        A:=symetrie(C,A);
        B:=symetrie(C,B);
        );
    endfor;
    $:=image(
      trace $;
      drawoptions(dashed evenly);
      trace rotation(pavagesequi(chemin,tour-1,coul+0.5blanc,coull+0.5blanc)
,symetrie(iso(A,B,C),A,B),-120);
      trace rotation(pavagesequi(chemin,tour-1,coul+0.5blanc,coull+0.5blanc)
,symetrie(iso(A,B,C),A,B),120);
      trace symetrie(pavagesequi(chemin,tour-1,coul+0.5blanc,coull+0.5blanc)
,iso(A,B));
      drawoptions();
      A:=symetrie(C,A);
      B:=symetrie(C,B);
      );
  fi;
  $:=image(
    trace $;
    trace A--B--C--cycle dashed dashpattern(on12bp off6bp on3bp
    off6bp) withcolor gris;
    trace iso(A,B)--iso(B,C)--iso(C,A)--cycle dashed
    dashpattern(on12bp off6bp on3bp off6bp) withcolor gris;
    );
  $
enddef;

\end{verbatim}

\end{document}
