\documentclass[a4paper,11pt]{article}
\textheight 23 cm
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\usepackage{latexsym}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{makeidx}
\usepackage{times}
%\usepackage{graphics}
\usepackage{pst-plot}
\usepackage{ifpdf}
\ifpdf
 \usepackage[colorlinks,pdftex]{hyperref}
\fi
\title{Les pavages avec la tortue ou la g\'eom\'etrie de xcas}
\makeindex
\author{Ren\'ee De Graeve}

\begin{document}
\maketitle
\section{G\'en\'eralit\'es}
On veut paver le plan avec un pav\'e {\tt R}.
\`A partir du pav\'e initial {\tt R}, on va d\'efinir le pav\'e {\tt P} 
qui pavera le plan par des translations dont les vecteurs sont donn\'es par 
deux nombres complexes {\tt v} et {\tt w}.\\
Ce pav\'e {\tt P} sera d\'efini \`a partir du pav\'e initial {\tt R} \`a 
l'aide des transformations de {\tt xcas} comme par exemple {\tt rotation}
et {\tt symetrie}.

\section{Comment faire un pavage comme un puzzle}
On peut gr\^ace \`a la souris translater des polyg\^ones : pour cela on clique 
sur un c\^ot\'e du polyg\^one, le trait devient bleu et sans relacher le bouton
de la souris on emmene la figure avec la souris, puis on relache le bouton 
lorsqu'on est arriv\'e l\`a ou l'on voulait aller.
 Si le pav\'e {\tt P} est compos\'e des pav\'es {\tt R,R1,R2,R3} o\`u  
{\tt R1,R2,R3} sont des exemplaires de {\tt R} obtenus par rotation ou 
sym\'etrie, il suffit de d\'efinir sans les dessiner {\tt R1,R2,R3} pour cela 
on fait des affectations que l'on termine par {\tt :;} (par exemple 
{\tt R:=rectangle(0,1,2):;}), puis on dessine plusieurs de ces pav\'es (par 
exemple {\tt R enter}, {\tt R enter} etc...). Ainsi, on obtient une 
superposition de {\tt R} et il suffit de d\'eplacer ces diff\'erents 
exemplaires avec la souris.\\
Voici un premier exemple de pavage avec des rectangles.\\
On tape pour d\'efinir :\\
{\tt R:=rectangle(0,1,2):;}\\
{\tt R1:=rotation(0,pi/2,R):;}\\
{\tt P:=[R,R1]:;}\\
On peut alors paver le plan en faisant subir \`a {\tt R} et \`a {\tt R1}
des translations de vecteurs {\tt v=-1+i} et {\tt w=2+2*i}. \\
On tape :\\
{\tt R enter} 
{\tt R enter}
{\tt R enter}
{\tt R enter}\\
{\tt R1 enter}
{\tt R1 enter}
{\tt R1 enter}
{\tt R1 enter}\\
On a alors un puzzel de 8 pi\`eces que l'on peut d\'eplacer \`a sa guise. 

{\bf Remarque}\\
On ne peut pas 
d\'eplacer {\tt P} d'un seul coup car {\tt P} est la juxtaposition de 2 
polygones : on ne peut  d\'eplacer {\tt P} que si on le d\'efinit 
comme polygone \`a savoir :
{\tt P:=polygone(0,1,1+2*i,2*i,0,i,-2+i,-2):;}\\
puis pour avoir 4 exemplaires de {\tt P}, on tape :\\
{\tt P enter}
{\tt P enter}
{\tt P enter}
{\tt P enter}\\
Apr\`es d\'eplacement des 8 pi\`eces {\tt R} et {\tt R1} ou 
des 4 pi\`eces {\tt P}, on obtient par exemple (on remarquera des petites 
imperfections dues \`a la mauvaise volont\'e de la souris !) :\\ 


% Generated by xcas
\noindent
\psset{unit=1.2000cm}
\begin{pspicture}(-5.0000,-1.4556)(5.0000,2.9556)
\psset{linewidth=.5pt}
\psset{arrowsize=2pt 4}
\psset{linecolor=black}
\psline[fillcolor=black](     1.002865,    -1.002865)(     2.002865,    -1.002865)(     2.002865,     0.997135)(     1.002865,     0.997135)(     1.002865,    -1.002865)(     1.002865,    -0.002865)(    -0.997135,    -0.002865)(    -0.997135,    -1.002865)(     1.002865,    -1.002865)
%\uput{0.0833}[45.0000](1.0029,-1.0029){\color{black} G}
\psset{linecolor=black}
\psline[fillcolor=black](     3.008596,     1.002865)(     4.008596,     1.002865)(     4.008596,     3.002865)(     3.008596,     3.002865)(     3.008596,     1.002865)(     3.008596,     2.002865)(     1.008596,     2.002865)(     1.008596,     1.002865)(     3.008596,     1.002865)
%\uput{0.0833}[45.0000](3.0086,1.0029){\color{black} H}
\psset{linecolor=black}
\psline[fillcolor=black](     3.982808,     0.028653)(     4.982808,     0.028653)(     4.982808,     2.028653)(     3.982808,     2.028653)(     3.982808,     0.028653)(     3.982808,     1.028653)(     1.982808,     1.028653)(     1.982808,     0.028653)(     3.982808,     0.028653)
%\uput{0.0833}[45.0000](3.9828,0.0287){\color{black} J}
\psset{linecolor=black}
\psline[fillcolor=black](     0.000000,     0.000000)(     1.000000,     0.000000)(     1.000000,     2.000000)(     0.000000,     2.000000)(     0.000000,     0.000000)(     0.000000,     1.000000)(    -2.000000,     1.000000)(    -2.000000,     0.000000)(     0.000000,     0.000000)
\end{pspicture} 

\section{Comment reproduire un pavage en g\'eom\'etrie}
Nous allons prendre comme deuxi\`eme exemple un pav\'e {\tt P} constitu\'e de 
4 rectangles obtenus par rotation et d\'efini par :
\begin{verbatim} 
R:=rectangle(0,1,2):;
R1:=rotation(0,pi/2,R):;
R2:=rotation(0,pi,R):;
R3:=rotation(0,-pi/2,R):;
P:=[R,R1,R2,R3]:;
PP:=polygone(0,1,1+2*i,2*i,0,i,-2+i,-2,0,-1,-1-2*i,-2*i,0,-i,-i+2,2):;
\end{verbatim} 
Voici le pavage que l'on veut reproduire


% Generated by xcas
\noindent
\psset{unit=0.6000cm}
\begin{pspicture}(-3.0000,-4.4556)(7.0000,4.4556)
\psset{linewidth=.5pt}
\psset{arrowsize=2pt 4}
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](     0.000000,     0.000000)(     1.000000,     0.000000)(     1.000000,     2.000000)(     0.000000,     2.000000)(     0.000000,     0.000000)(     0.000000,     1.000000)(    -2.000000,     1.000000)(    -2.000000,     0.000000)(     0.000000,     0.000000)(    -1.000000,     0.000000)(    -1.000000,    -2.000000)(     0.000000,    -2.000000)(     0.000000,     0.000000)(     0.000000,    -1.000000)(     2.000000,    -1.000000)(     2.000000,     0.000000)(     0.000000,     0.000000)
\psset{linecolor=blue}
\psline[fillcolor=black](     2.000000,     2.000000)(     3.000000,     2.000000)(     3.000000,     4.000000)(     2.000000,     4.000000)(     2.000000,     2.000000)(     2.000000,     3.000000)(     0.000000,     3.000000)(     0.000000,     2.000000)(     2.000000,     2.000000)(     1.000000,     2.000000)(     1.000000,     0.000000)(     2.000000,     0.000000)(     2.000000,     2.000000)(     2.000000,     1.000000)(     4.000000,     1.000000)(     4.000000,     2.000000)(     2.000000,     2.000000)
\psset{linecolor=black}
\psline[fillcolor=black](     4.000000,     0.000000)(     5.000000,     0.000000)(     5.000000,     2.000000)(     4.000000,     2.000000)(     4.000000,     0.000000)(     4.000000,     1.000000)(     2.000000,     1.000000)(     2.000000,     0.000000)(     4.000000,     0.000000)(     3.000000,     0.000000)(     3.000000,    -2.000000)(     4.000000,    -2.000000)(     4.000000,     0.000000)(     4.000000,    -1.000000)(     6.000000,    -1.000000)(     6.000000,     0.000000)(     4.000000,     0.000000)
\end{pspicture} 



Nous allons cr\'eer ce pavage avec une fonction {\tt LP} ayant 5 arguments :\\
{\tt v} et {\tt w} sont des nombres complexes d\'efinissant les vecteurs de 2 
translations, {\tt n} (resp {\tt m}) est un nombre entier repr\'esentant le 
nombre de translations \`a faire avec {\tt v} (resp {\tt w}) et {\tt Pa}
repr\'esente le pav\'e \`a translater.\\
On dessine les transform\'ees de {\tt Pa} avec deux boucles {\tt for} 
imbriqu\'ees, en faisant subir \`a {\tt Pa}, {\tt n} translations de vecteurs 
{\tt v, 2*v, 3*v...n*v} o\`u {\tt v} est un nombre complexe 
et {\tt m} translations de vecteurs 
{\tt w, 2*w, 3*w...m*w} o\`u {\tt w} est un nombre complexe. \\
Soit par exemple le pav\'e d\'efini au d\'ebut form\'e des 4 rectangles 
obtenus par rotation ({\tt P:=[R,R1,R2,R3]}).\\
On tape :
\begin{verbatim} 
LP(v,w,n,m,Pa):={
 local j,k,PL;
 PL:=[];
 for (j:=0;j<m;j++) {
   for (k:=0;k<n;k++) {
      PL:=append(PL,translation(v*k,Pa));
   }
   Pa:=translation(w,Pa);
 } 
 return PL;
}
\end{verbatim}
puis on tape :\\
{\tt LP(4,2*(1+i),4,5,P)}\\
On obtient bien le pavage d\'esir\'e.

Ou encore, si on veut {\tt P} en figure pleine (on fait alors des translations 
de vecteurs 4+4*i) :\\
{\tt PC:=polygone(1,1+2*i,2*i,i,-2+i,-2,-1,-1-2*i,-2*i,-i,2-i,2):;}\\
{\tt PCC:=couleur(PC,rempli):;}\\
{\tt couleur(LP(4,4*(1+i),4,3,PC),rempli);}\\
ou\\
{\tt LP(4,4*(1+i),4,3,PCC)}\\
On obtient alors :

% Generated by xcas
\noindent
\psset{unit=0.4615cm}
\begin{pspicture}(-3.0000,-9.5845)(23.0000,13.5845)
\psset{linewidth=.5pt}
\psset{arrowsize=2pt 4}
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](     1.000000,     0.000000)(     1.000000,     2.000000)(     0.000000,     2.000000)(     0.000000,     1.000000)(    -2.000000,     1.000000)(    -2.000000,     0.000000)(    -1.000000,     0.000000)(    -1.000000,    -2.000000)(     0.000000,    -2.000000)(     0.000000,    -1.000000)(     2.000000,    -1.000000)(     2.000000,     0.000000)(     1.000000,     0.000000)
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](     5.000000,     0.000000)(     5.000000,     2.000000)(     4.000000,     2.000000)(     4.000000,     1.000000)(     2.000000,     1.000000)(     2.000000,     0.000000)(     3.000000,     0.000000)(     3.000000,    -2.000000)(     4.000000,    -2.000000)(     4.000000,    -1.000000)(     6.000000,    -1.000000)(     6.000000,     0.000000)(     5.000000,     0.000000)
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](     9.000000,     0.000000)(     9.000000,     2.000000)(     8.000000,     2.000000)(     8.000000,     1.000000)(     6.000000,     1.000000)(     6.000000,     0.000000)(     7.000000,     0.000000)(     7.000000,    -2.000000)(     8.000000,    -2.000000)(     8.000000,    -1.000000)(    10.000000,    -1.000000)(    10.000000,     0.000000)(     9.000000,     0.000000)
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](    13.000000,     0.000000)(    13.000000,     2.000000)(    12.000000,     2.000000)(    12.000000,     1.000000)(    10.000000,     1.000000)(    10.000000,     0.000000)(    11.000000,     0.000000)(    11.000000,    -2.000000)(    12.000000,    -2.000000)(    12.000000,    -1.000000)(    14.000000,    -1.000000)(    14.000000,     0.000000)(    13.000000,     0.000000)
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](     5.000000,     4.000000)(     5.000000,     6.000000)(     4.000000,     6.000000)(     4.000000,     5.000000)(     2.000000,     5.000000)(     2.000000,     4.000000)(     3.000000,     4.000000)(     3.000000,     2.000000)(     4.000000,     2.000000)(     4.000000,     3.000000)(     6.000000,     3.000000)(     6.000000,     4.000000)(     5.000000,     4.000000)
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](     9.000000,     4.000000)(     9.000000,     6.000000)(     8.000000,     6.000000)(     8.000000,     5.000000)(     6.000000,     5.000000)(     6.000000,     4.000000)(     7.000000,     4.000000)(     7.000000,     2.000000)(     8.000000,     2.000000)(     8.000000,     3.000000)(    10.000000,     3.000000)(    10.000000,     4.000000)(     9.000000,     4.000000)
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](    13.000000,     4.000000)(    13.000000,     6.000000)(    12.000000,     6.000000)(    12.000000,     5.000000)(    10.000000,     5.000000)(    10.000000,     4.000000)(    11.000000,     4.000000)(    11.000000,     2.000000)(    12.000000,     2.000000)(    12.000000,     3.000000)(    14.000000,     3.000000)(    14.000000,     4.000000)(    13.000000,     4.000000)
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](    17.000000,     4.000000)(    17.000000,     6.000000)(    16.000000,     6.000000)(    16.000000,     5.000000)(    14.000000,     5.000000)(    14.000000,     4.000000)(    15.000000,     4.000000)(    15.000000,     2.000000)(    16.000000,     2.000000)(    16.000000,     3.000000)(    18.000000,     3.000000)(    18.000000,     4.000000)(    17.000000,     4.000000)
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](     9.000000,     8.000000)(     9.000000,    10.000000)(     8.000000,    10.000000)(     8.000000,     9.000000)(     6.000000,     9.000000)(     6.000000,     8.000000)(     7.000000,     8.000000)(     7.000000,     6.000000)(     8.000000,     6.000000)(     8.000000,     7.000000)(    10.000000,     7.000000)(    10.000000,     8.000000)(     9.000000,     8.000000)
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](    13.000000,     8.000000)(    13.000000,    10.000000)(    12.000000,    10.000000)(    12.000000,     9.000000)(    10.000000,     9.000000)(    10.000000,     8.000000)(    11.000000,     8.000000)(    11.000000,     6.000000)(    12.000000,     6.000000)(    12.000000,     7.000000)(    14.000000,     7.000000)(    14.000000,     8.000000)(    13.000000,     8.000000)
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](    17.000000,     8.000000)(    17.000000,    10.000000)(    16.000000,    10.000000)(    16.000000,     9.000000)(    14.000000,     9.000000)(    14.000000,     8.000000)(    15.000000,     8.000000)(    15.000000,     6.000000)(    16.000000,     6.000000)(    16.000000,     7.000000)(    18.000000,     7.000000)(    18.000000,     8.000000)(    17.000000,     8.000000)
\psset{linecolor=black}
\pspolygon[linestyle=none,fillstyle=solid,fillcolor=black](    21.000000,     8.000000)(    21.000000,    10.000000)(    20.000000,    10.000000)(    20.000000,     9.000000)(    18.000000,     9.000000)(    18.000000,     8.000000)(    19.000000,     8.000000)(    19.000000,     6.000000)(    20.000000,     6.000000)(    20.000000,     7.000000)(    22.000000,     7.000000)(    22.000000,     8.000000)(    21.000000,     8.000000)
\end{pspicture} 

\section{Avec la tortue}
On peut faire aussi des pavages avec la tortue. 
Pour r\'ealiser le deuxi\`eme exemple, on dessine les transform\'ees de 
{\tt P} avec deux {\tt repete} 
imbriqu\'es, cf. la fonction {\tt LP} ci-dessous~: 
on a un {\tt repete} dans {\tt L(n,v,P)} qui fait
{\tt n} translations selon {\tt v}, de {\tt P} puis un autre
{\tt repete} qui fait {\tt m} translations selon {\tt w}, de 
{\tt L(n,v,P)}. Dans la d\'efinition de {\tt  L} et de {\tt LP} on fait revenir
la tortue  \`a son point de d\'epart.\\
On peut aussi \'ecrire une proc\'edure r\'ecursive c'est {\tt LPR}.
\begin{verbatim} 
R():=repete 2, avance 10,tourne_gauche,avance 20,tourne_gauche;
P():=repete 4,R(),tourne_droite;
L(n,v,P):={
repete n,P(),saute(re(v)),pas_de_cote(im(v));
saute(-n*re(v))
};
LP(v,w,n,m,P):={
repete m,L(n,v,P),saute(re(w)),pas_de_cote(-im(w));
saute(-m*re(w));pas_de_cote(m*im(w));
};
LPR(v,w,n,m,P):={
L(n,v,P);
si (m>1) alors 
  saute(re(w));pas_de_cote(-im(w));
  LPR(v,w,n,m-1,P);
  saute(-re(w));pas_de_cote(im(w));
fsi
}
\end{verbatim}
Puis on tape :\\
{\tt efface;saute(-120);LP(40,20*(1+i),4,4,P)}\\
ou\\
{\tt efface;saute(-120);LPR(40,20*(1+i),4,4,P)}\\
ou si on veut {\tt P} en figure pleine :\\
{\tt RP():=rectangle\_plein(10,20);}\\
{\tt PP():=repete(4,RP(),tourne\_droite 90);}\\
Puis on tape (on fait alors des translations de vecteurs 40+40*i) :\\
{\tt efface;saute(-120);LP(40,40*(1+i),4,4,PP)}\\
ou\\
{\tt efface;saute(-120);LPR(40,40*(1+i),4,4,PP)}
\section{Exercice}
On veut illustrer le th\'eor\`eme suivant avec {\tt xcas}:
\begin{center}
Un quadrilat\`ere quelconque pave le plan.
\end{center}
Pour cela dessiner un quadrilat\`ere, puis faites le pavage du plan avec ce 
quadrilat\`ere avec la souris, ou/et avec les instructions de g\'eom\'etrie,
ou/et avec la tortue.
Bon courage!!!!!!

\end{document}