\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{times}
\usepackage{ifpdf}
\usepackage{makeidx}
\usepackage{graphicx}
\ifpdf
 \usepackage[pdftex,colorlinks]{hyperref}
\else
 \usepackage[ps2pdf,breaklinks=true,colorlinks=true,linkcolor=red,citecolor=green]{hyperref}
 \fi

\newtheorem{rem}{Remark}
\newcommand{\R}{{\mathbb{R}}}
\newcommand{\C}{{\mathbb{C}}}
\newcommand{\Z}{{\mathbb{Z}}}
\newcommand{\N}{{\mathbb{N}}}
\newcommand{\Q}{{\mathbb{Q}}}
\newcommand{\atan}{{\mbox{atan}}}
\input{giac.tex}
\giacmathjax
\title{Entrelacs}
\author{Ren\'ee De Graeve}
\date{2019}
\begin{document}
\begin{giacjshere}
\maketitle
\tableofcontents
\newpage
\section{Un dessin \`a reproduire en CM2}
En CM2 on fait reproduire le dessin suivant sur un papier quadrill\'e. \\
\giacinputbig{efface;maillage();repete 4,maille(),cache_tortue}\\
\subsection{Le dessin CM2 avec la tortue}
Il est int\'eressant de faire faire ce dessin \`a la tortue !\\
Pour cela, on va d\'ecomposer le dessin en quatre morceaux identiques. \\
\giacinputbig{efface;maillage();dessine_tortue 0;maille()}\\ 
Le dessin ci-dessus est fait en utilisant {\tt dessine\_tortue 0} au d\'epart : 
ainsi le triangle plein repr\'esente la position de la tortue au d\'epart et le 
triangle "vide" repr\'esente la tortue \`a l'arriv\'ee.\\
On tape :
\begin{giaconload}
maille():={
  avance 30;
  tourne_gauche;
  avance 60;
  tourne_gauche;
  avance 50;
  tourne_gauche;
  avance 30;
  tourne_gauche;
  avance 20;
  tourne_gauche;
  avance 10;
  tourne_droite;
  avance 10;
  tourne_gauche;
  avance -40;
 }:;
\end{giaconload}
\giacinputbig{efface;crayon 1;maille();}\\
{\bf Remarque}\\
La tortue n'est pas revenue \`a sa position de d\'epart (i.e. la proc\'edure 
{\tt maille()} n'est pas transparente) mais elle est pr\^ete 
\`a faire une nouvelle maille :\\
\giacinputbig{efface;crayon 1;repete 4,maille();}\\
On obtient le dessin voulu et la tortue est revenue \`a sa position de départ.
\subsection{Le dessin CM2 en couleur avec des formes pleines et avec la tortue}
Faire le dessin  en couleur avec des formes pleines.\\
\giacinputbig{efface;dessine_tortue 0;crayon 1;maille();polygone_rempli -15}\\
On peut utiliser la commande {\tt rectangle\_plein} et d\'ecomposer la maille 
en 3 rectangles :\\
\begin{giaconload}
maille_pleine0():={
  rectangle_plein(20,60);
  tourne_gauche;
  saute 40;
  rectangle_plein(20,30);
  tourne_gauche;
  saute 10;
  rectangle_plein(20,10);
  recule 10;
  pas_de_cote 30;
  tourne_droite;
  }:;
\end{giaconload}
\giacinputbig{efface;repete(2,crayon 1,maille_pleine0(),crayon 2,maille_pleine0());cache_tortue;}
{\bf ou bien}  on utilise la commande {\tt polygone\_rempli}.\\
Puisque la proc\'edure {\tt maille()} contient 15 instructions 
{\tt polygone\_rempli} a comme argument -15 :\\
\begin{giaconload}
maille_pleine():={
maille(),polygone_rempli -15;
}:;
\end{giaconload}
\giacinputbig{efface;repete(2,crayon 1,maille_pleine(),crayon 2,maille_pleine());cache_tortue;}
\subsection{Introduction des param\`etres}
On peut alors introduire les param\`etres pour changer la couleur. 
On utilise {\tt c} pour la couleur de la maille et {\tt f} pour la couleur des 
5 carr\'es. On choisit par d\'efaut {\tt f=7}.\\
On tape :
\begin{giaconload}
maillec(c,f=7):={
si f !=7 alors 
crayon f;
pas_de_cote 30;
rectangle_plein;
pas_de_cote -30;
fsi;
crayon c;
maille_pleine();
}:;
\end{giaconload}
\giacinputbig{efface;repete (2,maillec(1),maillec(2));cache_tortue;}\\
\giacinputbig{efface;crayon 3;rectangle_plein,repete(2,maillec(1,3),maillec(2,3));cache_tortue;}\\
On obtient le dessin final en tapant :
\begin{giaconload}
dessin1_plein(c1,c2,f=7):={
efface;
crayon f;
rectangle_plein;
crayon c;
repete(2,maillec(c1,f),maillec(c2,f));
}:;
\end{giaconload}
On obtient le dessin final en tapant :\\
\giacinputbig{efface;dessin1_plein(1,2,0);cache_tortue;}
\section{Le dessin CM2 en g\'eom\'etrie analytique}
\subsection{Sans param\`etre}
On tape :
\begin{giaconload}
sept0():={
polygone(0,3*10,30*(1+2*i),10*(-2 +6*i),10*(-2 +3*i),30*i, 40*i,10*(1+4*i),10);}:;
sept0_rempli(c):={
affichage(polygone(0,3*10,30*(1+2*i),10*(-2 +6*i),10*(-2 +3*i),30*i, 40*i,10*(1+4*i),10),c+rempli);
}:;
\end{giaconload}
\giacinputbig{sept0()}\\
\giacinputbig{axes=0;rotation(5+5*i,k*pi/2,sept0())$(k=0..3)}\\
Avec 2 couleurs :\\
\giacinputbig{axes=0;affichage(rotation(5+5*i,k*pi/2,sept0())$(k=0..3,2),1+rempli),affichage(rotation(5+5*i,k*pi/2,sept0())$(k=1..4,2),2+rempli)}\\
ou bien:\\
\giacinputbig{axes=0;affichage(rotation(5+5*i,k*pi,sept0())$(k=0..1),1+rempli),affichage(rotation(5+5*i,pi/2+k*pi,sept0())$(k=0..1),2+rempli)}\\
\subsection{Avec des param\`etres}
 On tape :
\begin{giaconload}
sept(z,t,l):={
polygone(z,z+3*l*exp(i*t),z+3*l*(1+2*i)*exp(i*t),z+l*(-2 +6*i)*exp(i*t),z+l*(-2 +3*i)*exp(i*t), z+3*l*i*exp(i*t), z+4*l*i*exp(i*t),z+l*(1+4*i)*exp(i*t),z+l*exp(i*t));
}:;
sept_rempli(z,t,l,c):={
affichage(polygone(z,z+3*l*exp(i*t),z+3*l*(1+2*i)*exp(i*t),z+l*(-2 +6*i)*exp(i*t),z+l*(-2 +3*i)*exp(i*t),z+3*l*i*exp(i*t), z+4*l*i*exp(i*t),z+l*(1+4*i)*exp(i*t),z+l*exp(i*t)),rempli+c);
}:;
dessingeo1(z,l,c1,c2,f=7):={
local L,k;
L:=NULL;
pour k de 0 jusque 1 faire
L:=L,sept_rempli(z+k*(1+i)*l,k*pi,l,c1);
L:=L,sept_rempli(z+l+(-1+i)*l*k,pi/2+k*pi,l,c2);
fpour;
si f!=7 alors 
L:=L,affichage(carre(z,z+l),f+rempli);
L:=L,affichage(carre(z+3*i*l,z+l+3*i*l),f+rempli);
L:=L,affichage(carre(z-3*i*l,z+l-3*i*l),f+rempli);
L:=L,affichage(carre(z+3*l,z+4*l),f+rempli);
L:=L,affichage(carre(z-3*l,z-2l),f+rempli);
fsi;
return L;
}:;
\end{giaconload}
\giacinputbig{axes=0;gl_ortho()=1;sept(10,0,10),sept(10+10+10*i,pi,10),sept(10+10,pi/2,10),sept(10+10*i,3*pi/2,10)}\\
\giacinputbig{axes=0;gl_ortho()=1;sept(20+10*i,pi,10),sept(10,0,10)}\\\giacinputbig{axes=0;dessingeo1(0,10,1,2)}\\
\giacinputbig{axes=0;gl_ortho()=1;dessingeo1(0,10,1,2,3)}
\section{Prolongement pour les grands :  le dessin2}
On veut r\'ealiser le dessin suivant :\\
\giacinputbig{axes=0;affichage(papier_triangule(1,pi/3,sqrt(3)/2,x=-5-1/2..5+1/2,y=-5*sqrt(3)/2..5*sqrt(3)/2),6);rotation(0,k*pi/3,crochet1())$(k=0..5);}\\
\subsection{Le dessin2 avec la tortue}
On d\'ecompose le dessin en 6 morceaux identiques :\\
\giacinputbig{efface;triangule(20,6);leve_crayon;position(100,100);baisse_crayon;crayon 0;dessine_tortue 0;crochtor(20);}\\
On tape :
\begin{giaconload}
crochtor(l):={
  avance 2*l;
tourne_gauche 60;
  avance 2*l;
  saute l;
  avance l;
  tourne_gauche 60;
  avance 2*l;
  tourne_gauche 60;
  avance 2*l;
  tourne_gauche 60;
  avance 3*l;
  tourne_gauche 120;
  avance l;
  tourne_gauche 60;
  avance 2*l;
  repete(3,tourne_droite 60,avance l);
  saute l;
  avance 2*l;
  tourne_droite 180;
}:;
dessin2(l):={
    repete 6,crochtor(l);
}:;
\end{giaconload}
\giacinput{efface;dessine_tortue 0;dessin2(20)}

\subsection{Avec des formes pleines}
{\tt crochtor} est compos\'e de 2 morceaux disjoints : {\tt parallelog} et {\tt croc}.\\
 Pour pouvoir utiliser 
{\tt polygone\_rempli} on est oblig\'e de faire s\'eparemment le contour de ces 
2 morceaux.\\
On tape :\\
\begin{giaconload}
parallelog(l):={
repete (2,avance l,tourne_gauche 60,avance 2*l,tourne_gauche 120);
}:;
parallelog_plein(l,c):={
local c0;
c0:=crayon;
crayon c;
parallelog(l);polygone_rempli -8;
crayon c0;
}:;
croc(l):={
  avance l;
  tourne_gauche 60;
  avance 2*l;
  tourne_gauche 60;
  avance 2*l;
  tourne_gauche 60;
  avance 3*l;
  tourne_gauche 120;
  avance l;
  tourne_gauche 60;
  avance 2*l;
  repete(3,tourne_droite 60,avance l);
  tourne_gauche 120;
  avance l;
}:;
croc_plein(l,c):={
c0:=crayon;
crayon c;croc(l);polygone_rempli -19;
}:;
crochtor_plein(l,c):={
parallelog_plein(l,c);
saute l;
tourne_gauche 60;
saute 3*l;
croc_plein(l,c);
saute -l;
tourne_gauche 60;
saute -2*l;
}:;
dessin2_plein(l,c1,c2,c3,f=7):={
local k;
si f !=7 alors
crayon f;
repete(6,tourne_gauche 60,avance l);polygone_rempli -12;
tourne_gauche 60;
saute 3*l;
tourne_droite 60; 
saute -l;
repete(6,avance l,tourne_gauche 60);polygone_rempli -12;
pour k de 0 jusque 4 faire 
    saute -2*l;tourne_gauche 60;
    repete(6,avance l,tourne_gauche 60);polygone_rempli -12;
fpour;
avance l;
tourne_gauche 60;
saute-2*l;
fsi;
repete(2,crochtor_plein(l,c1),crochtor_plein(l,c2),crochtor_plein(l,c3));
}:;
\end{giaconload}

\giacinputbig{efface;saute 40;dessin2_plein(20,1,2,3);cache_tortue}\\
\giacinputbig{efface;saute 40;dessin2_plein(20,1,2,3,6);cache_tortue}\\
\section{Le dessin2 en g\'eom\'etrie analytique}
On \'ecrit ici des proc\'edures sans param\`etre.
\begin{giaconload}
crochet1():={
local L;
  L:=NULL;
  L:=L,7/2-sqrt(3)/2*i;
  L:=L,5/2-sqrt(3)/2*i;
  L:=L,3-sqrt(3)*i;
  L:=L,4-sqrt(3)*i;
  L:=L,5;
  L:=L,4+sqrt(3)*i;
  L:=L,1+sqrt(3)*i;
  L:=L,3/2+sqrt(3)/2*i;
  L:=L,7/2+sqrt(3)/2*i;
  L:=L,4;
  return [polygone(L),parallelogramme(-sqrt(3)*i,2-sqrt(3)*i,3/2-sqrt(3)/2*i)];
  }:;
crochet1_plein(c):={
local L;
  L:=NULL;
  L:=L,7/2-sqrt(3)/2*i;
  L:=L,5/2-sqrt(3)/2*i;
  L:=L,3-sqrt(3)*i;
  L:=L,4-sqrt(3)*i;
  L:=L,5;
  L:=L,4+sqrt(3)*i;
  L:=L,1+sqrt(3)*i;
  L:=L,3/2+sqrt(3)/2*i;
  L:=L,7/2+sqrt(3)/2*i;
  L:=L,4;
  return [affichage(polygone(L),c+rempli),affichage(parallelogramme(-sqrt(3)*i,
2-sqrt(3)*i,3/2-sqrt(3)/2*i),c+rempli)];
  }:;
\end{giaconload}
\giacinput{rotation(0,k*pi/3,crochet1())$(k=0..5);}\\
\giacinputbig{affichage(rotation(0,k*pi/3,crochet1())$(k=0..5,3),1+rempli);}\\
\giacinputbig{affichage(rotation(0,pi/3+k*pi/3,crochet1())$(k=0..5,3),2+rempli);}\\
\giacinputbig{affichage(rotation(0,2*pi/3+k*pi/3,crochet1())$(k=0..5,3),3+rempli);}\\
\giacinputbig{affichage(rotation(0,k*pi/3,crochet1())$(k=0..5,3),1+rempli),
affichage(rotation(0,pi/3+k*pi/3,crochet1())$(k=0..5,3),2+rempli),
affichage(rotation(0,2*pi/3+k*pi/3,crochet1())$(k=0..5,3),3+rempli)}\\

\section{Le cannage d'une chaise}
Voici le dessin que l'on veut obtenir :\\
\giacinputbig{axes=0;cannage(0,0,10,1,4,2,3,5,6,4,3);}\\
\subsection{En g\'eom\'etrie analytique}
Le dessin est compos\'e d'une succession d'un m\^eme motif : le morceau 3 :\\
\giacinputbig{morceau3(0,0,10,1,4,2)}
et du morceau3 apr\`es une rotation :\\ 
\giacinputbig{morceau3(0,0,10,3,5,6)}\\
Le morceau3  est constitu\'e de 5 morceaux :\\
4  morceau1
\giacinputbig{gl_ortho=1;morceau1(0,0,10,1),morceau1(10*(1+i),0,10,4),morceau1(10*(1+(1+sqrt(2))*i),pi,10,1),morceau1(10*(2+(2+sqrt(2))*i),pi,10,4)}\\
et 1 morceau2 :
\giacinputbig{morceau2(0,0,10,2)}\\
On tape :\\
\begin{giaconload}
morceau1(z,t,l,c):={
retourne affichage(polygone(z,z-l*i*exp(i*t),z+(l-l*i)*exp(i*t),z+l*(1+i)*exp(i*t)),c+rempli);
}:;
morceau2(z,t,l,c):={
retourne affichage(polygone(z,z+l*exp(i*t)*(2+sqrt(2))*(1+i),z+l*(2+(2+sqrt(2))*i)*exp(i*t),z-l*sqrt(2)*exp(i*t)),c+rempli);
}:;
morceau3(z,t,l,c1,c2,c3):={
local L;
L:=NULL;
L:=L,morceau1(z,t,l,c1);
L:=L,morceau1(z+l*(1+i)*exp(i*t),t,l,c2);
L:=L,morceau1(z+l*(1+(1+sqrt(2))*i)*exp(i*t),pi+t,l,c1);
L:=L,morceau1(z+l*(2+(2+sqrt(2))*i)*exp(i*t),pi+t,l,c2);
L:=L,morceau2(z,t,l,c3);
retourne L; 
}:;
cannage(z,t,l,c1,c2,c3,c4,c5,c6,p,q):={
  local L,k,j;
  L:=NULL;
  pour j de 0 jusque q-1 faire
    pour k de 0 jusque p-1 faire
     L:=L, morceau3(z+l*(4+sqrt(2))*(k+j*i),t,l,c1,c2,c3);
        fpour;
  fpour;
  pour j de 0 jusque q-1 faire
    pour k de 0 jusque p-1 faire
     L:=L, morceau3(z+l*(4+sqrt(2))*(k+j*i)-2*l*i,pi/2,l,c4,c5,c6);
        fpour;
  fpour;

return L
}:;

\end{giaconload}
\giacinputbig{axes=0;cannage(0,0,10,1,4,2,3,5,6,9,4);}\\
\giacinputbig{axes=0;cannage(0,0,10,90,104,102,110,94,108,5,3);}

\subsection{Avec la tortue}
Voici le dessin que l'on veut obtenir :\\
\giacinputbig{efface;saute -20;pas_de_cote(-40);cannagetor(10,1,2,3,4,5,6,3,2);cache_tortue}\\
On fait la m\^eme d\'ecomposition que pr\'ec\'edemment :\\
Un trap\`eze {\tt trap(l)} et sa forme remplie {\tt trap\_rempli(l,c)} :\\
\giacinputbig{efface;dessine_tortue 0;trap(20);saute 40; trap\_rempli(20,1);}\\
Un parall\'elogramme {\tt para(l)} et sa forme remplie {\tt para\_rempli(l,c)} :\\
\giacinputbig{efface;dessine_tortue 0;para(20);saute 80; para_rempli(20,2);}\\
Les 4 proc\'edures {\tt trap(l),trap\_rempli(l,c),para(l),para\_rempli(l,c)}
sont transparentes (i.e. la tortue revient \`a sa position de d\'epart).\\
Le morceau {\tt morceau(l,c1,c2,c3)} compos\'e de deux {\tt trap\_rempli(l,c1)}, de deux {\tt trap\_rempli(l,c2)} et de {\tt para\_rempli(l,c3)}.\\
\giacinputbig{efface;dessine_tortue 0;morceau(20,1,2,3)}\\
Cette proc\'edure {\tt morceau} n'est pas transparente car \`a l'arriv\'ee la 
tortue est pr\`ete \`a faire un autre morceau qui sera le motif.\\
On r\'ealise le motif {\tt motif(l,c1,c2,c3,c4,c5,c6)} compos\'e de 
{\tt morceau(l,c1,c2,c3)} et de {\tt morceau(l,c4,c5,c6)}\\
\giacinputbig{efface;dessine_tortue 0;morceau(20,1,4,2),morceau(20,3,5,6),(repete 2,saute 40,tourne_droite 90)}\\
\giacinputbig{efface;motif(20,1,2,3,4,5,6)}\\
{\tt motif(l,c1,c2,c3,c4,c5,c6)} est une proc\'edue transparente.\\
On \'ecrit ensuite la proc\'edure {\tt cannagetor(l,c1,c2,c3,c4,c5,c6,p,q)}
qui fait {\tt q} lignes de {\tt p} motifs :\\
\giacinputbig{efface;saute -60;pas_de_cote(-60);cannagetor(10,1,2,3,4,5,6,8,4)}\\

 Voici les programmes :
\begin{giaconload}
trap(l):={
  tourne_gauche 45;
  avance l*sqrt(2);
  tourne_droite 135;
  avance 2*l;
  repete(2,tourne_droite 90,avance l);
  tourne_droite 90;
}:;
trap_rempli(l,c):={
crayon c;
trap(l);polygone_rempli -9
  }:;
para(l):={
  repete(2,tourne_gauche 45,avance 2*l*(1+sqrt(2)),tourne_gauche 135,avance l*sqrt(2));
 }:;
para_rempli(l,c):={
crayon c;
para(l);polygone_rempli -8
  }:;
morceau(l,c1,c2,c3):={
  trap_rempli(l,c1);
  para_rempli(l,c3);
  saute l;tourne_gauche 90;saute l;tourne_droite 90;
  trap_rempli(l,c2);
  tourne_gauche 90;saute l*sqrt(2);tourne_gauche 90;
  trap_rempli(l,c1);
  saute -l; tourne_droite 90;saute l;tourne_gauche 90;
  trap_rempli(l,c2);
  saute 2*l;tourne_droite 90;saute -(4+sqrt(2))*l;
  }:;
motif(l,c1,c2,c3,c4,c5,c6):={
morceau(l,c1,c2,c3);
morceau(l,c4,c5,c6);
repete 2,saute 2*l,tourne_droite 90;
}:;
cannagetor(l,c1,c2,c3,c4,c5,c6,p,q):={
  repete(q,(repete p,motif(l,c1,c2,c3,c4,c5,c6),saute l*(4+sqrt(2))),
  saute -p*l*(4+sqrt(2)),pas_de_cote l*(4+sqrt(2)));
  pas_de_cote -q*l*(4+sqrt(2))
   }:;

\end{giaconload}
\section{Annexe}
Pour avoir un quadrillage en logo et un fond triangul\'e pour {\tt crocntor2()}
\begin{giaconload}
//fond quadrille
//a represente la longueur du carreau et k la couleur du maillage
maillage(a=10,k=3):={
local p,c,cc;
p:= position;
c:=cap;
cc:=crayon;
leve_crayon;position([0,0]);cap 0;baisse_crayon;crayon k;
repete(ceil(260/a),avance(ceil(400/a)*a),pas_de_cote(a),
tourne_droite 180, avance(ceil(400/a)*a),pas_de_cote(-a),
tourne_droite 180);
leve_crayon;position([0,0]);cap 0;baisse_crayon;
tourne_gauche; 
repete(ceil(200/a),avance(ceil(520/a)*a),pas_de_cote(-a),
tourne_droite 180, avance(ceil(520/a)*a),pas_de_cote(a),
tourne_droite 180);
crayon(cc);
leve_crayon;position(p);
cap(c);baisse_crayon;
}:;
//fond triangule pour crochtor2()
//a represente la longueur du triangle et k la couleur du maillage
trigequi(a):=repete(3,avance(a),tourne_gauche 120):; 
triangule(a,c):={
  crayon c;recule(3*a);
  repete(7,(repete 7,trigequi(a),avance(a)),recule 7*a, tourne_gauche 60, avance a, tourne_gauche -60);
  }:;
\end{giaconload}
\end{giacjshere}
\end{document}




