\clearpage
\section{Les solides}\label{DocSolides}\PfCMAJ{0.99-z-c}
\index{Solides}\index[cle]{Solide@\lstinline+\Solide+}
\begin{tcolorbox}[tikzRemarque]
  Cette commande est uniquement disponible en compilant avec \hologo{LuaLaTeX}.
\end{tcolorbox}
La commande \lstinline!\Solide! permet de tracer une représentation de
certains solides ainsi que leurs sections. Elle a la forme suivante :
\begin{lstlisting}[escapechar=!,aboveskip=1em,belowskip=0.5em]
  \Solide[!\sffamily\textlangle clés\textrangle!]
\end{lstlisting}
où \textlangle\lstinline!clés!\textrangle{} constituent un ensemble
d'options pour paramétrer l'environnement.

\bigskip

La méthode de représentation est basée sur le principe suivant :
\begin{center}
  \includegraphics{SolideChoixVue-1}
\end{center}
Les coordonnées de l'objet, ici le cube violet, sont données sous
forme d'un triplet\footnote{C'est un type \lstinline!color! de \MP.} dans le repère $Oxyz$. Les coordonnées du
point de vue $V$, sont données dans ce même repère en coordonnées
sphériques sous la forme \lstinline!(22,20,30)!.
\begin{tcolorbox}[tikzcle]
  \index[cle]{Solide@\lstinline+\Solide+!Phi|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!Theta|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!Distance|mygobble}
  \begin{Key}{Phi}{30}
  modifie la première coordonnée du point de vue utilisé.
\end{Key}
\begin{Key}{Theta}{20}
  modifie la deuxième coordonnée du point de vue utilisé.
\end{Key}
\begin{Key}{Distance}{50}
  modifie la distance entre le point de vue et le plan de projection.
\end{Key}
\end{tcolorbox}
\clearpage
\begin{Codes}[listing side text]{0.3}{}
% Par défaut, la commande représente un cube nommé.
\Solide[]
\end{Codes}
\begin{tcolorbox}[tikzcle]
  \index[cle]{Solide@\lstinline+\Solide+!Aretes|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!Sommets|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!Sommets!ListeSommets|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!Traces|mygobble}
\begin{Key}{Aretes}{true}
  efface, lorqu'elle est positionnée à \lstinline!false!, le tracé des
  arêtes.
\end{Key}
\begin{Key}{Sommets}{true}
  efface, lorqu'elle est positionnée à \lstinline!false!, le tracé des
  arêtes.
  \begin{SousDescription}
    \item[La clé
      \Cle{ListeSommets}]\DefautR{\ttfamily{\{A,B,C,D,E,F,G,H\}}}
      modifie le nom des sommets du cube.
  \end{SousDescription}
\end{Key}
\begin{Key}{Traces}{-}
  permet d'ajouter des tracés au cube considéré.
\end{Key}
\end{tcolorbox}
\begin{Codes}[listing side text]{0.35}{}
\Solide[Aretes=false]
\end{Codes}
\begin{Codes}[listing side text]{0.35}{}
\Solide[Sommets=false]
\end{Codes}
\begin{Codes}[listing side text]{0.35}{}
\Solide[ListeSommets={Q,R,S,T,U,V,W,X}]
\end{Codes}
\begin{Codes}[listing side text,listing options={frame=,classoffset=1,deletekeywords={E,Espace,Cube},classoffset=1}]{0.35}{}
\Solide[%
Traces={
  trace segment(A,C) dashed evenly;
  trace segment(A,H) dashed evenly;
  trace appelation(E,H,3mm,btex 5 cm etex);
  trace codeperp(D,E,H,5);
}
]
\end{Codes}
\begin{tcolorbox}[tikzcle]
  \index[cle]{Solide@\lstinline+\Solide+!Nom|mygobble}
\begin{Key}{Nom}{cube}
  modifie le solide affiché. Les noms possibles sont : \lstinline!pave!, \lstinline!cylindre!, \lstinline!cone!, \lstinline!pyramide!, \lstinline!sphere! et \lstinline!boule!\footnotemark.
\end{Key}
\end{tcolorbox}
\footnotetext{Cette clé n'apporte rien car elle renvoie sur le choix \lstinline!sphere!.}
\paragraph{Cas d'un pavé}\hfil\newline
\begin{tcolorbox}[tikzcle]
  \index[cle]{Solide@\lstinline+\Solide+!Largeur|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!Hauteur|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!Profondeur|mygobble}
  \begin{KEYS}{\Cle{Largeur}/\Cle{Hauteur}/\Cle{Profondeur}}{1.5/1/0.75}
    modifient respectivement la largeur, la hauteur et la profondeur du pavé droit affiché.
    \begin{SousDescription}
      \item[Les clés \Cle{Aretes}, \Cle{Sommets} et \Cle{ListeSommets}] sont aussi disponibles.
    \end{SousDescription}
  \end{KEYS}
  \end{tcolorbox}
\begin{multicols}{2}
  \begin{Codes}[]{0.4}{}
\Solide[%
Nom=pave]
\end{Codes}
  \begin{Codes}[]{0.4}{}
\Solide[%
Nom=pave,
Largeur=1,
Hauteur=0.75,
Profondeur=1.5
]
\end{Codes}
\end{multicols}
Dans le deuxième cas, les noms des sommets sont mal positionnés. On y rémedie de la façon suivante.
\begin{Codes}[listing side text,listing options={frame=,classoffset=1,deletekeywords={Label},classoffset=1}]{0.4}{}
\Solide[%
Nom=pave,
Largeur=1,
Hauteur=0.75,
Profondeur=1.5,
Sommets=false,
Traces={%
  Label.bot(btex D etex,D);
  Label.top(btex G etex,G);
}
]  
\end{Codes}
\clearpage
\paragraph{Cas du cylindre}\hfil\newline
\begin{tcolorbox}[tikzcle]
  \index[cle]{Solide@\lstinline+\Solide+!RayonCylindre|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!HauteurCylindre|mygobble}
\begin{KEYS}{\Cle{RayonCylindre}/\Cle{HauteurCylindre}}{1/2}
  modifient respectivement le rayon et la hauteur du cylindre affiché.
\end{KEYS}
\begin{Key}{Anglex}{0}\index[cle]{Solide@\lstinline+\Solide+!Anglex|mygobble}
  modifie l'angle de rotation autour de l'axe des abscisses que subit le cylindre.
\end{Key}
\end{tcolorbox}
Dans le cas d'un cylindre, la clé \Cle{ListeSommets} représente les centres des bases mais les noms ne sont pas affichés.
\begin{multicols}{2}
  \begin{Codes}[]{0.4}{}
\Solide[%
Nom=cylindre]
\end{Codes}
  \begin{Codes}[]{0.4}{}
\Solide[%
Nom=cylindre,
RayonCylindre=1.5,
HauteurCylindre=1.5
]
\end{Codes}
\end{multicols}
\begin{Codes}[listing side text,listing options={frame=,classoffset=1,deletekeywords={Label},classoffset=1}]{0.4}{}
\Solide[%
Nom=cylindre,
Anglex=70,
ListeSommets={A,B},
Axes,
Traces={%
  Label.llft(btex B etex,B);
  Label.urt(btex A etex,A);
}
]
\end{Codes}
\clearpage
\paragraph{Cas de la pyramide}\hfil\newline
\begin{tcolorbox}[tikzcle]
  \index[cle]{Solide@\lstinline+\Solide+!Reguliere|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!SommetsPyramide|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!DecalageSommet|mygobble}
\begin{Key}{Reguliere}{false}
  affiche une pyramide régulière.
\end{Key}
\begin{Key}{SommetsPyramide}{5}
  modifie le nombre de sommets de la pyramide.
\end{Key}
\begin{Key}{DecalageSommet}{(0,0,0)}
  décale le sommet de la pyramide en utilisant le vecteur indiqué.
\end{Key}
\textbf{La clé \Cle{Anglex}} est aussi disponible pour la pyramide.
\end{tcolorbox}
\begin{multicols}{2}
  \begin{Codes}[]{0.4}{}
\Solide[Nom=pyramide]    
\end{Codes}
  \begin{Codes}[]{0.4}{}
\Solide[Nom=pyramide,Reguliere]
\end{Codes}
\end{multicols}

\begin{Codes}[listing side text,listing options={frame=,classoffset=1,deletekeywords={Label},classoffset=1}]{0.4}{}
\Solide[%
Nom=pyramide,
SommetsPyramide=8,
Anglex=180,
Sommets=false,
Traces={%
  Label.bot(btex A etex,A);
  Label.lft(btex H etex,H);
}]
\end{Codes}

\begin{multicols}{2}
  \begin{Codes}[]{0.4}{}
\Solide[Nom=pyramide]    
\end{Codes}
  \begin{Codes}[]{0.4}{}
\Solide[Nom=pyramide,DecalageSommet={(1,1,0)}]
\end{Codes}
\end{multicols}
\clearpage
\paragraph{Cas du cône}\hfil\newline
\begin{tcolorbox}[tikzcle]
  \index[cle]{Solide@\lstinline+\Solide+!RayonCone|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!HauteurCone|mygobble}
\begin{KEYSl}{\Cle{RayonCone}/\Cle{HauteurCone}}{1/2}
  modifient respectivement le rayon et la hauteur du cône affiché.
\end{KEYSl}
\end{tcolorbox}
Dans le cas d'un cône, la clé \Cle{ListeSommets} représente le centre de la base et le sommet du cône mais ils ne sont pas affichés. De plus, la clé \Cle{Anglex} est aussi disponible.
\begin{multicols}{2}
  \begin{Codes}[]{0.4}{}
\Solide[%
Nom=cone]
\end{Codes}
  \begin{Codes}[]{0.4}{}
\Solide[%
Nom=cone,
RayonCone=1.5,
HauteurCone=1.5
]
\end{Codes}
\end{multicols}
\begin{Codes}[listing side text,listing options={frame=,classoffset=1,deletekeywords={Label},classoffset=1}]{0.4}{}
\Solide[%
Nom=cone,
Anglex=70,
ListeSommets={A,B},
Axes,
Traces={%
  Label.llft(btex B etex,B);
  Label.urt(btex A etex,A);
}
]
\end{Codes}
\clearpage
\paragraph{Cas de la sphère (ou la boule)}\hfill\newline
\begin{tcolorbox}[tikzRemarque]
  Cette section est expérimentale. L'angle $\phi$ est fixe et égal à 0, l'angle $\theta$ est fixe et égal à 10.
\end{tcolorbox}
\begin{tcolorbox}[tikzcle]
  \index[cle]{Solide@\lstinline+\Solide+!RayonSphere|mygobble}
\begin{Key}{RayonSphere}{1}
  modifie le rayon de la sphère affichée.
\end{Key}
\end{tcolorbox}
\textbf{Les clés \Cle{ListeSommets} et \Cle{Anglex}} sont aussi disponibles.
Dans le cas d'une sphère, la clé \Cle{ListeSommets} représente le centre de la sphère un point de \og l'équateur\fg{} mais les noms ne sont pas affichés.
\begin{multicols}{2}
  \begin{Codes}[]{0.4}{}
\Solide[%
Nom=sphere]
\end{Codes}
  \begin{Codes}[]{0.4}{}
\Solide[%
Nom=sphere,
RayonSphere=1.5
]
\end{Codes}
\end{multicols}
  \begin{Codes}[listing side text]{0.4}{}
\Solide[%
Nom=sphere,
Anglex=-30,
ListeSommets={A,B},
Axes,
Traces={%
  DotLabel.lrt(btex B etex,B);
  DotLabel.ulft(btex A etex,A);
}
]
\end{Codes}
\clearpage
\paragraph{Sections de ces solides}
On peut construire des sections de ces solides.
\begin{tcolorbox}[tikzcle]
  \index[cle]{Solide@\lstinline+\Solide+!Section|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!Section!PointsSection|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!Section!CouleurSection|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!CoefSection|mygobble}
  \index[cle]{Solide@\lstinline+\Solide+!ObjetSection|mygobble}
\begin{Key}{Section}{}
  affiche une section du solide choisi.
  \begin{SousDescription}
  \item[La clé \Cle{PointsSection}]\DefautR{M,N,O,P}
    modifie le nom des points intervenant dans la section considérée.
  \item[La clé \Cle{CouleurSection}]\DefautR{-}
    modifie la couleur de remplissage de la section.
    \item[La clé \Cle{CoefSection}]\DefautR{0.3}
      modifie la position du plan de coupe.
    \item[La clé \Cle{ObjetSection}]\DefautR{0.5,E,H,0.25,F,G,G,B}
  modifie, dans le cas du pavé droit, la position du plan de coupe et l'arête/face considérée pour la section. Par défaut, le premier point de la section est au milieu de $[EH]$, au quart de $[FG]$ (en partant de $F$) et la section se fera parallèlement à l'arête $[GB]$ (donnée dans cet ordre).
  \end{SousDescription}
\end{Key}
\end{tcolorbox}
\begin{description}
\item[cas de la sphère]\hfil\newline
  \begin{Codes}[listing side text]{0.4}{}
\Solide[%
Nom=sphere,
Distance=70,
Anglex=50,
Axes,
Section,
CoefSection=0.5,
CouleurSection=LightSteelBlue,
ListeSommets={O},
PointsSection={M,N},
Traces={
  trace chemin(O,N,M) dashed evenly;
  trace codeperp(O,M,N,5);
  DotLabel.llft(btex M etex,M);
  DotLabel.urt(btex N etex,N);
  DotLabel.llft(btex O etex,O);
  }
]%
\end{Codes}
\item[cas du cône]\hfil\newline
\begin{Codes}[listing side text]{0.375}{}
\Solide[%
Nom=cone,
Distance=60,
Anglex=-50,
Axes,
Section,
CoefSection=0.7,%7/10 de [AB] en partant de A
CouleurSection=Cornsilk,
ListeSommets={A,B},
PointsSection={I,J},
Traces={
  DotLabel.bot(btex I etex,I);
  DotLabel.bot(btex B etex,B);
  DotLabel.top(btex A etex,A);
}
]%
\end{Codes}
\clearpage
\item[cas de la pyramide]\hfil\newline
\begin{Codes}[listing side text,listing options={frame=,classoffset=1,deletekeywords={E,Label},classoffset=1}]{0.35}{}
\Solide[%
Nom=pyramide,
SommetsPyramide=6,
Distance=70,
Phi=50,
Section,
CoefSection=0.6,
CouleurSection=Cornsilk,
ListeSommets={A,B,C,D,E,F},
PointsSection={I,J,K,L,M,N},
Traces={
  trace segment(A,PiedHauteur) dashed evenly;
  trace codeperp(A,PiedHauteur,B,5);
  Label.lft(btex I etex,I);
}
]%
\end{Codes}
\item[cas du cylindre]\hfil\newline
\begin{Codes}[listing side text,listing options={frame=,classoffset=1,deletekeywords={Label},classoffset=1}]{0.4}{}
\Solide[%
Nom=cylindre,
Phi=70,
Distance=50,
Axes,
Section="parallele",
CoefSection=-0.3,
CouleurSection=PaleGreen,
ListeSommets={R,S},
Traces={
  Label.lft(btex R etex,R);
  Label.lft(btex S etex,S);
}
]%
\end{Codes}
\begin{Codes}[listing side text,listing options={frame=,classoffset=1,deletekeywords={Label},classoffset=1}]{0.4}{}
\Solide[%
Nom=cylindre,
Distance=50,
Anglex=90,
Axes,
Section="face",
CoefSection=0.3,
CouleurSection=PaleGreen,
ListeSommets={R,S},
PointsSection={I,J,K,L,M},
Traces={
  Label.top(btex R etex,R);
  Label.top(btex S etex,S);
  DotLabel.urt(btex M etex,M);
}
]%
\end{Codes}
\clearpage
\item[cas du pavé droit / du cube]
  \item[]
  \begin{Codes}[listing side text,listing options={frame=,classoffset=1,deletekeywords={Label},classoffset=1}]{0.4}{}
\Solide[%
Nom=pave,
Phi=70,
Distance=100,
Section="arete",
CouleurSection=PaleGreen,
PointsSection={K,L,M,N},
Traces={
  Label.urt(btex K etex,K);
  Label.lft(btex L etex,L);
  Label.llft(btex M etex,M);
  Label.rt(btex N etex,N);
}
]%
\end{Codes}
  \begin{Codes}[listing side text,listing options={frame=,classoffset=1,deletekeywords={E,Label},classoffset=1}]{0.4}{}
\Solide[%
Nom=pave,
Longueur=1,
Hauteur=2,
Profondeur=0.5,
Phi=-50,
Distance=100,
Sommets=false,
Section="face",
ObjetSection={0.6,B,G,G,H,E,F},
CouleurSection=PaleGreen,
PointsSection={K,L,M,N},
Traces={
  Label.urt(btex K etex,K);
  Label.ulft(btex L etex,L);
  Label.lft(btex M etex,M);
  Label.lrt(btex N etex,N);
  Label.lft(btex D etex,D);
  Label.lrt(btex A etex,A);
  Label.rt(btex B etex,B);
  Label.urt(btex C etex,C);
  Label.rt(btex G etex,G);
  Label.top(btex H etex,H);
  Label.ulft(btex E etex,E);
  Label.top(btex F etex,F);
}
]%
\end{Codes}
\end{description}