Comme j'ai abordé les patrons de pyramide en quatrième juste avant les vacances, je leur ai donné, suite à une activité dans le manuel Transmath 4e 2011, le problème suivant : trouver les patrons non superposables d'une pyramide non régulière à base triangulaire.
Énoncé de l'activité : Tracé des 16 patrons :
Code : Tout sélectionner
import geometry;
unitsize(1mm);
// Procédure pour tester la présence d'une valeur entière dans un tableau d'entiers
bool test(int[] A,int n) {
bool reponse=false;
for (int k=0;k<A.length;++k)
if (A[k]==n) reponse=true;
return reponse;
}
// Les faces
// - on choisit un triangle, t1, comme base
// - les faces latérales sont construites cinq fois, selon leur emplacement dans le patron.
// (on doit pouvoir faire beaucoup plus simple...)
triangle t1=triangleabc(85,75,90);
triangle t2=triangleabc(55,50,75);
triangle t3=triangleabc(60,55,85);
triangle t4=triangleabc(50,60,90);
point pA=t1.VA, pB=t1.VB, pC=t1.VC;
triangle t2=rotate(degrees(pC-pA)-degrees(pB-pA),pA)*t2;
point pD=t2.VC;
triangle t3=rotate(degrees(pC-pB)-degrees(pA-pB),pB)*shift(pB-(point)t3.VB)*t3;
point pE=t3.VC;
triangle t4=shift(pA-pB)*rotate(180,pB)*t4;
point pF=t4.VC;
triangle t23=rotate(degrees(pD-pC)-degrees(pE-pC),pC)*t3;
triangle t32=rotate(-degrees(pD-pC)+degrees(pE-pC),pC)*t2;
triangle t24=rotate(-degrees(pF-pA)+degrees(pD-pA),pA)*t4;
triangle t42=rotate(degrees(pF-pA)-degrees(pD-pA),pA)*t2;
triangle t34=rotate(degrees(pE-pB)-degrees(pF-pB),pB)*t4;
triangle t43=rotate(-degrees(pE-pB)+degrees(pF-pB),pB)*t3;
triangle t234=rotate(degrees(pD-pC)-degrees(pE-pC),pC)*t34;
triangle t243=rotate(-degrees(pF-pA)+degrees(pD-pA),pA)*t43;
triangle t342=rotate(degrees(pE-pB)-degrees(pF-pB),pB)*t42;
triangle t324=rotate(-degrees(pD-pC)+degrees(pE-pC),pC)*t24;
triangle t423=rotate(degrees(pF-pA)-degrees(pD-pA),pA)*t23;
triangle t432=rotate(-degrees(pE-pB)+degrees(pF-pB),pB)*t32;
// Tableau des indices des liaisons face - face
// Cela donne les faces à tracer pour chaque patron
int[][] P=new int[16][2];
// Énumération des combinaisons des liaisons
// Hormis les 4 boucles isolant une face (qui serait alors détachée du patron)
// Compteur
int n=0;
for (int a=0;a<6;++a)
for (int b=a+1;b<6;++b)
for (int c=b+1;c<6;++c) {
if (!(((a==0)&(b==1)&(c==3))|((a==0)&(b==2)&(c==4))|((a==1)&(b==2)&(c==5))|((a==3)&(b==4)&(c==5))))
{ P[n][0]=a;
P[n][1]=b;
P[n][2]=c;
draw(t1);
if (test(P[n],0)) draw(t2);
if (test(P[n],1)) draw(t3);
if (test(P[n],2)) draw(t4);
if (test(P[n],0)&test(P[n],3)) draw(t23);
if (test(P[n],0)&test(P[n],3)&test(P[n],5)) draw(t234);
if (test(P[n],1)&test(P[n],3)) draw(t32);
if (test(P[n],1)&test(P[n],3)&test(P[n],4)) draw(t324);
if (test(P[n],0)&test(P[n],4)) draw(t24);
if (test(P[n],0)&test(P[n],4)&test(P[n],5)) draw(t243);
if (test(P[n],2)&test(P[n],4)) draw(t42);
if (test(P[n],2)&test(P[n],4)&test(P[n],3)) draw(t423);
if (test(P[n],1)&test(P[n],5)) draw(t34);
if (test(P[n],1)&test(P[n],5)&test(P[n],4)) draw(t342);
if (test(P[n],2)&test(P[n],5)) draw(t43);
if (test(P[n],2)&test(P[n],5)&test(P[n],3)) draw(t432);
shipout(format="pdf",prefix=format("PyramidePatrons_%i",n));
erase();
++n;
}
}
Outre le fait que l'on doit pouvoir faire mieux, je pose une colle à Gaëtan car le code génère autant de fichiers que de patrons, mais termine par une page blanche.
Meilleurs vœux à toutes et à tous !
EDIT : correction d'une faute dans le 12e patron généré ; il y avait un 2 ou lieu de 4 dans le test.