\chapter{Présentation}
\begin{flushleft}
{\em 
Un mathématicien n'a pas parfaitement compris ses propres travaux tant
qu'il ne les a pas clarifiés au point de pouvoir aller dans la rue les
expliquer à la première personne venue.}
\par\hfill {\sc Joseph-Louis Lagrange}
\end{flushleft}
\begin{Danger}
  Avant toutes choses, je tiens particulièrement à remercier
  chaleureusement les auteurs de \texttt{pst-solides3d} pour leur aide
  et leur accord quant à l'utilisation de la terminologie et de
  nombreux exemples de leur documentation.
\end{Danger}
\section{Constitution du package}
\begin{itemize}
\item Fichier \texttt{mp-solid.mp}.
\item Documentation et exemples : \texttt{doc.tgz(pdf)}.
\end{itemize}
Ce package est disponible à l'url
\url{http://syracuse.eu.org/syracuse/...}.
\section{Introduction}
\'Emerveillé, comme tout à chacun, par les prouesses de
\texttt{pst-solides3d}, je me suis posé la question de savoir si cela
était réalisable avec \MP. Malheureuse question, car pas mal de temps
il m'a fallu\footnote{Yoda est avec moi !} pour aboutir à cette
première version\ldots Temps de codage, d'apprentissage, de révision
de mes connaissances mathématiques,\ldots ont été très chronophage.\\
Mes sources d'inspiration ont été \verb!pst-solides3d! (en parcourant
le code), les auteurs ({\em merveilleux auteurs}) de ce package et le
livre \og Graphisme scientifique sur ordinateur\fg\ de Raymond {\sc Dony}.
\section{Le package}
\texttt{mp-solid} contient les macros nécessaires pour les tracés
demandés. Certaines macros ont été reprises de
\texttt{geometriesyr16}\footnote{Package dédié à la
  géométrie. Disponible à \url{melusine.eu.org/syracuse/poulecl/geometriesyr16/}.},
de \texttt{donymodule}\footnote{Package complémentaire de
  \texttt{geometriesyr16} pour la gestion des figures géométriques de
  l'espace. Disponible en téléchargeant \texttt{geometriesyr16}.}. Je
dois remercier également Anthony {\sc Phan} et son package
\texttt{m3D}\footnote{Disponible à l'adresse \url{http://www-math.univ-poitiers.fr/~phan/m3Dplain.html}} pour m'avoir
permis de clarifier certaines conventions dans les représentations
spatiales\ldots
\par \texttt{mp-solid} {\em semble} être moins gourmand en ressources
\MP\ que \verb!mp-geo!\footnote{Package permettant le tracé de
  représentations terrestres spatiales ou planes disponibles à
  l'adresse \begin{center}
\url{http://syracuse-dev.org/mpst-globe/browser/trunk/mp-geo}
\end{center}
}; cependant, pour
certains exemples, le temps de compilation est assez
long\footnote{Dans la mesure du possible, les temps de compilation
  importants seront indiqués.}.
\section{Généralités}
\subsection{Le choix du point de vue}
\begin{figure}[h]
  \centering
  \includegraphics{figures/choixvue1.pdf}
  \caption{Position du point de vue.}
\end{figure}
Les coordonnées de l'objet, ici le cube violet, sont données sous
forme de \texttt{color} 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
\begin{center}
  \macro{\texttt{Initialisation(5,30,20,50)}}
\end{center}
5 étant le rayon de la sphère de centre $(0,0,0)$, $\phi=30$\degres\ et
$\theta=20$\degres.
\\L'écran est placé perpendiculairement à la direction $\vecteur{OV}$,
à une distance de $V$ égale à 50.
\begin{Danger}
  Le rayon de la sphère n'est, {\em mathématiquement}, pas
  important. En effet, la projection choisie est une projection
  perspective. Seuls importent $\phi$, $\theta$ et la distance à
  l'écran.
\par Par contre, il a un intérêt de précision dans les calculs de
\MP; c'est pour cela que bien souvent une valeur de 500 voire de
1\,000 sera choisie.
\end{Danger}
Les axes peuvent être représentés {\em en traits d'axes} par la macro
\macro{\verb!TraceAxesD(xmax,ymax,zmax)!} : les axes $[Ox)$, $[Oy)$,
$[Oz)$ seront représenté de l'origine respectivement jusqu'au point
$(\verb!xmax!;0;0)$, $(0;\verb!ymax!;0)$, $(0;0;\verb!zmax!)$.
\\Il existe une autre possibilité : \macro{\verb!TraceAxes!} qui trace
les axes en traits d'axes colorés mais avec $\verb!xmax!=\verb!ymax!=\verb!zmax!=5$.
\subsection{Les couleurs}
Pour la représentation des solides, il y a deux façons de définir la
coloration des faces :
\begin{itemize}
\item soit avec les paramètres de type \texttt{color} :
  \param{\texttt{incolor}} (couleur intérieure) et
  \param{\texttt{outcolor}} (couleur extérieure);
\item soit avec les paramètres \param{\texttt{arcenciel}} (de type
  \texttt{boolean}) et \texttt{incolor}.
\end{itemize}
\begin{figure}[h]
  \centering
  \subfigure[\texttt{outcolor} et
  \texttt{incolor}]{\includegraphics[scale=0.6]{figures/couleurs1.pdf}}\hfill\subfigure[\texttt{arcenciel} et \texttt{incolor}]{\includegraphics[scale=0.6]{figures/couleurs2.pdf}}
  \caption{Exemples d'utilisation de \texttt{incolor}, \texttt{outcolor} et \texttt{arcenciel}.}
\end{figure}
Pour colorer, on dispose des espaces de couleur suivants :
\begin{itemize}
  \item l'espace RGB (classique de \MP);
  \item l'espace HSV.\par
    \begin{figure}[h]
      \centering
      \includegraphics{figures/hsv1.pdf}
      \caption{Une représentation de l'espace de couleurs HSV.}
    \end{figure}
    Ce dernier type n'étant pas implanté dans \MP, il
    s'utilise de la façon suivante\footnote{Les formules de conversions
      ont été obtenues à l'adresse \url{http://en.wikipedia.org/wiki/HSL_color_space}.}:
    \begin{center}
      \macro{\verb!Hsvtorgb(a,s,l)!}
    \end{center}
    où \param{\texttt{a}} est la teinte donnée sous la forme d'un angle compris
    entre 0\degres\ et 360\degres, \param{\texttt{s}} la saturation
    (entre 0 (non saturée) et 1 (saturée)), \param{\texttt{v}} la
    valeur (qui peut se confondre  avec la luminosité) (entre 0 et
    1). Par défaut, la saturation est égale à 0.45 et la luminosité à
    1. On peut les modifier à l'aide des paramètres numériques
    \param{\texttt{satu}} et \param{\texttt{lum}}. Par exemple, on
    peut obtenir les dégradés suivants :
    \begin{figure}[ht]
      \centering
      \subfigure[degradé de rouge à vert dans l'espace
      RGB]{\includegraphics[scale=0.5]{figures/grillergb1.pdf}}\hfill\subfigure[degradé de 0\degres\ à
      360\degres\ dans l'espace HSV (saturation et luminosité
      maximale)]{\includegraphics[scale=0.5]{figures/grillehsv1.pdf}}
      \hfill\subfigure[degradé de 0\degres\ à
      360\degres\ dans l'espace HSV (saturation à 0.5 et luminosité
      maximale)]{\includegraphics[scale=0.5]{figures/grillehsv11.pdf}}
      \caption{Dégradés dans les espaces de couleurs}
    \end{figure}
  \end{itemize}
\subsection{Gestion des ombres}
La lumière est gérée avec la méthode de {\sc Lambert}. Par défaut, la
gestion de la lumière est active. On peut la désactiver grâce au
booléen \param{\texttt{eclairage}}.\\Il n'y a pas de position par
défaut de la lumière, {\em il ne faut donc pas oublier de la
  positionner}.\\L'intensité lumineuse se règle avec le
paramètre numérique \param{\texttt{intensite}}. Par défaut, elle est
réglée à 2.
\begin{figure}[h]
  \centering
  \subfigure[Sans
  lumière]{\includegraphics[scale=0.7]{figures/noeud43.pdf}}\hfill\subfigure[Avec lumière]{\includegraphics[scale=0.7]{figures/noeud44.pdf}}
  \caption{Utilisation ou non de la lumière}
\end{figure}
\par Voici trois exemples où la source lumineuse se déplace sur l'axe $z$ :
$(0;0;0)$ puis $(0;0;3)$ et enfin $(0;0;10)$.
\begin{figure}[ht]
  \centering
  \subfigure[Position 1]{\includegraphics[scale=0.35]{figures/source1.pdf}}\hfill\subfigure[Position 2]{\includegraphics[scale=0.35]{figures/source2.pdf}}\hfill\subfigure[Position 3]{\includegraphics[scale=0.35]{figures/source3.pdf}}
  \caption{Diverses positions de la source lumineuse}
\end{figure}