summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCVueCubes.tex')
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCVueCubes.tex344
1 files changed, 344 insertions, 0 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex b/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex
new file mode 100644
index 0000000000..5afdcfecaa
--- /dev/null
+++ b/macros/latex/contrib/profcollege/latex/PfCVueCubes.tex
@@ -0,0 +1,344 @@
+%%%
+% Vue Cubes
+%%%
+\setKVdefault[VueCubes]{Solution=false,Hauteur=5,Profondeur=4,Largeur=3,Angle=60,Nom=Ex1,Trou=false,Echelle=0.25,CouleurCube=LightSteelBlue,CouleurFleche=LightGray,Face=false,Creation=false,Grilles=false}
+
+\newtoks\toklisteVueCube%
+\def\UpdatetoksVueCube#1\nil{\addtotok\toklisteVueCube{#1,}}%
+
+\NewDocumentCommand\VueCubes{o m}{%
+ \useKVdefault[VueCubes]%
+ \setKV[VueCubes]{#1}
+ \ifboolKV[VueCubes]{Solution}{%
+ \BuildVueCubesSolution%
+ }{%
+ \ifboolKV[VueCubes]{Creation}{%Le nombre de données doit être compatible avec le "volume du pavé droit"
+ \ignoreemptyitems%
+ \readlist*\PfCListeHauteursCubes{#2}%
+ \reademptyitems%
+ \toklisteVueCube{}%
+ \foreachitem\compteur\in\PfCListeHauteursCubes{\expandafter\UpdatetoksVueCube\compteur\nil}%
+ \BuildVueCubes{\useKV[VueCubes]{Angle}}{\the\toklisteVueCube}%
+ }{%
+ \BuildVueCubes{\useKV[VueCubes]{Angle}}{}%
+ }%
+ }%
+}%
+
+\NewDocumentCommand\BuildVueCubes{m m}{%
+ \ifluatex
+ \mplibforcehmode
+ \xdef\PfCVueCubeNom{\useKV[VueCubes]{Nom}}%
+ \begin{mplibcode}[\PfCVueCubeNom]
+ input PfCSolid;
+
+ intensite:=1.5;
+
+ Ferme[0]:=false;
+ outcolor:=\useKV[VueCubes]{CouleurCube};
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+
+ Profondeur:=\useKV[VueCubes]{Profondeur};
+ Largeur:=\useKV[VueCubes]{Largeur};
+ Hauteur:=\useKV[VueCubes]{Hauteur};
+ Phi:=#1;
+ Echelle:=\useKV[VueCubes]{Echelle};
+
+ color CouleurFleche;
+ CouleurFleche:=\useKV[VueCubes]{CouleurFleche};
+
+ boolean Trou,FaceVue,Creation,Grille;
+ Trou:=\useKV[VueCubes]{Trou};
+ FaceVue:=\useKV[VueCubes]{Face};
+ Creation:=\useKV[VueCubes]{Creation};
+ Grille:=\useKV[VueCubes]{Grilles};
+
+ TotalObj:=0;
+
+ vardef CreationSolide(text t)=
+ PfCnbcubes:=0;
+ for p_=t:
+ m:=(PfCnbcubes div Profondeur);
+ k:=(PfCnbcubes mod Profondeur);
+ hauteurtour[m+1][k+1]:=p_;
+ for l=1 upto hauteurtour[m+1][k+1]:
+ TotalObj:=incr TotalObj;
+ TR:=(-Echelle*k,(m+1)*Echelle,Echelle*l-Echelle/2);
+ ObjetDeplacement[TotalObj](0);
+ endfor;
+ PfCnbcubes:=incr PfCnbcubes;
+ endfor;
+ enddef;
+
+ Initialisation(2500,Phi,20,50);
+ Objetcube0("a="&decimal(Echelle));
+
+ if Creation:
+ CreationSolide(#2);
+ else:
+ for k=1 upto Profondeur:%4 profondeur
+ hauteurtour[0][k]:=Hauteur;%5 hauteur totale
+ endfor;
+ for m=1 upto Largeur:%3 largeur
+ for k=1 upto Profondeur:%4 profondeur
+ if Trou:
+ if m>1:
+ hauteurtour[m][k]:=floor(uniformdeviate(hauteurtour[m-1][k]+1));%5 hauteur totale
+ else:
+ hauteurtour[m][k]:=1+floor(uniformdeviate(hauteurtour[m-1][k]));%5 hauteur totale
+ fi;
+ else:
+ hauteurtour[m][k]:=1+floor(uniformdeviate(hauteurtour[m-1][k]));%5 hauteur totale
+ fi;
+ for l=1 upto hauteurtour[m][k]:
+ TotalObj:=incr TotalObj;
+ TR:=(-Echelle*(k-1),m*Echelle,Echelle*l-Echelle/2);
+ ObjetDeplacement[TotalObj](0);
+ endfor;
+ endfor;
+ endfor;
+ fi;
+
+ % Pour la fleche
+ path Fleche;
+ color A[];
+ if FaceVue:
+ A0=Echelle*(1,Largeur/2,0);
+ A1-A0=0.25*(2,2,0);
+ A2-A1=0.25*(0,-1,0);
+ A3-A2=0.25*(2,0,0);
+ A4-A3=0.25*(0,-2,0);
+ A5-A4=A2-A3;
+ A6-A5=A2-A1;
+ Fleche=Projette(A0)--Projette(A1)--Projette(A2)--Projette(A3)--Projette(A4)--Projette(A5)--Projette(A6)--cycle;
+ fill Fleche withcolor CouleurFleche;
+ draw Fleche;
+ fi;
+
+ nbobj:=TotalObj;
+ DessineFusion;
+
+ if Grille:
+ % dessus
+ color Ad[];
+ Ad0=(0.5Echelle,0.5*Echelle,-0.5);
+ Ad1-Ad0=(0,Largeur*Echelle,0);
+ Ad2-Ad1=(-Profondeur*Echelle,0,0);
+ Ad3-Ad2=Ad0-Ad1;
+ draw Projette(Ad0) for k=1 upto 3: --Projette(Ad[k]) endfor --cycle;
+ for k=1 upto Largeur-1:
+ draw Projette((k/Largeur)[Ad0,Ad1])--Projette((k/Largeur)[Ad3,Ad2]);
+ endfor;
+ for k=1 upto Profondeur-1:
+ draw Projette((k/Profondeur)[Ad0,Ad3])--Projette((k/Profondeur)[Ad1,Ad2]);
+ endfor;
+ % face
+ color Af[];
+ Af0=(-1-Profondeur*Echelle,0.5*Echelle,0);
+ Af1-Af0=(0,Largeur*Echelle,0);
+ Af2-Af1=(0,0,Hauteur*Echelle);
+ Af3-Af2=Af0-Af1;
+ draw Projette(Af0) for k=1 upto 3: --Projette(Af[k]) endfor --cycle;
+ for k=1 upto Largeur-1:
+ draw Projette((k/Largeur)[Af0,Af1])--Projette((k/Largeur)[Af3,Af2]);
+ endfor;
+ for k=1 upto Hauteur-1:
+ draw Projette((k/Hauteur)[Af0,Af3])--Projette((k/Hauteur)[Af1,Af2]);
+ endfor;
+ % droite
+ color Adg[];
+ Adg0=(0.5Echelle,-Largeur*Echelle-1,0);
+ Adg1-Adg0=(-Profondeur*Echelle,0,0);
+ Adg2-Adg1=(0,0,Hauteur*Echelle);
+ Adg3-Adg2=Adg0-Adg1;
+ draw Projette(Adg0) for k=1 upto 3: --Projette(Adg[k]) endfor --cycle;
+ for k=1 upto Profondeur-1:
+ draw Projette((k/Profondeur)[Adg0,Adg1])--Projette((k/Profondeur)[Adg3,Adg2]);
+ endfor;
+ for k=1 upto Hauteur-1:
+ draw Projette((k/Hauteur)[Adg0,Adg3])--Projette((k/Hauteur)[Adg1,Adg2]);
+ endfor;
+ fi;
+
+ %draw (llcorner currentpicture)--(lrcorner currentpicture)--(urcorner currentpicture)--(ulcorner currentpicture)--cycle;
+ \end{mplibcode}
+ \ifboolKV[VueCubes]{Grilles}{}{%
+ \hspace*{1.5cm}
+ \begin{mplibcode}[\PfCVueCubeNom]
+ input PfCSolid;
+
+ intensite:=1.5;
+
+ Ferme[0]:=false;
+ outcolor:=\useKV[VueCubes]{CouleurCube};
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+
+ Profondeur:=\useKV[VueCubes]{Profondeur};
+ Largeur:=\useKV[VueCubes]{Largeur};
+ Hauteur:=\useKV[VueCubes]{Hauteur};
+ Phi:=#1;
+ Echelle:=\useKV[VueCubes]{Echelle};
+
+ color CouleurFleche;
+ CouleurFleche:=\useKV[VueCubes]{CouleurFleche};
+
+ TotalObj:=0;
+
+ Initialisation(2500,Phi+90,30,50);
+ Objetcube0("a="&decimal(Echelle));
+
+ for m=1 upto Largeur:%3 largeur
+ for k=1 upto Profondeur:%4 profondeur
+ for l=1 upto hauteurtour[m][k]:
+ TotalObj:=incr TotalObj;
+ TR:=(-Echelle*(k-1),m*Echelle,Echelle*l-Echelle/2);%TR:=(-0.5*(k-1),m*0.5,l/2-0.25);
+ ObjetDeplacement[TotalObj](0);
+ endfor;
+ endfor;
+ endfor;
+
+ if Grille:
+ undraw Projette(Ad0) for k=1 upto 3: --Projette(Ad[k]) endfor --cycle;
+ undraw Projette(Af0) for k=1 upto 3: --Projette(Af[k]) endfor --cycle;
+ undraw Projette(Adg0) for k=1 upto 3: --Projette(Adg[k]) endfor --cycle;
+ fi;
+
+ path Fleche;
+ if FaceVue:
+ Fleche=Projette(A0)--Projette(A1)--Projette(A2)--Projette(A3)--Projette(A4)--Projette(A5)--Projette(A6)--cycle;
+ fill Fleche withcolor CouleurFleche;
+ draw Fleche;
+ fi;
+
+ nbobj:=TotalObj;
+ DessineFusion;
+ \end{mplibcode}
+ }%
+ \fi
+}%
+
+\NewDocumentCommand\BuildVueCubesSolution{}{%
+ \ifluatex%
+ \xdef\PfCVueCubeNom{\useKV[VueCubes]{Nom}}%
+ \begin{NiceTabular}{ccc}%
+ Vue de face&Vue de dessus&Vue de gauche\\
+ {\begin{mplibcode}[\PfCVueCubeNom]
+ input PfCSolid;
+
+ intensite:=1.5;
+
+ Ferme[0]:=false;
+ outcolor:=\useKV[VueCubes]{CouleurCube};
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+
+ Profondeur:=\useKV[VueCubes]{Profondeur};
+ Largeur:=\useKV[VueCubes]{Largeur};
+ Hauteur:=\useKV[VueCubes]{Hauteur};
+ Phi:=0;
+ Echelle:=\useKV[VueCubes]{Echelle};
+
+ color CouleurFleche;
+ CouleurFleche:=\useKV[VueCubes]{CouleurFleche};
+
+ TotalObj:=0;
+
+ Initialisation(2500,Phi,0,50);
+ Objetcube0("a="&decimal(Echelle));
+
+ for m=1 upto Largeur:%3 largeur
+ for k=1 upto Profondeur:%4 profondeur
+ for l=1 upto hauteurtour[m][k]:
+ TotalObj:=incr TotalObj;
+ TR:=(-Echelle*(k-1),m*Echelle,Echelle*l-Echelle/2);%TR:=(-0.5*(k-1),m*0.5,l/2-0.25);
+ ObjetDeplacement[TotalObj](0);
+ endfor;
+ endfor;
+ endfor;
+
+ nbobj:=TotalObj;
+ DessineFusion;
+ \end{mplibcode}}&
+ {\begin{mplibcode}[\PfCVueCubeNom]
+ input PfCSolid;
+
+ intensite:=1.5;
+
+ Ferme[0]:=false;
+ outcolor:=\useKV[VueCubes]{CouleurCube};
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+
+ Profondeur:=\useKV[VueCubes]{Profondeur};
+ Largeur:=\useKV[VueCubes]{Largeur};
+ Hauteur:=\useKV[VueCubes]{Hauteur};
+ Phi:=0;
+ Echelle:=\useKV[VueCubes]{Echelle};
+
+ color CouleurFleche;
+ CouleurFleche:=\useKV[VueCubes]{CouleurFleche};
+
+ TotalObj:=0;
+
+ Initialisation(2500,Phi,90,50);
+ Objetcube0("a="&decimal(Echelle));
+
+ for m=1 upto Largeur:%3 largeur
+ for k=1 upto Profondeur:%4 profondeur
+ for l=1 upto hauteurtour[m][k]:
+ TotalObj:=incr TotalObj;
+ TR:=(-Echelle*(k-1),m*Echelle,Echelle*l-Echelle/2);%TR:=(-0.5*(k-1),m*0.5,l/2-0.25);
+ ObjetDeplacement[TotalObj](0);
+ endfor;
+ endfor;
+ endfor;
+
+ nbobj:=TotalObj;
+ DessineFusion;
+ \end{mplibcode}}&{\begin{mplibcode}[\PfCVueCubeNom]
+ input PfCSolid;
+
+ intensite:=1.5;
+
+ Ferme[0]:=false;
+ outcolor:=\useKV[VueCubes]{CouleurCube};
+ incolor:=white;
+ nb:=1;subh:=1;
+ creux:=true;
+
+ Profondeur:=\useKV[VueCubes]{Profondeur};
+ Largeur:=\useKV[VueCubes]{Largeur};
+ Hauteur:=\useKV[VueCubes]{Hauteur};
+ Phi:=-90;
+ Echelle:=\useKV[VueCubes]{Echelle};
+
+ color CouleurFleche;
+ CouleurFleche:=\useKV[VueCubes]{CouleurFleche};
+
+ TotalObj:=0;
+
+ Initialisation(2500,Phi,0,50);
+ Objetcube0("a="&decimal(Echelle));
+
+ for m=1 upto Largeur:%3 largeur
+ for k=1 upto Profondeur:%4 profondeur
+ for l=1 upto hauteurtour[m][k]:
+ TotalObj:=incr TotalObj;
+ TR:=(-Echelle*(k-1),m*Echelle,Echelle*l-Echelle/2);%TR:=(-0.5*(k-1),m*0.5,l/2-0.25);
+ ObjetDeplacement[TotalObj](0);
+ endfor;
+ endfor;
+ endfor;
+
+ nbobj:=TotalObj;
+ DessineFusion;
+ \end{mplibcode}}\\
+ \end{NiceTabular}%
+ \fi%
+}% \ No newline at end of file