input geometriesyr16;

vardef cubegrillage(expr nbcase)=
  picture cubegri;
  color St[];
  numeric NbC;
  NbC=nbcase;
  cubegri=image(
    trace Cube(St1,St2,St3,St4,St5,St6,St7,St8);
    for k=1 upto (nbcase-1):
      trace chemin((k/nbcase)[St1,St2],(k/nbcase)[St6,St7],(k/nbcase)[St5,St8]);
      trace chemin((k/nbcase)[St1,St6],(k/nbcase)[St2,St7],(k/nbcase)[St3,St8]);
      trace chemin((k/nbcase)[St6,St5],(k/nbcase)[St7,St8],(k/nbcase)[St2,St3]);
    endfor;
    );
  cubegri
enddef;

vardef caseX(expr aa,bb)=
  path casex;
  casex=buildcycle(
    droite((aa/NbC)[St1,St2],(aa/NbC)[St6,St7]),
    droite((bb/NbC)[St1,St6],(bb/NbC)[St2,St7]),
    droite(((aa+1)/NbC)[St1,St2],((aa+1)/NbC)[St6,St7]),
    droite(((bb+1)/NbC)[St1,St6],((bb+1)/NbC)[St2,St7])
    );
  casex
enddef;

vardef caseY(expr aa,bb)=
  path casey;
  casey=buildcycle(
    droite((aa/NbC)[St2,St3],(aa/NbC)[St7,St8]),
    droite((bb/NbC)[St2,St7],(bb/NbC)[St3,St8]),
    droite(((aa+1)/NbC)[St2,St3],((aa+1)/NbC)[St7,St8]),
    droite(((bb+1)/NbC)[St2,St7],((bb+1)/NbC)[St3,St8])
    );
  casey
enddef;

vardef caseZ(expr aa,bb)=
  path casez;
  casez=buildcycle(
    droite((aa/NbC)[St6,St7],(aa/NbC)[St5,St8]),
    droite((bb/NbC)[St6,St5],(bb/NbC)[St7,St8]),
    droite(((aa+1)/NbC)[St6,St7],((aa+1)/NbC)[St5,St8]),
    droite(((bb+1)/NbC)[St6,St5],((bb+1)/NbC)[St7,St8])
    );
  casez
enddef;

figureespace(-10u,-10u,10u,10u);
Initialisation(5,30,40,1000);
pointilles:="non";
trace cubegrillage(3);
remplis caseX(0,0);
remplis caseX(1,0) withcolor rouge;
remplis caseY(1,1) withcolor jaune;
remplis caseY(2,1) withcolor bleu;
remplis caseY(1,2);
remplis caseY(2,2);
remplis caseZ(0,1) withcolor rouge;
remplis caseZ(0,2) withcolor bleu;
remplis caseZ(2,2) withcolor jaune;
trace cubegrillage(3) withpen pencircle scaled1.25bp;
fin;

figureespace(-10u,-10u,10u,10u);
Initialisation(5,45,30,1250);
pointilles:="non";
trace cubegrillage(4);
remplis caseX(1,1) withcolor bleu;
remplis caseX(1,2);
remplis caseX(1,3);
remplis caseX(3,3) withcolor jaune;
remplis caseY(0,0) withcolor vert;
remplis caseY(0,3) withcolor rouge;
remplis caseY(1,0) withcolor orange;
remplis caseY(1,2) withcolor vert;
remplis caseY(3,1) withcolor orange;
remplis caseY(3,2) withcolor bleu;
remplis caseZ(1,0);
remplis caseZ(1,1);
remplis caseZ(1,2) withcolor jaune;
remplis caseZ(2,1) withcolor rouge;
trace cubegrillage(4) withpen pencircle scaled1.25bp;
fin;

figureespace(-10u,-10u,10u,10u);
Initialisation(5,45,30,1250);
pointilles:="non";
trace cubegrillage(4);
remplis caseX(0,0) withcolor vert;
remplis caseX(0,1);
remplis caseX(0,2) withcolor orange;
remplis caseX(1,1);
remplis caseX(2,2) withcolor orange;
remplis caseX(3,0) withcolor rouge;
remplis caseY(3,0) withcolor vert;
remplis caseY(3,1) withcolor violet;
remplis caseY(3,2);
remplis caseY(3,3);
remplis caseZ(1,2) withcolor rouge;
remplis caseZ(3,3) withcolor violet;
trace cubegrillage(4) withpen pencircle scaled1.25bp;
fin;

figureespace(-10u,-10u,10u,10u);
Initialisation(5,45,30,1250);
pointilles:="non";
trace cubegrillage(5);
remplis caseX(4,3) withcolor jaune;
remplis caseY(0,4) withcolor bleu;
remplis caseY(1,4) withcolor rouge;
remplis caseY(2,2) withcolor violet;
remplis caseY(3,4) withcolor vert;
remplis caseZ(2,1) withcolor rouge;
remplis caseZ(2,2) withcolor vert;
remplis caseZ(3,2) withcolor bleu;
remplis caseZ(3,4) withcolor violet;
remplis caseZ(4,4) withcolor jaune;
trace cubegrillage(5) withpen pencircle scaled1.25bp;
fin;

end