diff options
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCMosaique.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCMosaique.tex | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCMosaique.tex b/macros/latex/contrib/profcollege/latex/PfCMosaique.tex new file mode 100644 index 0000000000..91936d597b --- /dev/null +++ b/macros/latex/contrib/profcollege/latex/PfCMosaique.tex @@ -0,0 +1,138 @@ +%%% +% Mosaique +%%% +\setKVdefault[ClesMosaique]{Largeur=2,Hauteur=2,Solution=false,Type=1,Label,Echelle=1cm} + +\newcommand\DessineMosaique[2][]{% + \useKVdefault[ClesMosaique]% + \setKV[ClesMosaique]{#1}% + \ifluatex% + \mplibforcehmode% + \begin{mplibcode} + u:=\useKV[ClesMosaique]{Echelle}; + Type:=\useKV[ClesMosaique]{Type}; + input PfCMosaique; + trace if Type=1:MosaiqueUn[#2] elseif Type=2: MosaiqueDeux[#2] fi; + \end{mplibcode}% + \else% + \begin{mpost}[mpsettings={u:=\useKV[ClesMosaique]{Echelle};Type:=\useKV[ClesMosaique]{Type};}]% + input PfCMosaique; + trace if Type=1:MosaiqueUn[#2] elseif Type=2: MosaiqueDeux[#2] fi; + \end{mpost}% + \fi% +}% + +\newcommand\DessineMosaiqueComplet[1]{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + input PfCMosaique; + Largeur=\useKV[ClesMosaique]{Largeur}; + Hauteur=\useKV[ClesMosaique]{Hauteur}; + Type=\useKV[ClesMosaique]{Type}; + boolean Solution,Label; + Solution=\useKV[ClesMosaique]{Solution}; + Label=\useKV[ClesMosaique]{Label}; + pair A,B,C,D; + A=u*(0,1); + B-A=u*(Largeur,0); + C-B=u*(0,-Hauteur); + D-C=A-B; + picture mosaique; + path case; + case=unitsquare scaled 1cm; + if Type=1: + mosaique=image( + trace case withcolor 0.5white; + trace (point(0) of case)--(point(2) of case) withcolor 0.75white; + trace (point(1) of case)--(point(3) of case) withcolor 0.75white; + trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white; + trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white; + ); + else: + mosaique=image( + trace case withcolor 0.5white; + trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white; + trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white; + trace (point(0.5) of case)--(point(1.5) of case)--(point(2.5) of case)--(point(3.5) of case)--cycle withcolor 0.75white; + ); + fi; + if Solution: + nbmos:=0; + for p_=#1: + trace if Type=1:MosaiqueUn[xpart(p_)] else: MosaiqueDeux[xpart(p_)] fi shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))); + nbmos:=nbmos+1; + endfor; + else: + nbmos:=0; + for p_=#1: + trace mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))); + if Label: + label(TEX("\num{"&decimal(ypart(p_))&"}"),center (mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))))); + fi; + nbmos:=nbmos+1; + endfor; + fi; + trace polygone(A,B,C,D); + \end{mplibcode} + \else + \begin{mpost}[mpsettings={Largeur=\useKV[ClesMosaique]{Largeur};Hauteur=\useKV[ClesMosaique]{Hauteur};Type=\useKV[ClesMosaique]{Type};boolean Solution,Label;Solution=\useKV[ClesMosaique]{Solution};}] + Label=\useKV[ClesMosaique]{Label}; + input PfCMosaique; + pair A,B,C,D; + A=u*(0,1); + B-A=u*(Largeur,0); + C-B=u*(0,-Hauteur); + D-C=A-B; + picture mosaique; + path case; + case=unitsquare scaled 1cm; + if Type=1: + mosaique=image( + trace case withcolor 0.5white; + trace (point(0) of case)--(point(2) of case) withcolor 0.75white; + trace (point(1) of case)--(point(3) of case) withcolor 0.75white; + trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white; + trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white; + ); + else: + mosaique=image( + trace case withcolor 0.5white; + trace (point(0.5) of case)--(point(2.5) of case) withcolor 0.75white; + trace (point(1.5) of case)--(point(3.5) of case) withcolor 0.75white; + trace (point(0.5) of case)--(point(1.5) of case)--(point(2.5) of case)--(point(3.5) of case)--cycle withcolor 0.75white; + ); + fi; + if Solution: + nbmos:=0; + for p_=#1: + trace if Type=1:MosaiqueUn[xpart(p_)] else: MosaiqueDeux[xpart(p_)] fi shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))); + nbmos:=nbmos+1; + endfor; + else: + nbmos:=0; + for p_=#1: + trace mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))); + if Label: + label(LATEX("\num{"&decimal(ypart(p_))&"}"),center (mosaique shifted(u*(nbmos mod Largeur,-(nbmos div Largeur))))); + fi; + nbmos:=nbmos+1; + endfor; + fi; + trace polygone(A,B,C,D); + \end{mpost} + \fi +}% + +\newtoks\toklistecaseM% +\def\UpdatetoksMosaique#1/#2\nil{\addtotok\toklistecaseM{(#1,#2),}}% + +\newcommand\Mosaique[2][]{% + \useKVdefault[ClesMosaique]% + \setKV[ClesMosaique]{#1}% + \setsepchar[*]{,*/}% + \readlist*\ListeMosaique{#2}% + \toklistecaseM{}% + \foreachitem\compteur\in\ListeMosaique{\expandafter\UpdatetoksMosaique\compteur\nil}% + \DessineMosaiqueComplet{\the\toklistecaseM}% +}%
\ No newline at end of file |