Juste un exemple de pavage que j'ai demandé de faire à mes élèves de sixième. Ils devaient remplir une page A4.
Comme d'habitude, je prends les améliorations du code que vous suggérerez

*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***
- CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
- import geometry;
- // Changez l'unité de longueur pour remplir une page A4.
- // Avec 1cm, l'image obtenue est trop grande pour être acceptée par le forum.
- unitsize(2.5mm);
- // unitsize(1cm);
- point pA=(0,0), pB=shift((4,0))*pA, pC=rotate(60,pA)*pB;
- void Pave(point P=pA) {
- // Figures de base
- point pa=P, pb=shift((4,0))*pa, pc=rotate(60,pa)*pb;
- path tri=pa--pb--pc--cycle,
- carre=pa--pb--rotate(-90,pb)*pa--rotate(90,pa)*pb--cycle,
- losa=pa--reflect(line(pa,pb))*pc--pb--pc--cycle;
- // Un pavé
- path L1=rotate(30,pa)*losa;
- path L2=rotate(150,pa)*losa;
- path L3=rotate(270,pa)*losa;
- path C1=shift((rotate(210,pa)*pb-pa)+(pa-pb))*carre;
- path C2=shift(rotate(210,pa)*pb-pa+(pa-pc))*rotate(-30,pa)*carre;
- path C3=shift((rotate(270,pa)*pb-pa)+(pb-pc))*rotate(30,pa)*carre;
- path T1=shift(rotate(270,pa)*pb-pa+(pa-pc))*tri;
- path T2=shift((rotate(210,pa)*pb-pa)+(pa-pb))*rotate(-60,pa)*tri;
- filldraw(L1,cyan,black);
- filldraw(L2,magenta,black);
- filldraw(L3,yellow,black);
- filldraw(C1,lightblue,black);
- filldraw(C2,blue,black);
- filldraw(C3,deepblue,black);
- filldraw(T1,lightgreen,black);
- filldraw(T2,lightred,black);
- }
- // Translations du pavage
- vector u=rotate(-30,pA)*(pB-pA)+(pB-pA)+rotate(30,pA)*(pB-pA), v=rotate(60,pA)*u;
- // Remplissage
- for(int i=0; i<3; ++i){
- for(int j=0; j<4; ++j){
- Pave((i-quotient(j,2))*u+j*v);
- }
- }
- path pageA4=(0,0)--(21,0)--(21,29.7)--(0,29.7)--cycle;
- clip(pageA4);