diff options
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCVueCubes.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCVueCubes.tex | 344 |
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 |