%%% % Représenter un entier %%% \setKVdefault[ClesREntier]{Echelle=1,Unite=false,Compact=false,Impression=false,ListeCouleurs={Tomato,LightSteelBlue,LightGreen,Cornsilk}}% \newcommand\RepresenterEntier[2][]{% \useKVdefault[ClesREntier]% \setKV[ClesREntier]{#1}% \ifboolKV[ClesREntier]{Unite}{% \begin{Geometrie}[TypeTrace="Espace",CoinBG={u*(-10,-10)}] Echelle=\useKV[ClesREntier]{Echelle}; Initialisation(5,30,15,50*Echelle); color A,B,C,D,E,F,G,H; pointilles:="non"; trace Pave(A,B,C,D,E,F,G,H)(0.1,0.1,0.1); \end{Geometrie} }{% % On décompose le nombre \StrLen{#2}[\LongueurNombreEntier]% \xdef\FooListeEntier{} \xintFor* ##1 in{\xintSeq{1}{\LongueurNombreEntier}}\do{% \StrChar{#2}{##1}[\ChiffreAAjouter] \xdef\FooListeEntier{\FooListeEntier \ChiffreAAjouter,} } \setsepchar{,}\ignoreemptyitems \readlist*\ListeDesChiffres{\FooListeEntier}% \xdef\ListeAvantCouleurs{\useKV[ClesREntier]{ListeCouleurs}}% \readlist*\ListeCouleurEntier{\ListeAvantCouleurs}% \xintifboolexpr{\LongueurNombreEntier==4}{% \xdef\NombreMilliers{\ListeDesChiffres[1]}% \xdef\NombreCentaines{\ListeDesChiffres[2]}% \xdef\NombreDizaines{\ListeDesChiffres[3]}% \xdef\NombreUnites{\ListeDesChiffres[4]}% }{% \xintifboolexpr{\LongueurNombreEntier==3}{% \xdef\NombreMilliers{0}% \xdef\NombreCentaines{\ListeDesChiffres[1]}% \xdef\NombreDizaines{\ListeDesChiffres[2]}% \xdef\NombreUnites{\ListeDesChiffres[3]}% }{% \xintifboolexpr{\LongueurNombreEntier==2}{% \xdef\NombreMilliers{0}% \xdef\NombreCentaines{0}% \xdef\NombreDizaines{\ListeDesChiffres[1]}% \xdef\NombreUnites{\ListeDesChiffres[2]}% }{% \xdef\NombreMilliers{0}% \xdef\NombreCentaines{0}% \xdef\NombreDizaines{0}% \xdef\NombreUnites{\ListeDesChiffres[1]}% }% }% }% \begin{Geometrie}[TypeTrace="Espace",CoinBG={u*(-10,-10)},CoinHD={u*(20,20)}] Echelle=\useKV[ClesREntier]{Echelle}; NM=\NombreMilliers; NC=\NombreCentaines; ND=\NombreDizaines; NU=\NombreUnites; color ColorEntier[]; ColorEntier1=\ListeCouleurEntier[1]; ColorEntier2=\ListeCouleurEntier[2]; ColorEntier3=\ListeCouleurEntier[3]; ColorEntier4=\ListeCouleurEntier[4]; boolean Compact,Print; Compact=\useKV[ClesREntier]{Compact}; Print=\useKV[ClesREntier]{Impression}; Initialisation(5,30,15,50*Echelle); color A,B,C,D,E,F,G,H; picture TypePave[]; TypePave0=image( trace Pave(A,B,C,D,E,F,G,H)(1,1,1); currentpicture:=nullpicture; remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier1 fi; for k=0 upto 10: trace chemin((k/10)[A,B],(k/10)[F,G],(k/10)[E,H]); endfor; for k=0 upto 10: trace chemin((k/10)[B,C],(k/10)[G,H],(k/10)[F,E]); endfor; for k=0 upto 10: trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]); endfor; ); color A,B,C,D,E,F,G,H; TypePave1=image( trace Pave(A,B,C,D,E,F,G,H)(0.1,1,1); currentpicture:=nullpicture; remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier2 fi; trace chemin(C,H,E); for k=0 upto 10: trace chemin((k/10)[A,B],(k/10)[F,G],(k/10)[E,H]); endfor; for k=0 upto 10: trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]); endfor; ); color A,B,C,D,E,F,G,H; TypePave2=image( trace Pave(A,B,C,D,E,F,G,H)(0.1,0.1,1); currentpicture:=nullpicture; remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier3 fi; trace chemin(C,H,E); trace chemin(A,F,E); trace chemin(B,G,F); for k=0 upto 10: trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]); endfor; ); color A,B,C,D,E,F,G,H; TypePave3=image( trace Pave(A,B,C,D,E,F,G,H)(0.1,0.1,0.1); currentpicture:=nullpicture; remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier4 fi; trace chemin(C,H,E); trace chemin(A,F,E); trace chemin(A,B,C); trace chemin(F,G,H); trace chemin(B,G); ); if Compact: for k=0 upto (\NombreMilliers-1): trace TypePave0 shifted ((Projette((k,0,0))-Projette((0,0,0)))); endfor; for k=0 upto (\NombreCentaines-1): trace TypePave1 shifted ((Projette((0.1*k,1.5,0))-Projette((0,0,0)))); endfor; for k=0 upto (\NombreDizaines-1): trace TypePave2 shifted ((Projette((0.1*k,3,0))-Projette((0,0,0)))); endfor; for k=0 upto (\NombreUnites-1): trace TypePave3 shifted ((Projette((0,3.6,0.1*k))-Projette((0,0,0)))); endfor; else: for k=0 upto (\NombreMilliers-1): trace TypePave0 shifted ((Projette((0,1.1*(k-1),0))-Projette((0,0,0)))); endfor; for k=0 upto (\NombreCentaines-1): trace TypePave1 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(k-1),0))-Projette((0,0,0)))); endfor; for k=0 upto (\NombreDizaines-1): trace TypePave2 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(\NombreCentaines-1)+0.2+0.2*(k-1),0))-Projette((0,0,0)))); endfor; for k=0 upto (\NombreUnites-1): trace TypePave3 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(\NombreCentaines-1)+0.2+0.2*(\NombreDizaines-1),0.2*(k)))-Projette((0,0,0)))); endfor; fi; \end{Geometrie} } }