Entrelacs

Renée De Graeve

2019

Contents

1  Un dessin à reproduire en CM2

En CM2 on fait reproduire le dessin suivant sur un papier quadrillé.


1.1  Le dessin CM2 avec la tortue

Il est intéressant de faire faire ce dessin à la tortue !
Pour cela, on va décomposer le dessin en quatre morceaux identiques.


Le dessin ci-dessus est fait en utilisant dessine_tortue 0 au départ : ainsi le triangle plein représente la position de la tortue au départ et le triangle "vide" représente la tortue à l’arrivée.
On tape :

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;
 }:;

onload


Remarque
La tortue n’est pas revenue à sa position de départ (i.e. la procédure maille() n’est pas transparente) mais elle est prête à faire une nouvelle maille :


On obtient le dessin voulu et la tortue est revenue à sa position de départ.

1.2  Le dessin CM2 en couleur avec des formes pleines et avec la tortue

Faire le dessin en couleur avec des formes pleines.


On peut utiliser la commande rectangle_plein et décomposer la maille en 3 rectangles :

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;
  }:;

onload

ou bien on utilise la commande polygone_rempli.
Puisque la procédure maille() contient 15 instructions polygone_rempli a comme argument -15 :

maille_pleine():={
maille(),polygone_rempli -15;
}:;

onload

1.3  Introduction des paramètres

On peut alors introduire les paramètres pour changer la couleur. On utilise c pour la couleur de la maille et f pour la couleur des 5 carrés. On choisit par défaut f=7.
On tape :

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();
}:;

onload




On obtient le dessin final en tapant :

dessin1_plein(c1,c2,f=7):={
efface;
crayon f;
rectangle_plein;
crayon c;
repete(2,maillec(c1,f),maillec(c2,f));
}:;

onload
On obtient le dessin final en tapant :

2  Le dessin CM2 en géométrie analytique

2.1  Sans paramètre

On tape :

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);
}:;

onload




Avec 2 couleurs :


ou bien:


2.2  Avec des paramètres

On tape :

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;
}:;

onload







3  Prolongement pour les grands : le dessin2

On veut réaliser le dessin suivant :


3.1  Le dessin2 avec la tortue

On décompose le dessin en 6 morceaux identiques :


On tape :

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);
}:;

onload

3.2  Avec des formes pleines

crochtor est composé de 2 morceaux disjoints : parallelog et croc.
Pour pouvoir utiliser polygone_rempli on est obligé de faire séparemment le contour de ces 2 morceaux.
On tape :

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));
}:;

onload





4  Le dessin2 en géométrie analytique

On écrit ici des procédures sans paramètre.

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)];
  }:;

onload










5  Le cannage d’une chaise

Voici le dessin que l’on veut obtenir :


5.1  En géométrie analytique

Le dessin est composé d’une succession d’un même motif : le morceau 3 :

et du morceau3 après une rotation :


Le morceau3 est constitué de 5 morceaux :
4 morceau1

et 1 morceau2 :

On tape :

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
}:;

onload



5.2  Avec la tortue

Voici le dessin que l’on veut obtenir :


On fait la même décomposition que précédemment :
Un trapèze trap(l) et sa forme remplie trap_rempli(l,c) :


Un parallélogramme para(l) et sa forme remplie para_rempli(l,c) :


Les 4 procédures trap(l),trap_rempli(l,c),para(l),para_rempli(l,c) sont transparentes (i.e. la tortue revient à sa position de départ).
Le morceau morceau(l,c1,c2,c3) composé de deux trap_rempli(l,c1), de deux trap_rempli(l,c2) et de para_rempli(l,c3).


Cette procédure morceau n’est pas transparente car à l’arrivée la tortue est prète à faire un autre morceau qui sera le motif.
On réalise le motif motif(l,c1,c2,c3,c4,c5,c6) composé de morceau(l,c1,c2,c3) et de morceau(l,c4,c5,c6)




motif(l,c1,c2,c3,c4,c5,c6) est une procédue transparente.
On écrit ensuite la procédure cannagetor(l,c1,c2,c3,c4,c5,c6,p,q) qui fait q lignes de p motifs :


Voici les programmes :

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))
   }:;

onload

6  Annexe

Pour avoir un quadrillage en logo et un fond triangulé pour crocntor2()

//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);
  }:;

onload

  


This document was translated from LATEX by HEVEA.