Pavages du plan

Il existe partout des dessins obtenus par répétitions d'un motif unique: carreaux d'une fenêtre, tuiles d'une toiture, lattes de bois d'une clôture, briques d'un mur, papier peint, tissu,... On ne les trouve pas seulement dans des objets produits par l'homme: le rayon de cire d'abeille, la corolle des fleurs, le cristal de sel,...
La couverture d'un plan par répétitions d'un même motif, sans chevauchements ni trous, s'appelle un pavage. Comme c'est le cas pour toutes les tâches répétitives, l'informatique s'avère très utile pour produire des pavages.

Définition du motif

Pour définir une forme, on procède comme ci-dessous. On donne un nom sans espaces ou symboles ayant une signification spéciale dans Mathematica (comme - par exemple). Vient ensuite le signe =. Enfin, entre accolades, on indique la couleur, puis, après une virgule, viennent la ou les primitives graphiques.

carré={RGBColor[1,0,0],Polygon[{{-1,-1},{-1,1},{1,1},{1,-1}}]};
croix={RGBColor[1,1,0],Thickness[0.01],Line[{{-0.5,-0.5},{0.5,0.5}}],Line[{{0.5,-0.5},{-0.5,0.5}}]};

Une fois toutes les parties du dessin définies, on indique l'ordre dans lequel elles doivent être dessinées:

pavé={carré,croix};

Mathematica dessinera d'abord le carré puis la croix. Changez l'ordre pour voir la différence ! 
Rien ne sera dessiné à l'écran tant que vous ne direz pas à Mathematica de le faire ! Voici l'instruction à utiliser:

Show[Graphics[pavé],AspectRatio->Automatic]

(on peut réduire ou agrandir de dessin en cliquant dessus et en manipulant les poignées).

Répétition du motif

Le motif générique de pavage sera défini comme suit. On doit d'abord donner les deux directions de translation (pour couvrir un plan il faut deux directions). On peut faire une analogie avec les machines à écrire. En tapant sur une touche, la touche "avance" automatiquement d'un cran vers la droite; cela correspond pour nous à notre direction u. À la fin d'une ligne, on descend d'un cran avant de recommencer une nouvelle ligne; c'est notre direction v. Remarquez que les vecteurs u et v n'ont pas besoin d'être perpendiculaires; ils doivent seulement être non colinéaires.

Comme notre dessin a une largeur de 2, on se décalera de deux unités vers la droite (u). Comme on a envie que nos dessins soient répétés en quinconce, la direction v indique que pour recommencer une ligne, on se décalera d'un cran vers la droite et de deux vers le haut par rapport à la ligne précédente.

u={2,0};v={1,2};

On définit maintenant le motif générique qui permettra de paver notre plan:

motif=ReplaceAll[pavé,{x_?NumberQ,y_?NumberQ}->{x+u[[1]] dx+v[[1]] dy,y+u[[2]] dx+v[[2]] dy}];

La fonction ReplaceAll remplace les coordonnées x par x+u[[1]]dx+v[[1]]dy et les coordonnées y par y+u[[2]]dx+v[[2]]dy. On peut maintenant créer une liste en faisant varier dx et dy entre 0 et le nombre de répétitions moins une que l'on veut en horizontal et en vertical. Dans notre exemple, on a décidé de répéter 5 fois selon la direction u et 4 fois selon la direction v:

pavage=Table[motif,{dx,0,4},{dy,0,3}];

Dessinons enfin ce pavage :

Show[Graphics[pavage],AspectRatio->Automatic]

Vous trouverez ci-dessous trois pavages de difficultés croissantes.

Exemple 1 : le carrelage

D'après le travail de Pauline Bart, classe 1BD', mars 1997.

fond={RGBColor[0,0.8`,0.8`],Rectangle[{-1,-1},{2,2}]};
carré={RGBColor[1,0.5`,0],Rectangle[{0,0},{1,1}]};
triangleGauche={RGBColor[0.1`,0.1`,0.7`],Polygon[{{-1,0},{-1,1},{0,1}}]};
triangleHaut={RGBColor[0.1`,0.1`,0.7`],Polygon[{{0,2},{1,2},{1,1}}]};
triangleDroit={RGBColor[0.1`,0.1`,0.7`],Polygon[{{1,0},{2,0},{2,1}}]};
triangleBas={RGBColor[0.1`,0.1`,0.7`],Polygon[{{0,0},{0,-1},{1,-1}}]};
planelle={fond,carré,triangleGauche,triangleHaut,triangleDroit,triangleBas};
Show[Graphics[planelle],AspectRatio->Automatic]

u={3,0};v={0,3};
motif=planelle/.{x_?NumberQ,y_?NumberQ}->{x+u[[1]] dx+v[[1]] dy,y+u[[2]] dx+v[[2]] dy};
pavage=Table[motif,{dx,0,6},{dy,0,4}];
Show[Graphics[pavage],AspectRatio->Automatic]

Exemple 2 : le troupeau d'éléphants

D'après le travail de Frédéric Girardin, classe 1C, mars 1997.

s1={0,3};s2={0,4};s3={2,6};s4={2,7};s5={3,7};,s6={4,9};s7={5,9};s8={6,8};s9={9,8};s10={11,7};,s11={12,6};s12={12,5};s13={14,3};s14={11,3};s15={12,0};s16={11,0};s17={10,2};s18={10,0};,s19={9,2};s20={6,3};s21={7,0};s22={6,0};s23={5,0};,s24={5,4};s25={6,6};s26={4,5};s27={4,8};,s28={5,8};s29={3,5};s30={4,6};s31={2,3};,corps={GrayLevel[0.5`],Polygon[{s8,s9,s10,s11,s12,s14,s15,s16,s17,s19,s20,s22,s23,s24,s25}]};,oreille={GrayLevel[0.4`],Polygon[{s24,s25,s8,s27,s26,s24}]};
tête={GrayLevel[0.45`],Polygon[{s1,s2,s3,s4,s6,s7,s8,s27,s26,s29,s1}]};,patteAvant={GrayLevel[0.3`],Polygon[{s20,s21,s22,s20}]};
patteArrière={GrayLevel[0.3`],Polygon[{s18,s17,s16,s18}]};
queue={GrayLevel[0.2`],Polygon[{s12,s13,s11,s12}]};
défense={CMYKColor[0,0,0.2`,0],Polygon[{s30,s31,s26,s30}]};
oeil={RGBColor[0,0,1],Disk[{3,7},0.2`]};
sol={CMYKColor[0.1`,0.2`,0.4`,0],Polygon[{{-2,0},{0,9},{16,9},{14,0}}]};
éléphant={sol,corps,oreille,tête,patteAvant,patteArrière,queue,défense,oeil};
Show[Graphics[éléphant],AspectRatio->Automatic]

u={14,0};v={2,9};
motif=éléphant/.{x_?NumberQ,y_?NumberQ}->{x+u[[1]] dx+v[[1]] dy,y+u[[2]] dx+v[[2]] dy};
pavage=Table[motif,{dx,0,4},{dy,0,4}];
Show[Graphics[pavage],AspectRatio->Automatic]

Exemple 3 : enchevêtrement

bout1={CMYKColor[0,1,1,0],Polygon[{{0,4},{5,1},{5,2},{0,5}}]};
bord1={Line[{{0,4},{5,1}}],Line[{{0,5},{5,2}}]};
bout2={CMYKColor[1,0.2`,0,0],Polygon[{{1,5},{0,3.5`},{0,2.5`},{1.5`,1.5`},{1,0},{2,0},{2.5`,1.5`},{2,2},{0.5`,3},{2,5}}]};
bord2={Line[{{1,5},{0,3.5`}}],Line[{{0,2.5`},{1.5`,1.5`},{1,0}}],Line[{{2,0},{2.5`,1.5`}}],Line[{{2,2},{0.5`,3},{2,5}}]};
bout3={CMYKColor[0,1,1,0],Polygon[{{0,1},{5,4},{5,5},{0,2}}]};
bord3={Line[{{0,1},{5,4}}],Line[{{5,5},{0,2}}]};
bout4={CMYKColor[0,0.2`,1,0],Polygon[{{3.5`,0},{4.5`,0},{5,0.5`},{4.5`,5},{3.5`,5},{4,0.5`}}]};bord4={Line[{{4.5`,0},{5,0.5`},{4.5`,5}}],Line[{{3.5`,0},{4,0.5`},{3.5`,5}}]};bout5={CMYKColor[1,0.2`,0,0],Polygon[{{5,3.5`},{5,2.5`},{2.5`,1.5`},{2,2}}]};
bord5={Line[{{5,3.5`},{2,2}}],Line[{{2.5`,1.5`},{5,2.5`}}]};
pavé={bout1,bord1,bout2,bord2,bout3,bord3,bout4,bord4,bout5,bord5};
Show[Graphics[pavé],AspectRatio->Automatic]

u={5,0};v={0,5};,motif=pavé/.{x_?NumberQ,y_?NumberQ}->{x+u[[1]] dx+v[[1]] dy,y+u[[2]] dx+v[[2]] dy};,pavage=Table[motif,{dx,0,6},{dy,0,4}];
Show[Graphics[pavage],AspectRatio->Automatic]

Exercice

Réalisez votre pavage en couleurs en vous inspirant des exemples 1 et 2.
1. Sur une feuille de papier quadrillée munie d'un repère cartésien, dessinez un motif de votre choix.
2. Décomposez votre motif en sous-motifs et approchez ces formes par des polygones, des disques et des traits.
3. Entrez les sous-motifs comme indiqué dans les exemples en faisant attention à l'ordre.
4. Vérifiez grâce à la fonction Show que le dessin entré correspond bien à ce que vous attendiez.
5. Définissez les directions de translation u et v qui permettront de construire le pavage.
6. Entrez la définition de motif (copy/paste en utilisant le nom de votre dessin).
7. Entrez la définition de la fonction pavage et visualisez votre pavage grâce à la fonction Show.