\chapter{La fusion d'objets}
Un petit aperçu\ldots
\[\includegraphics{figures/fusion1.pdf}\]
\begin{Danger}
  Tout ce qui est relatif à la fusion d'objets n'est {\em valable} que
  pour ce chapitre. Ce n'est pas implanté pour les surfaces, les courbes,\ldots
\end{Danger}
\section{Quels objets fusionner ?}
Avant de voir ce que nous permet la fusion, voyons quels objets sont
mis à notre disposition : \texttt{tétraèdre régulier}, \texttt{cube}
et \texttt{pavé droit}, \texttt{octaèdre régulier}, \texttt{dodécaèdre
  régulier}, \texttt{icosaèdre régulier},  \texttt{prisme} et
\texttt{prisme creux}, \texttt{cylindre de révolution creux} et
\texttt{plein}, \texttt{cône de révolution creux} et \texttt{plein},
\texttt{tronc de cône de révolution creux} et \texttt{plein},
\texttt{sphère}, \texttt{calotte sphérique creuse} et \texttt{pleine},
\texttt{tore}, \texttt{anneau}, \texttt{tube}, \texttt{grille},
\texttt{ruban}, \texttt{biface}, \texttt{OFF}, \texttt{OBJ} et \texttt{New}.
\begin{Danger}
  Dans ce chapitre, aucun de ces objets n'est dessiné ! Mais ils sont
  numérotés. Ainsi pour les afficher, Il faut impérativement utiliser
  la macro 
  \begin{center}
    \macro{\verb!AffichageObjet1!}
  \end{center}
  1 étant le numéro de l'objet à afficher.
\end{Danger}

 Voici comment les définir :

\begin{center}
\begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
\multicolumn{1}{c}{\textcolor{red}{Tétraèdre régulier}}&\verb!"a=3"!
(\texttt{a} rayon de la sphère circonscrite)&\includegraphics[width=5.5cm]{figures/objettetraedre1.pdf}&%\\
  \begin{verbatim}
 Objettetraedre1("a=1");
 AffichageObjet1;
  \end{verbatim}\\
\multicolumn{1}{c}{\textcolor{red}{Cube}}&\verb!"a=3"!&\includegraphics[width=5.5cm]{figures/objetcube1.pdf}&%\\
  \begin{verbatim}
 %subh:=9;
 Objetcube1("a=4");
 AffichageObjet1;
  \end{verbatim}\\
\multicolumn{1}{c}{\textcolor{red}{Octaèdre régulier}}&\verb!"a=3"!
(\texttt{a} rayon de la sphère circonscrite)&\includegraphics[width=5.5cm]{figures/objetoctaedre1.pdf}&%\\
  \begin{verbatim}
 Objetoctaedre1("a=1");
 AffichageObjet1;
  \end{verbatim}\\
\multicolumn{1}{c}{\textcolor{red}{Dodécaèdre régulier}}&\verb!"a=3"!
(\texttt{a} rayon de la sphère circonscrite)&\includegraphics[width=5.5cm]{figures/objetdodecaedre1.pdf}&%\\
  \begin{verbatim}
 Objetdodecaedre1("a=1");
 AffichageObjet1;
  \end{verbatim}\\
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
\multicolumn{1}{c}{\textcolor{red}{Icosaèdre régulier}}&\verb!"a=3"!
(\texttt{a} rayon de la sphère circonscrite)&\includegraphics[width=5.5cm]{figures/objeticosaedre1.pdf}&%\\
  \begin{verbatim}
 Objeticosaedre1("a=1");
 AffichageObjet1;
  \end{verbatim}\\
\multicolumn{1}{c}{\textcolor{red}{Pavé droit}}&\verb!"L=2","H=1",!\par\verb!"P=0.5"!&\includegraphics[width=5.5cm]{figures/objetpave1.pdf}&%\\
  \begin{verbatim}
 %subh:=9;
 Objetpave1("L=2","H=6","P=4");
 AffichageObjet1;
  \end{verbatim}\\
\multicolumn{1}{c}{\textcolor{red}{Prisme plein}}&\verb!("axe=(0,1,2)"!%
\par\verb!,"h=3")!\par
\verb!(Liste sommets)!&\includegraphics[width=5.5cm]{figures/objetprisme1.pdf}&%\\
  \begin{verbatim}
 %nb:=4;subh:=20;
 ObjetPrisme1("axe=(0,0.5,1)",%
"h=2")%
((1,0,0),(2,3,0),(-1,4,0));
 AffichageObjet1;
  \end{verbatim}\\
\multicolumn{1}{c}{\textcolor{red}{Prisme creux}}&\verb!("axe=(0,1,2)"!%
\par\verb!,"h=3")!\par
\verb!(Liste sommets)!&\includegraphics[width=5.5cm]{figures/objetprisme2.pdf}&%\\
  \begin{verbatim}
 %nb:=4;subh:=20;
 creux:true;
 Objetprisme1("axe=(0,0.5,1)",%
"h=2")%
((1,0,0),(2,3,0),(-1,4,0));
 AffichageObjet1;
  \end{verbatim}\\
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
\multicolumn{1}{c}{\textcolor{red}{Tore}}&\verb!"R=3","r=2"!&\includegraphics[width=5.5cm]{figures/objettore1.pdf}&%\\
  \begin{verbatim}
 %nb:=24;subh:=36;
 Objettore1("R=4","r=1");
 AffichageObjet1;
  \end{verbatim}\\
\multicolumn{1}{c}{\textcolor{red}{Tube plein}\footnotemark}&\verb!"F(t)","F'(t)"!,
  \verb!rayon!, \verb!umin!, \verb!nb de points!, \verb!pas!&\includegraphics[width=5.5cm]{figures/objettube1.pdf}&%\\
  \begin{verbatim}
 %nb:=16;subh:=18;
 ObjetTube1("(%
 2*(1+cos(t)),2*tan(t/2),2*sin(t)%
 )","(%
 -2*sin(t),2/((cos(t/2))**2),2*cos(t)%
 )", 1,-2.7468,71,0.0763);
 AffichageObjet1;
  \end{verbatim}\\
\multicolumn{1}{c}{\textcolor{red}{Tube creux}}&\verb!"F(t)","F'(t)"!,
  \verb!rayon!, \verb!umin!, \verb!nb de points!, \verb!pas!&\includegraphics[width=5.5cm]{figures/objettube2.pdf}&%\\
  \begin{verbatim}
 %nb:=16;subh:=18;
 creux:=true;
 ObjetTube1("(%
 2*(1+cos(t)),2*tan(t/2),2*sin(t)%
 )","(%
 -2*sin(t),2/((cos(t/2))**2),2*cos(t)%
 )",1,-2.7468,71,0.0763);
 AffichageObjet1;
  \end{verbatim}\\
\textcolor{red}{Cylindre de révolution creux}&\verb!"r=1","h=2"!&\includegraphics[width=5.5cm]{figures/objetcylindre1.pdf}&%\\
  \begin{verbatim}
 creux:=true;
 %nb:=24;subh:=9;
 Objetcylindre1("r=2","h=4");
 AffichageObjet1;
  \end{verbatim}\\
\end{tabular}
\footnotetext{Le tube représenté ici est relatif à la courbe {\em
    horoptère}.}
\end{center}
\begin{center}
\begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
\textcolor{red}{Cylindre de révolution plein}&\verb!"r=1","h=2"!&\includegraphics[width=5.5cm]{figures/objetcylindre2.pdf}&%\\
  \begin{verbatim}
 creux:=false;
 %nb:=24;subh:=9;
 Objetcylindre1("r=2","h=4");
 AffichageObjet1;
  \end{verbatim}\\
\textcolor{red}{Cône de ré\-vo\-lu\-tion creux}&\verb!"r=1","h=2"!&\includegraphics[width=5.5cm]{figures/objetcone1.pdf}&%\\
  \begin{verbatim}
 creux:=true;
 %nb:=24;subh:=9;
 Objetcone1("r=1.5","h=4");
 AffichageObjet1;
  \end{verbatim}\\
\textcolor{red}{Cône de ré\-vo\-lu\-tion plein}&\verb!"r=1","h=2"!&\includegraphics[width=5.5cm]{figures/objetcone2.pdf}&%\\
\begin{verbatim}
 creux:=false;
 %nb:=24;subh:=9;
 Objetcone1("r=1.5","h=4");
 AffichageObjet1;
\end{verbatim}\\
\textcolor{red}{Tronc de cône creux}&\verb!"r=1"!, \verb!"h=2"!, \verb!"H=5"!&\includegraphics[width=5.5cm]{figures/objettronccone1.pdf}&%\\
  \begin{verbatim}
 creux:=true;
 %nb:=24;subh:=9;
 Objettronccone1("r=2","h=4","H=5");
 AffichageObjet1;
  \end{verbatim}\\
\textcolor{red}{Tronc de cône plein}&\verb!"r=1"!, \verb!"h=2"!, \verb!"H=5"!&\includegraphics[width=5.5cm]{figures/objettronccone2.pdf}&%\\
\begin{verbatim}
 creux:=false;
 %nb:=24;subh:=9;
 Objettronccone1("r=2","h=2","H=3");
 AffichageObjet1;
\end{verbatim}\\
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
  \multicolumn{1}{c}{\textcolor{red}{Sphère}}&\verb!"R=3"!&\includegraphics[width=5.5cm]{figures/objetsphere1.pdf}&%\\
\begin{verbatim}
 %nb:=24;subh:=18;
 Objetsphere1("R=2");
 AffichageObjet1;
\end{verbatim}\\
  \textcolor{red}{Calotte sphérique pleine}&\verb!"r=3"!,
  \verb!"phib=-pi/4"!, \verb!"phih=pi/6"! (en radians)&\includegraphics[width=5.5cm]{figures/objetcalotte1.pdf}&%\\
  \begin{verbatim}
 %nb:=24;subh:=24;
 Objetcalotte1(%
 "R=4","phib=-pi/3","phih=pi/4");
 AffichageObjet1;
  \end{verbatim}\\
\textcolor{red}{Calotte sphérique creuse}&\verb!"r=3"!,
  \verb!"phib=-pi/4"!, \verb!"phih=pi/6"! (en radians)&\includegraphics[width=5.5cm]{figures/objetcalotte2.pdf}&%\\
  \begin{verbatim}
 %nb:=24;subh:=24;
 Objetcalotte1(%
 "R=4","phib=-pi/3","phih=pi/4");
 AffichageObjet1;
  \end{verbatim}\\
  \textcolor{red}{Anneau à section rectangulaire}&\verb!"R=3"!, \verb!"r=1"!, \verb!"h=2"!&\includegraphics[width=5.5cm]{figures/objetanneau1.pdf}&%\\
  \begin{verbatim}
 %subh:=24;
 Objetanneau1("R=4","r=3","h=1.5");
 AffichageObjet1;
  \end{verbatim}\\
\textcolor{red}{Grille dans le plan $(xOy)$}&\verb!"am=-3"!,
\verb!"an=2"!, \verb!"bm=-2"!, \verb!"bn=4"!&\includegraphics[width=5.5cm]{figures/objetgrille1.pdf}&%\\
  \begin{verbatim}
 %nb:=10;subh:=6;
 Objetgrille1("am=-2.5","an=2.5",%
"bm=-1.5","bn=1.5");
 AffichageObjet1;
  \end{verbatim}\\
\end{tabular}
\end{center}
\begin{center}
\begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
\textcolor{red}{Ruban d'axe $(Oz)$}&\verb!"h=2"!,
\verb!Liste des!, \verb!sommets!&\includegraphics[width=5.5cm]{figures/objetruban1.pdf}&%\\
  \begin{verbatim}
%subh:=3;
ObjetRuban2("h=2")((0,0,0),%
(2,2,0),(4,0,0),(6,2,0));
AffichageObjet2;
  \end{verbatim}\\
  \multicolumn{1}{c}{\textcolor{red}{Biface\footnotemark}}&\verb!Liste! \verb!des! \verb!sommets!&\includegraphics[width=5.5cm]{figures/objetbiface1.pdf}&%\\
\begin{verbatim}
ObjetBiface1((5,0,0) for %
t=0.06544 step 0.06544%
 until pi:%
,(5*(cos(t)**2),%
(3*sin(t)*((cos(t))**3))%
,0) endfor);
AffichageObjet1;
\end{verbatim}\\
\multicolumn{1}{c}{\textcolor{red}{\texttt{OFF}}}&\verb!Nom! \verb!du! \verb!fichier!&\includegraphics[width=5.5cm]{figures/objetoff1.pdf}&%\\
\begin{verbatim}
debut:=0;
echelle:=15000;
ObjetOFF1("Kangaroo.off");
AffichageObjet1;
\end{verbatim}\\
\multicolumn{1}{c}{\textcolor{red}{\texttt{OBJ}}}&\verb!Nom! \verb!du! \verb!fichier!&\includegraphics[width=5.5cm]{figures/objetobj1.pdf}&%\\
\begin{verbatim}
echelle:=200;
ObjetOFF1("Midpoly_03-1.obj");
AffichageObjet1;
\end{verbatim}\\
\end{tabular}
\footnotetext{Sur la figure proposée, il y a en fait quatre solides
  biface.}
\end{center}
\begin{center}
\begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
\multicolumn{1}{c}{\textcolor{red}{New}}&\verb!Liste! \verb!des!
  \verb!sommets!, \verb!Liste! \verb!des! \verb!faces!&\includegraphics[width=5.5cm]{figures/objetnew1.pdf}&%\\
\begin{verbatim}
%hexaedre tetrakis
ObjetNew1((0,0,-3*sqrt(6)/4),%
(-sqrt(3)/2,-3/2,-sqrt(6)/4),%
(sqrt(3),0,-sqrt(6)/4),%
(-sqrt(3)/2,3/2,-sqrt(6)/4),%
(sqrt(3)/2,-3/2,sqrt(6)/4),%
(-sqrt(3),0,sqrt(6)/4),%
(sqrt(3)/2,3/2,sqrt(6)/4),%
(0,0,3*sqrt(6)/4),%
(-3*sqrt(3)/4,0,-3*sqrt(6)/8),%
(3*sqrt(3)/8,-9/8,-3*sqrt(6)/8),%
(3*sqrt(3)/8,9/8,-3*sqrt(6)/8),%
(-3*sqrt(3)/8,-9/8,3*sqrt(6)/8),%
(-3*sqrt(3)/8,9/8,3*sqrt(6)/8),%
(3*sqrt(3)/4,0,3*sqrt(6)/8)%
)(3,0,1,8,%
3,0,8,3,%
3,3,8,5,%
3,1,5,8,%
3,0,9,1,%
3,0,2,9,%
3,2,4,9,%
3,1,9,4,%
3,0,3,10,%
3,0,10,2,%
3,2,10,6,%
3,3,6,10,%
3,2,13,4,%
3,2,6,13,%
3,6,7,13,%
3,4,13,7,%
3,3,5,12,%
3,3,12,6,%
3,6,12,7,%
3,5,7,12,%
3,1,11,5,%
3,1,4,11,%
3,4,7,11,%
3,5,11,7%
);
\end{verbatim}\\
\end{tabular}
\end{center}
Pour beaucoup de ces objets, les \param{\verb!nb!} et/ou
\param{\verb!subh!} sont requis et ont la possibilité d'être modifiés. Ils
représentent le maillage sur chacun des objets. De manière générale,
\param{\verb!nb!} représente le maillage de \og la base\fg\ du solide
et \param{\verb!subh!} représente le maillage \og vertical\fg\ de
l'objet.
\par Pour les objets possédant une version creuse, c'est le paramètre
booléen \param{\verb!creux!} qui fait la différence. Sa valeur par
défaut est \verb!false!.
\subsection{Compléments sur l'objet \texttt{ruban}}
Le ruban est un paravent. Il s'agit simplement de positionner les
sommets dans le plan $(Oxy)$ et de donner la hauteur du paravent
souhaité.
\\Il n'est pas toujours nécessaire de prendre une ligne \og brisée\fg\
comme support de base pour le ruban.
\paragraph{Exemple 1 : Un paravent sinusoïdal}\hfill\newline
\begin{figure}[!ht]
  \centering
  \includegraphics[scale=0.9]{figures/rubansinus1.pdf}
  \caption{Un paravent sinusoïdal}
  \label{fig:exsyr3}
\end{figure}
\begin{lstlisting}[frame=tb]
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,60,20,25);
 nb:=10; subh:=26;
 eclairage:=false;%<-pour obtenir la grille en blanc
 outcolor:=blanc;
 Objetgrille1("am=-5","an=5","bm=-13","bn=13");
 AffichageObjet1;
 eclairage:=true;
 outcolor:=0.5[rouge,blanc]; incolor:=0.5[vert,blanc];
 subh:=3;
 ObjetRuban2("h=2")(for t=-4*pi step (pi/12) until 47*pi/12:(2*sin(t),t,0), endfor(0,4*pi,0));
 AffichageObjet2;
 TraceAxes;
 finespace;
\end{lstlisting}
\paragraph{Exemple 2 : Un paravent d'amour}\hfill\newline
\begin{figure}[!ht]
  \centering
  \includegraphics{figures/rubancardioide1.pdf}
  \caption{Un paravent d'amour}
\end{figure}
\begin{lstlisting}[frame=tb]
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,60,20,25);
 nb:=17; subh:=20;
 eclairage:=false;
 drawoptions(withcolor gris);
 outcolor:=blanc;
 Objetgrille1("am=-5.5","an=3","bm=-5","bn=5");
 AffichageObjet1;
 drawoptions();
 eclairage:=true;
 outcolor:=0.5[rouge,blanc]; incolor:=0.5[vert,blanc];
 subh:=3;
 ObjetRuban2("h=2")(for t=-pi step pi/36 until 35*pi/36:1.5*(2*cos(t)-cos(2*t),2*sin(t)-sin(2*t),0), endfor(-4.5,0,0));
 AffichageObjet2;
 TraceAxesD(3.5,5.5,4);
 finespace;
\end{lstlisting}
\subsection{Compléments sur l'objet \texttt{prisme}}
Si l'on souhaite définir un prisme avec une base peu courante, on
utilisera la macro \macro{\verb!ObjetPrisme!} (avec une majuscule) de
la même façon que la macro \macro{\verb!Objetprisme!} en définissant
l'axe, la hauteur et la liste des sommets formant la base.
\paragraph{Exemple 1 : Prisme droit à section carrée
  arrondie}\hfill\newline
\begin{minipage}{9cm}
  \begin{figurefixe}
    \centering
    \includegraphics[width=8cm]{figures/prismearrondi1.pdf}
    \caption{Prisme droit à section carrée arrondie}
    \label{fig:exsyr4}
  \end{figurefixe}
\end{minipage}
\hfill
\begin{minipage}{9cm}
  \begin{lstlisting}[frame=tb]
 outcolor:=0.5[orange,blanc];

 figureespace(-10u,-10u,10u,10u);
 Initialisation(1500,-25,30,20);
 eclairage:=false;
 nb:=4;subh:=4;
 Objetgrille0("am=-2","an=2","bm=-2","bn=2");
 AffichageObjet0;
 ObjetPrisme1("axe=(0,0,1)","h=6")(for k=0 step 10 until 90:(1+cosd(k),1+sind(k),0),endfor for k=90 step 10 until 180:(cosd(k)-1,1+sind(k),0), endfor for k=180 step 10 until 270:(cosd(k)-1,sind(k)-1,0), endfor for k=270 step 10 until 350:(cosd(k)+1,sind(k)-1,0), endfor (2,1,0));
 AffichageObjet1;
 TraceAxesD(2,2,2);
 finespace;
  \end{lstlisting}
\end{minipage}
\paragraph{Exemple 2 : Demi-prisme droit à section couronne circulaire}\hfill\newline
\begin{minipage}{9cm}
  \begin{figurefixe}
    \centering
    \includegraphics[width=8cm]{figures/demiprisme1.pdf}
    \label{fig:exsyr5}
  \end{figurefixe}
\end{minipage}
\hfill
\begin{minipage}{9cm}
  \begin{lstlisting}[frame=tb]
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,60,30,25);
 outcolor:=blanc;
 subh:=10;
 Objetgrille1("am=-5","an=5","bm=-5","bn=5");
 AffichageObjet1;
 outcolor:=jaune; incolor:=rouge;
 nb:=1; subh:=5;
 angx:=90; TR:=(0,4,0);
 ObjetPrisme2("axe=(0,0,1)","h=8",for k=0 step 10 until 180:(3*cosd(k),3*sind(k),0), endfor for k=180 step -10 until 0:(cosd(k),sind(k),0), endfor(3,0,0));
 AffichageObjet2;
 TraceAxes;
 finespace;
\end{lstlisting}
\end{minipage}
\par
\begin{minipage}{9cm}
  \begin{figurefixe}
    \centering
    \includegraphics[width=8cm]{figures/demiprisme2.pdf}
    \label{fig:exsyr6}
  \end{figurefixe}
\end{minipage}
\hfill
\begin{minipage}{9cm}
  \begin{lstlisting}[frame=tb]
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,60,30,25);
 outcolor:=blanc;
 subh:=10;
 Objetgrille1("am=-5","an=5","bm=-5","bn=5");
 AffichageObjet1;
 outcolor:=jaune; incolor:=rouge;
 nb:=1; subh:=5;
 angx:=90; TR:=(0,4,0);
 creux:=true;%<-changement en solide creux
 ObjetPrisme2("axe=(0,0,1)","h=8",for k=0 step 10 until 180:(3*cosd(k),3*sind(k),0), endfor for k=180 step -10 until 0:(cosd(k),sind(k),0), endfor(3,0,0));
 AffichageObjet2;
 TraceAxes;
 finespace;
  \end{lstlisting}
\end{minipage}
\paragraph{Exemple 2: Prisme droit creux dont la section est un
  bifolium régulier}\hfill\newline
\begin{minipage}{8cm}
  \includegraphics[width=8cm]{figures/prismebifolium1.pdf}
\end{minipage}
\hfill
\begin{minipage}{10cm}
  \begin{lstlisting}[frame=tb]
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,60,30,25);
 outcolor:=blanc;
 subh:=10;
 Objetgrille1("am=-5","an=5","bm=-5","bn=5");
 AffichageObjet1;
 outcolor:=vert; incolor:=orange;
 nb:=1; subh:=5;
 creux:=true;
 ObjetPrisme2("axe=(0,0,1)","h=6",for k=0 step 5 until 175:(12*sind(k)*(cosd(k)**3),12*(sind(k)**2)*(cosd(k)**2),0),endfor (0,0,0));
 AffichageObjet2;
 TraceAxes;
 finespace;
  \end{lstlisting}
\end{minipage}
\subsection{Compléments sur les objets \texttt{cylindre} et \texttt{cone}}
S'il l'on veut généraliser la notion de cylindre, la macro
\macro{\texttt{Objetcylindre}} ne suffit pas. En effet, il devient nécessaire de
définir une courbe {\em directrice} et la direction de {\em l'axe du
  cylindre}.\\
\`A cet effet, la macro \macro{\texttt{ObjetCylindre}} ({\em notez la
  majuscule}) a été défini.
\begin{center}
  \macro{\verb!ObjetCylindre1(fn,umin,umax,vmin,vmax)!}
\end{center}
Proposons un exemple.
\begin{figure}[h]
  \centering
  \includegraphics{figures/cylindreastroide1.pdf}
  \caption{Cylindre à base astroïdale et d'axe $(0;0;1)$}
\end{figure}
Définissons la courbe spatiale \param{\verb!fn!} :
\verb!(3*(cos(u)**3),3*(sin(u)**3),-2+v)! de paramètre {\em obligatoire}
\verb!u! et \verb!v!. C'est une astroïde tracé dans
le plan $z=-2$. Les paramètres seront donc \param{\verb!umin!$=\pi$};
\param{\verb!umax!$=-\pi$}, \param{\verb!vmin!=$0$} et (par exemple)
\param{\verb!vmax!$=4$} pour aller jusqu'au plan $z=2$..
Le code dont résulte la figure ci-dessus est donc
\begin{lstlisting}[frame=tb]
 nb:=24; subh:=12;

 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,30,20,50);
 arcenciel:=true;
 incolor:=0.75[orange,blanc];
 ObjetCylindre1("(3*(cos(u)**3),3*(sin(u)**3),-2+v)",pi,-pi,0,4);
 AffichageObjet1;
 finespace;
\end{lstlisting}
\par Si l'on souhaite avoir maintenant le même cylindre partant du
plan $z=0$ mais d'axe $(0;1;2)$, on codera alors
\par
\begin{minipage}{8cm}
  \includegraphics[width=8cm]{figures/cylindreastroide2.pdf}
\end{minipage}
\hfill
\begin{minipage}{10cm}
  \begin{lstlisting}[frame=tb]
 nb:=24; subh:=12;

 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,30,20,50);
 arcenciel:=true;
 incolor:=0.75[orange,blanc];
 ObjetCylindre1("(3*(cos(u)**3),3*(sin(u)**3)+v,2*v)",pi,-pi,0,2);
 AffichageObjet1;
 finespace;
  \end{lstlisting}
\end{minipage}
L'usage de la macro \macro{\verb!ObjetCone!} (toujours avec la
majuscule) est le même pour la généralisation des cônes. Toutefois, il
faut ici définir une origine et les deux nappes du cône seront
symétriques par rapport à cette origine.
\begin{center}
  \macro{\verb!ObjetCone1(fn,umin,umax,zbas,"orig=...")!}
\end{center}
Il ne faut pas oublier de
placer la courbe directrice dans le même plan que le plan de base du cône.\\Pour mieux exploiter cette
fonctionnalité, voici l'exemple d'un cône dont la directrice est une
branche d'épicycloïde et dont l'origine est le point $(0;1;3)$.
\par
\begin{minipage}{8cm}
  \includegraphics[width=8cm]{figures/coneepi1.pdf}
\end{minipage}
\hfill
\begin{minipage}{10cm}
  \begin{lstlisting}[frame=tb]
 nb:=48;subh:=8;

 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,-10,15,30);
 outcolor:=0.5[vert,blanc];
 incolor:=orange;
 r:=1; q:=4;
 draw Fonction("(r*((q+1)*cos(t)-cos((q+1)*t)),r*((q+1)*sin(t)-sin((q+1)*t)),0)",-pi,pi,0.0628) withpen pencircle scaled1.5bp withcolor bleu;
 ObjetCone1("(r*((q+1)*cos(u)-cos((q+1)*u)),r*((q+1)*sin(u)-sin((q+1)*u)),0)",0,pi,-2,"orig=(0,1,3)");
 AffichageObjet1;
 TraceAxes;
 finespace;
  \end{lstlisting}
\end{minipage}
\subsection{Compléments sur les objets \texttt{anneau}}
L'objet \macro{\texttt{Objetanneau}} propose {\em par défaut} une
section rectangulaire.
\par
\begin{minipage}{8cm}
  \includegraphics{figures/sectionanneau1.pdf}
\end{minipage}
\hfill
\begin{minipage}{9cm}
  \[\includegraphics{figures/Sectionanneau1.pdf}\]
  \begin{lstlisting}
    Objetannneau1("R=8","r=6","h=3");
  \end{lstlisting}
\end{minipage}
\par Pour utiliser une autre section telle que celle-ci
\[\includegraphics{figures/sectionanneau2.pdf}\]
on utilisera
\begin{center}
  \macro{\verb!ObjetAnneau1("nbp=...",pp)!}
\end{center}
où \param{\verb!nbp!} est le nombre de sommets de la section et
\param{\verb!pp!} un chemin \MP\ représentant la section souhaitée.
\par
\begin{minipage}{8cm}
  \includegraphics[width=8cm]{figures/Sectionanneau2.pdf}
\end{minipage}
\hfill
\begin{minipage}{10cm}
  \begin{lstlisting}[frame=tb]
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,30,30,25);
 arcenciel:=true;
 incolor:=jaune;
 R:=4;
 subh:=24;
 path pp;
 pp=for k=0 step 10 until 90:(R+1+cosd(k),1+sind(k))-- endfor for k=90 step 10 until 180:(R+cosd(k)-1,1+sind(k))-- endfor for k=180 step 10 until 270:(R+cosd(k)-1,sind(k)-1)-- endfor for k=270 step 10 until 350:(R+cosd(k)+1,sind(k)-1)-- endfor (R+2,1)--cycle;
 ObjetAnneau1("nbp=42",pp);
 AffichageObjet1;
 finespace;
  \end{lstlisting}
\end{minipage}
\subsection{Compléments sur l'objet \texttt{new}}
La déclaration des sommets se fait sous forme de triplets. La
déclaration des faces se faisant quant à elle, sous la forme d'un
$n+1$-uplet où $n$ est le nombre de sommets composant la face; le
premier nombre étant d'ailleurs égal à $n$ suivi des nombres
représentant les sommets de cette face : \texttt{3 4 7 8} représente
une face triangulaire (3) composée des sommets 4, 7 et 8 {\em donnés
  dans le sens trigonométrique si l'on regarde la face de
  l'extérieur}.
\par La déclaration des sommets et des faces peut aussi être plus
complexes. Cet exemple, repris de la documentation de
\verb!pst-solides3d! montre comment on peut définir à l'aide de
boucles la liste des sommets et la liste des faces.
\par
\begin{minipage}{6cm}
\includegraphics[width=6cm]{figures/hyperboloiderayonconstant1.pdf}
\end{minipage}
\hfill
\begin{minipage}{10cm}
  \begin{lstlisting}[frame=tb]
 Initialisation(500,30,20,25);
 a=20;b=36;h=8;
 zz=-h/2;
 ObjetNew1((sqrt(1+((zz+h)**2)/4),0,zz+h)    
   for m=a downto 0:
     for n=if m=a:b-1 else:b fi downto 1:
       ,(sqrt(1+((zz+h*m/a)**2)/4)*cosd(n*(360 div b)),sqrt(1+((zz+h*m/a)**2)/4)*sind(n*(360 div b)),zz+h*m/a)
     endfor
   endfor
 )(4,a*b,b+a*b,b-1+a*b,a*b-1
 for m=a downto 1:
   for n=if m=a:m*b-1 else: m*b fi downto (m-1)*b+2:
     ,4,n,b+n,(b-1)+n,n-1
   endfor
   ,4,m*b+1,(m+1)*b,m*b,(m-1)*b+1
 endfor
 );
  \end{lstlisting}
\end{minipage}
\subsection{Numéroter et enlever des facettes}
Lorsque le paramètre booléen \param{\verb!numeroteface!} est
positionné à \verb!true!, on numérote {\em toutes} les faces {\em
  visibles} du solide. La police utilisée est \verb!cmr5!; on peut
bien évidemment la modifier grâce à \verb!defaultfont!.
\par
\begin{minipage}{6cm}
\includegraphics[width=6cm]{figures/cubenumerote1.pdf}
\end{minipage}
\hfill
\begin{minipage}{10cm}
  \begin{lstlisting}[frame=tb]
 defaultfont:="cmr7";
 Initialisation(1500,30,20,20);
 numeroteface:=true;%<-
 subh:=5;
 Objetcube1("a=2");
 AffichageObjet1;
 TraceAxesD(4,4,4);
  \end{lstlisting}
\end{minipage}
\par Une fois ceci fait, si le booléen \param{\verb!creux!} est positionné
à \verb!true! alors on peut enlever des facettes pour voir ce qu'il se
passe à l'intérieur de l'objet considéré. On définit alors l'objet
puis on indique quelles sont les numéros des faces que l'on souhaite
enlever grâce à \macro{\verb!ObjetEnleve1(...)!}
\par
\begin{minipage}{6cm}
  \includegraphics[width=6cm]{figures/cubecreuse1.pdf}
\end{minipage}
\hfill
\begin{minipage}{11cm}
  \begin{lstlisting}[frame=tb]
 Initialisation(1500,30,30,50);
 subh:=5;
 creux:=true;%<-
 Objetcube1("a=3");
 ObjetEnleve1(7,12,17,31,33,37,41,43,131,133,141,143);
 AffichageObjet1;
  \end{lstlisting}
\end{minipage}
\begin{Danger}
  Les numéros des faces à enlever doivent être donnés dans l'ordre croissant.
\end{Danger}
Si l'on souhaite enlever beaucoup de faces, une boucle \verb!for! est
possible au prix d'un petit changement de syntaxe.
\begin{multicols}{2}
  \begin{center}
    \includegraphics{figures/torecreuse1.pdf}
  \end{center}
  \begin{lstlisting}[frame=tb]
 nb:=16; subh:=18;

 figureespace(-10u,-10u,10u,10u);
 Initialisation(1000,30,20,30);
 numeroteface:=true;
 arcenciel:=true;
 incolor:=0.5[gris,white];
 Objettore1("R=2","r=1");
 AffichageObjet1;
 finespace;
  \end{lstlisting}
  \par\columnbreak\par
  \begin{center}
    \includegraphics{figures/torecreuse2.pdf}
  \end{center}
  \begin{lstlisting}[frame=tb]
 numeroteface:=false;

 figureespace(-10u,-10u,10u,10u);
 Initialisation(1000,30,20,30);
 creux:=true;
 arcenciel:=true;
 incolor:=0.5[gris,white];
 Objettore1("R=2","r=1");
 string Face;
 Face=""&for k=133 step 2 until 193:decimal(k)&","&""& endfor decimal(195)&"";
 ObjetEnleve1(scantokens Face);
 AffichageObjet1;
 finespace;
  \end{lstlisting}
\end{multicols}
\subsection{Transparence}
Elle est implantée grâce au booléen \param{\verb!Transparence!}
positionné à \verb!false! par défaut. La couleur de transparence
choisie est \param{\verb!fillcolor!} positionnée à gray par défaut.
\begin{Danger}
  C'est une notion gourmande en ressources. Aussi, il est plutôt
  conseillé de l'utiliser avec des objets {\em simples}.
\end{Danger}
\begin{figure}[ht]
  \centering
  \includegraphics{figures/J671.pdf}
  \caption{Polygone de Johnson : J67}
\end{figure}
\section{Et pour les bouger ?}
On dispose (et certains codes de la partie précédente l'ont montré) :
\begin{itemize}
  \item des rotations autour des axes $(Ox)$, $(Oy)$ et $(Oz)$;
  \item des translations;
  \item de transformations définies par l'utilisateur.
\end{itemize}
\subsection{Les rotations et translations}
L'ordre choisi pour les utiliser est la rotation d'axe $(Ox)$; puis
celle d'axe $(Oy)$; puis celle d'axe $(Oz)$ et enfin la
translation. Les rotations sont définis par trois angles
\param{\verb!angx!}, \param{\verb!angy!} et \param{\verb!angz!}.
\begin{figure}[h]
  \centering
  \subfigure[Position%
  initiale]{\includegraphics[width=4cm]{figures/rotation1.pdf}}\hfill
  \subfigure[Position \texttt{angx:=90}]{\includegraphics[width=4cm]{figures/rotation2.pdf}}\hfill
  \subfigure[Position \texttt{angy:=-45}]{\includegraphics[width=4cm]{figures/rotation3.pdf}}\hfill
  \subfigure[Position \texttt{angz:=57}]{\includegraphics[width=4cm]{figures/rotation4.pdf}}\hfill
  \caption{Utilisation des rotations.}
\end{figure}
\par Pour les translations, le paramètre est \param{\verb!TR!} de type
\verb!color!.
\begin{figure}[h]
  \centering
  \includegraphics{figures/translation1.pdf}
  \caption{Utilisation des translations.}
\end{figure}
\begin{Danger}
  Si un fichier \MP\ comporte plusieurs figures, n'oubliez pas de
  remettre les paramètres angulaires et de translation à leur valeur
  d'origine. Sinon, vous pourriez bien vous tirer les cheveux pour
  savoir où se situe votre erreur\footnotemark\ldots
\end{Danger}
\footnotetext{Croyez-moi par expérience ;-)}
\subsection{Les transformations propres à l'utilisateur}
On dispose d'un booléen \param{\verb!transformation!} (positionné à
\texttt{false} par défaut) pour indiquer la transformation nécessaire
des sommets de l'objet considéré.
\\La transformation proprement dite, quant à elle, doit être définie
par une macro \macro{Transform} (attention à la majuscule).
\paragraph{Facteurs d'échelle}
\[\left\{\begin{array}{l}
x'=1,25x\\
y'=0,75y\\
z=0,5z\\
\end{array}
\right.\]
\begin{lstlisting}[frame=tb]
 vardef Transform(expr PT)=
   save $;
   color $;
   Xpart($)=1.25*Xpart(PT);
   Ypart($)=0.75*Ypart(PT);
   Zpart($)=0.5*Zpart(PT);
   $
 enddef;
 
 outcolor:=jaune; incolor:=0.5[vert,blanc];
 
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,50,20,15);
 nb:=24; subh:=36;
 outcolor:=0.5[rouge,blanc];
 Objettore1("R=4","r=2");
 AffichageObjet1;
 TraceAxes;
 finespace;
 
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,50,20,15);
 nb:=24; subh:=36;
 transformation:=true;%<-Pour appliquer la transformation choisie.
 outcolor:=0.5[rouge,blanc];
 Objettore1("R=4","r=2");
 AffichageObjet1;
 TraceAxes;
 finespace;
 end
\end{lstlisting}
\[\includegraphics{figures/Facteurechelle1.pdf}\kern1cm\includegraphics{figures/Facteurechelle2.pdf}\]
\paragraph{Transformation liée à la distance du point à l'origine}
\[\left\{\begin{array}{l}
x'=(0,5\sqrt{x^2+y^2+z^2}+1-0,5\sqrt3)x\\
y'=(0,5\sqrt{x^2+y^2+z^2}+1-0,5\sqrt3)y\\
z'=(0,5\sqrt{x^2+y^2+z^2}+1-0,5\sqrt3)z\\
\end{array}
\right.\]
\begin{lstlisting}[frame=tb]
 vardef Transform(expr PT)=
   save $; color $;
   Xpart($)=Xpart(PT)*(0.5*Norm(PT)+1-0.5*sqrt(3));
   Ypart($)=Ypart(PT)*(0.5*Norm(PT)+1-0.5*sqrt(3));
   Zpart($)=Zpart(PT)*(0.5*Norm(PT)+1-0.5*sqrt(3));
   $
 enddef;
  
 arcenciel:=true;
 
 figureespace(-6u,-6u,6u,6u);
 fill feuillet;
 Initialisation(500,60,20,50);
 subh:=9;
 transformation:=true;
 Objetcube1("a=3");
 AffichageObjet1;
 finespace;
\end{lstlisting}
\begin{figure}[!h]
  \centering
  \includegraphics{figures/Transforigine1.pdf}
  \caption{Déformation d'un cube}
  \label{fig:exsyr7}
\end{figure}
\paragraph{Torsion d'une poutre}
\[M'=\mbox{Rotation}(M,(Oz),10\mbox{\degres}*z_{M})\]
appliqué à un prisme de hauteur 10.
\begin{figure}[!ht]
  \centering
  \subfigure[Avant
  torsion]{\includegraphics{figures/Torsion1.pdf}}\kern1cm\subfigure[Après torsion]{\includegraphics{figures/Torsion2.pdf}}
  \caption{Torsion d'une poutre}
  \label{fig:exsyr8}
\end{figure}
\begin{lstlisting}[frame=tb]
 vardef Transform(expr PT)=%pour la torsion.
   save $; color $;
   angz:=subh*(Zpart(PT));
   $=RotXYZ(PT);
   $
 enddef;

 unit:=0.75;
 
 figureespace(-2u,-2u,2u,10u);
 Initialisation(500,50,20,35);
 outcolor:=blanc;
 subh:=8;
 Objetgrille1("am=-2","an=2","bm=-2","bn=2");
 nb:=2; subh:=20;
 outcolor:=0.5[rouge,blanc];
 Objetprisme2("axe=(0,0,1)","h=10")((0.5,-0.5,0),(0.5,0.5,0),(-0.5,0.5,0),(-0.5,-0.5,0));
 nbobj:=2;
 DessineFusion;
 finespace;
 
 figureespace(-2u,-2u,2u,10u);
 Initialisation(500,50,20,25);
 outcolor:=blanc;
 subh:=8;
 Objetgrille1("am=-2","an=2","bm=-2","bn=2");
 nb:=2; subh:=20;
 transformation:=true;
 outcolor:=0.5[rouge,blanc];
 Objetprisme2("axe=(0,0,1)","h=10")((0.5,-0.5,0),(0.5,0.5,0),(-0.5,0.5,0),(-0.5,-0.5,0));
 nbobj:=2;
 DessineFusion;
 finespace;
\end{lstlisting}
\paragraph{Flexion d'une poutre encastrée}
On exerce une force au sommet de la poutre dans la direction
$(Ox)$. La rotation se fait alors suivant l'axe $(Oy)$ d'un angle
proportionnel à la force exercée et à la distance au sol.
\begin{figure}[!ht]
  \centering
  \subfigure[Avant
  flexion]{\includegraphics{figures/Flexion1.pdf}}\kern1cm\subfigure[Après flexion]{\includegraphics{figures/Flexion2.pdf}}
  \caption{Flexion d'une poutre encastrée}
\end{figure}
\begin{lstlisting}[frame=tb]
 vardef Transform(expr PT)=%pour la flexion.
   save $; color $;
   angy:=2*(Zpart(PT));
   $=RotXYZ(PT);
   $
 enddef;

 unit:=0.75;

 figureespace(-3u,-3u,3u,10u);
 Initialisation(500,50,20,35);
 outcolor:=blanc;
 subh:=8;
 Objetgrille1("am=-2","an=2","bm=-2","bn=2");
 nb:=2; subh:=20;
 transformation:=true;
 outcolor:=0.5[rouge,blanc];
 ObjetPrisme2("axe=(0,0,1)","h=10")((0.5,-0.5,0),(0.5,0.5,0),(-0.5,0.5,0),(-0.5,-0.5,0));
 nbobj:=2;
 DessineFusion;
 finespace;
\end{lstlisting}
Voici enfin l'exemple de la banane ! Il m'a été demandé pour un cours de topologie. Je n'y comprends rien :) mais cela montre {\em l'enchaînement} de deux transformations :
\begin{itemize}
\item la première est appliquée à l'objet \texttt{sphere};
\item la deuxième est aplliquée à l'objet résultant de la première transformation.
\end{itemize}
\begin{figure}[!ht]
  \centering
  \subfigure[Avant
  les transformations]{\includegraphics{figures/Banane1.pdf}}\kern1cm\subfigure[Après les transformations]{\includegraphics{figures/Banane2.pdf}}
  \caption{Transformation d'une sphère en \og banane\fg}
\end{figure}
\begin{lstlisting}[frame=tb]
  vardef Transform(expr PT)=
  save $ ; color $ ;
  Xpart($)=0.6*Xpart(PT);
  Ypart($)=0.6*Ypart(PT);
  Zpart($)=1.75*Zpart(PT);
  $
enddef ;

figureespace(-7u,-7u,7u,7u);
fill feuillet;
Initialisation(1500,-60,10,50);
nb:=12;
subh:=12;
outcolor:=jaune;
Objetsphere1("R=2");

transformation:=true;
ObjetDeplacement2(1);

vardef Transform(expr PT)=
    save $ ; color $ ;
  angy:=10*(Zpart(PT));
  $=RotXYZ(PT);
    $
enddef ;

outcolor:=jaune;
ObjetDeplacement3(2);
AffichageObjet3;
\end{lstlisting}
\section{Ces objets, on peut les couper ?}
\begin{Danger}
  Il n'y a que la section d'un objet par un plan qui est implanté. Et
  même avec cela, les \texttt{arithmetic overflow} sont assez
  courants. On peut avoir également des erreurs de précisions qui
  entraînent certaines représentations non conformes.\\Malgré ces
  limitations, \MP\ est capable de nous procurer de bien jolies
  figures. On peut l'aider en modifiant les paramètres
  \param{\texttt{nb}} et \param{\texttt{subh}} pour permettre de
  lever ces {\em petits} soucis.
\end{Danger}
On va donc pouvoir couper les différents objets par un plan. Les
objets seront {\em nécessairement} creux. Pour cela, on va définir un
plan par la macro \macro{\verb!ObjetPlan!} qui accepte comme paramètres
trois points formant le plan. Définir un plan par une équation
cartésienne ou par un point et un vecteur normal n'est pas implanté.
On écrira donc\par
\begin{lstlisting}[frame=tb]
  ObjetPlan1("An=(0,0,0)","Bn=(1,2,0.25)","Cn=(4,-2,1)");
\end{lstlisting}
pour définir le plan d'équation $x=4z$.
Une fois le plan défini, on utilise la macro
\macro{\verb!ObjetSepare2(5,7)!} où 2 est le numéro de l'objet à
couper; 5 et 7 étant les numéros des objets résultants de la coupe : 7
pour la partie \og haute\fg\, 5 pour la partie \og base\fg.
\par Dans l'exemple ci-dessous, on a coupé une sphère de centre $O$ et
de rayon 1 par le plan $x+y+z=1$.
\begin{minipage}{8cm}
  \begin{figurefixe}
    \centering
    \includegraphics{figures/sectionsphere1.pdf}
    \caption{Section d'une sphère.}
  \end{figurefixe}
\end{minipage}
\hfill
\begin{minipage}{9cm}
  \begin{lstlisting}[frame=tb]
 figureespace(-100u,-100u,100u,100u);
 Initialisation(2500,60,30,75);
 creux:=true;
 outcolor:=jaune;
 incolor:=0.5[vert,white];
 nb:=30;
 subh:=19;
 Objetsphere15("R=1");
 Objetplan21("An=(1,0,0)","Bn=(0,1,0)",%
"Cn=(0,0,1)");
 ObjetSepare15(3,4);
 AffichageObjet3;
 TraceAxesD(2,2,2);
 finespace;
\end{lstlisting}
\end{minipage}
\par Voici la section d'un tore par le plan d'équation $x=4z$.
\par
\begin{minipage}{8cm}
  \begin{figurefixe}
    \centering
    \includegraphics[width=8cm]{figures/sectiontore1.pdf}
    \caption{Section d'un tore.}
  \end{figurefixe}
\end{minipage}
\hfill
\begin{minipage}{9cm}
\begin{lstlisting}[frame=tb]
 figureespace(-100u,-100u,100u,100u);
 Initialisation(2500,60,30,75);
 creux:=true;
 outcolor:=jaune;
 incolor:=0.5[vert,white];
 nb:=30;
 subh:=20;
 Objettore15("R=2","r=0.75");
 Objetplan21("An=(1,0,0.25)","Bn=(2,1,0.5)","Cn=(-1,0,-0.25)");
 ObjetSepare15(3,4);
 AffichageObjet3;
 finespace;
\end{lstlisting}
\end{minipage}
\par Un autre exemple (voir figure \ref{fig:sectioncube}) où on coupe
un cube d'arête 2 centré sur $O$ par le même plan d'équation $x=4z$
que ci-dessus.
\begin{figure}[!ht]
  \centering
  \subfigure[Section d'un
  cube]{\includegraphics{figures/sectioncube1.pdf}}\hfill\subfigure[en
  vue de
  dessus]{\includegraphics{figures/sectioncube3.pdf}}\hfill\subfigure[en vue de face]{\includegraphics{figures/sectioncube2.pdf}}
  \caption{Sections d'un cube}
  \label{fig:sectioncube}
\end{figure}
\begin{lstlisting}[frame=tb]
 figureespace(-100u,-100u,100u,100u);
 Initialisation(2500,60,30,75);
 creux:=true;
 outcolor:=jaune;
 incolor:=0.5[vert,white];
 nb:=30;
 subh:=5;
 Objetcube15("a=2");
 Objetplan21("An=(1,0,0.25)","Bn=(0,1,0)","Cn=(4,0,1)");
 ObjetSepare15(3,4);
 AffichageObjet4;
 TraceAxesD(2,2,2);
 finespace;
\end{lstlisting}
\newpage
On peut également enchaîner les coupes\footnote{Mais là, je ne
  garantis pas les résultats.}.\par
\begin{minipage}{8cm}
  \begin{figurefixe}
    \centering
    \includegraphics[width=8cm]{figures/doublesectioncone1.pdf}
    \caption{Double section d'un cône}
  \end{figurefixe}
\end{minipage}
\hfill
\begin{minipage}{9cm}
  \begin{lstlisting}[frame=tb]
 figureespace(-100u,-100u,100u,100u);
 Initialisation(2500,-60,30,75);
 creux:=true;
 outcolor:=jaune;
 incolor:=0.5[vert,white];
 nb:=30; subh:=11;
 angx:=90; TR:=(0,5,0);
 Objetcone15("r=2","h=10");
 angx:=0; TR:=(0,0,0);
 Objetplan21("An=(1,-1,0)","Bn=(2,-2,1)","Cn=(-2,2,1)");
 ObjetSepare15(1,2);
 Objetplan22("An=(1,1,0)","Bn=(2,2,1)","Cn=(-2,-2,1)");
 ObjetSepare1(3,4);
 AffichageObjet3;
 finespace;
\end{lstlisting}
\end{minipage}
\section{La fusion ? C'est parti !}
Une fois que l'on dispose de tous ces objets, on peut les fusionner
pour créer une scène. La méthode mise en place est la suivante :
\begin{itemize}
\item On définit les objets les uns après les autres en leur
  attribuant, si besoin est, les couleurs \param{\verb!outcolor!} et \param{\verb!incolor!};
\item puis on fusionne tous ces objets. Simple, non ?
\end{itemize}
Prenons un exemple:\par
\begin{minipage}{8cm}
  \begin{figurefixe}
    \centering
      \includegraphics[width=6cm]{figures/fusionsyr1.pdf}
    \caption{Un tore et un cône}
    \label{fig:fusionsyr1}
  \end{figurefixe}
\end{minipage}
\hfill
\begin{minipage}{10cm}
  \begin{lstlisting}[frame=tb]
 %5''
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,10,20,50);
 outcolor:=rouge;
 nb:=18; subh:=24;
 Objetcone1("r=2.5","h=5");
 outcolor:=bleu;
 angy:=20; TR:=(0,0,2);
 Objettore2("R=2","r=0.5");
 nbobj:=2;
 DessineFusion;
 finespace;
  \end{lstlisting}
\end{minipage}
Convaincu de la simplicité ? Non ? Alors en voici un autre :\par
\begin{minipage}{8cm}
  \begin{figurefixe}
    \centering
    \includegraphics[width=7cm]{figures/fusionphan1.pdf}
    \caption{Une hélice entourant un cylindre}
  \end{figurefixe}
\end{minipage}
\hfill
\begin{minipage}{10cm}
  \begin{lstlisting}[frame=tb]
 %30''
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,60,40,50);
 angy:=90; TR:=(-1,0,0);
 nb:=18; subh:=24;
 outcolor:=blanc;
 Objetcylindre1("r=0.5","h=7");
 TR:=(0,0,0);
 nb:=12;
 ObjetTube2("(sin(t),cos(t),t/5)","(cos(t),-sin(t),1/5)",0.25,-5,165,0.2);
 nbobj:=2;
 DessineFusion;
 finespace;
  \end{lstlisting}
\end{minipage}
La fusion se fait donc par l'usage de la macro
\macro{\verb!DessineFusion!} qui fusionne tous les objets créés
précédemment. Elle dépend de \param{nbobj} qui lui indique le nombre
d'objets à fusionner. La numérotation des objets prend ici tout son
sens. C'est ce qui permet à la macro de retrouver ses petits\ldots
\par\begin{minipage}{8cm}
  \includegraphics[width=8cm]{figures/fusionhorop1.pdf}
\end{minipage}
\hfill
\begin{minipage}{10cm}
  \begin{lstlisting}[frame=tb]
 figureespace(-20u,-20u,20u,20u);
 Initialisation(500,60,20,30);
 creux:=true;
 nb:=16; subh:=18;
 outcolor:=blanc;
 incolor:=0.5[vert,white];
 angx:=90; TR:=(2,9,0);
 Objetcylindre1("r=1","h=18");
 outcolor:=0.5[jaune,blanc];
 incolor:=0.5[violet,blanc];
 angx:=0; TR:=(0,0,0);
 ObjetTube2("(2*(1+cos(t)),2*tan(t/2),2*sin(t))","(-2*sin(t),2/((cos(t/2))**2),2*cos(t))",1,-2.7468,71,0.0763);
 nbobj:=2;
 DessineFusion;
 finespace;
  \end{lstlisting}
\end{minipage}
\par Un autre exemple avec des solides creusés manuellement.\par
\begin{minipage}{8cm}
  \includegraphics[width=8cm]{figures/fusionsolidescreux1.pdf}
\end{minipage}
\hfill
\begin{minipage}{9cm}
  \begin{lstlisting}[frame=tb]
 nb:=12; subh:=36;

 figureespace(-10u,-10u,10u,10u);
 Initialisation(1500,20,20,50);
 creux:=true;
 outcolor:=0.5[jaune,white];
 incolor:=0.5[vert,white];
 Objetanneau1("R=4","r=3","h=1.5");
 ObjetEnleve1(135,136,137,138,%
139,140,150,151,152,153,154,155);
 angx:=90;
 TR:=(0,0,2);
 outcolor:=0.5[bleu,white];
 incolor:=0.5[rouge,white];
 Objetsphere2("R=2");
 ObjetEnleve2(232,233,234,235,%
236,237,238,239);
 nbobj:=2;
 DessineFusion;
 finespace;
\end{lstlisting}
\end{minipage}
\subsection{Deux anneaux}
\begin{minipage}{8cm}
  \includegraphics[width=8cm]{figures/exfusion1.pdf}
\end{minipage}
\hfill
\begin{minipage}{10cm}
  \begin{lstlisting}[frame=tb]
 outcolor:=0.5[rouge,blanc];
 
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,40,20,100);
 nb:=10;
 ObjetTube1("(cos(t),sin(t),0.25)","(-sin(t),cos(t),0)",0.15,0,50,0.12566);
 angx:=90; TR:=(-1,-0.1,0.5);
 ObjetTube2("(cos(t),sin(t),0.25)","(-sin(t),cos(t),0)",0.15,0,50,0.12566);
 nbobj=2;
 DessineFusion;
 finespace;
  \end{lstlisting}
\end{minipage}
\subsection{Trois calottes}
\begin{minipage}{8cm}
  \includegraphics[width=8cm]{figures/exfusion11.pdf}
\end{minipage}
\hfill
\begin{minipage}{10cm}
  \begin{lstlisting}[frame=tb]
 outcolor:=0.5[ciel,blanc]; incolor:=0.5[jaune,blanc];
 
 nb:=24;
 
 figureespace(-10u,-10u,10u,10u);
 Initialisation(500,30,10,50);
 angy:=80;
 subh:=24;
 creux:=true;
 Objetcalotte1("R=2","phib=-pi/2","phih=pi/6");
 outcolor:=0.5[rouge,blanc];
 incolor:=0.5[vert,blanc];
 TR:=(1,0,0);
 Objetcalotte2("R=1.5","phib=-pi/2","phih=pi/6");
 outcolor:=0.5[orange,blanc];
 incolor:=0.5[gris,blanc];
 TR:=(2,0,0);
 Objetcalotte3("R=1","phib=-pi/2","phih=pi/6");
 nbobj:=3;
 DessineFusion;
 finespace;
  \end{lstlisting}
\end{minipage}