push artificiel
[mp-solid.git] / doc / Fusion.tex
1 \chapter{La fusion d'objets}
2 Un petit aperçu\ldots
3 \[\includegraphics{figures/fusion1.pdf}\]
4 \begin{Danger}
5 Tout ce qui est relatif à la fusion d'objets n'est {\em valable} que
6 pour ce chapitre. Ce n'est pas implanté pour les surfaces, les courbes,\ldots
7 \end{Danger}
8 \section{Quels objets fusionner ?}
9 Avant de voir ce que nous permet la fusion, voyons quels objets sont
10 mis à notre disposition : \texttt{tétraèdre régulier}, \texttt{cube}
11 et \texttt{pavé droit}, \texttt{octaèdre régulier}, \texttt{dodécaèdre
12 régulier}, \texttt{icosaèdre régulier}, \texttt{prisme} et
13 \texttt{prisme creux}, \texttt{cylindre de révolution creux} et
14 \texttt{plein}, \texttt{cône de révolution creux} et \texttt{plein},
15 \texttt{tronc de cône de révolution creux} et \texttt{plein},
16 \texttt{sphère}, \texttt{calotte sphérique creuse} et \texttt{pleine},
17 \texttt{tore}, \texttt{anneau}, \texttt{tube}, \texttt{grille},
18 \texttt{ruban}, \texttt{biface}, \texttt{OFF}, \texttt{OBJ} et \texttt{New}.
19 \begin{Danger}
20 Dans ce chapitre, aucun de ces objets n'est dessiné ! Mais ils sont
21 numérotés. Ainsi pour les afficher, Il faut impérativement utiliser
22 la macro
23 \begin{center}
24 \macro{\verb!AffichageObjet1!}
25 \end{center}
26 1 étant le numéro de l'objet à afficher.
27 \end{Danger}
28
29 Voici comment les définir :
30
31 \begin{center}
32 \begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
33 \multicolumn{1}{c}{\textcolor{red}{Tétraèdre régulier}}&\verb!"a=3"!
34 (\texttt{a} rayon de la sphère circonscrite)&\includegraphics[width=5.5cm]{figures/objettetraedre1.pdf}&%\\
35 \begin{verbatim}
36 Objettetraedre1("a=1");
37 AffichageObjet1;
38 \end{verbatim}\\
39 \multicolumn{1}{c}{\textcolor{red}{Cube}}&\verb!"a=3"!&\includegraphics[width=5.5cm]{figures/objetcube1.pdf}&%\\
40 \begin{verbatim}
41 %subh:=9;
42 Objetcube1("a=4");
43 AffichageObjet1;
44 \end{verbatim}\\
45 \multicolumn{1}{c}{\textcolor{red}{Octaèdre régulier}}&\verb!"a=3"!
46 (\texttt{a} rayon de la sphère circonscrite)&\includegraphics[width=5.5cm]{figures/objetoctaedre1.pdf}&%\\
47 \begin{verbatim}
48 Objetoctaedre1("a=1");
49 AffichageObjet1;
50 \end{verbatim}\\
51 \multicolumn{1}{c}{\textcolor{red}{Dodécaèdre régulier}}&\verb!"a=3"!
52 (\texttt{a} rayon de la sphère circonscrite)&\includegraphics[width=5.5cm]{figures/objetdodecaedre1.pdf}&%\\
53 \begin{verbatim}
54 Objetdodecaedre1("a=1");
55 AffichageObjet1;
56 \end{verbatim}\\
57 \end{tabular}
58 \end{center}
59 \begin{center}
60 \begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
61 \multicolumn{1}{c}{\textcolor{red}{Icosaèdre régulier}}&\verb!"a=3"!
62 (\texttt{a} rayon de la sphère circonscrite)&\includegraphics[width=5.5cm]{figures/objeticosaedre1.pdf}&%\\
63 \begin{verbatim}
64 Objeticosaedre1("a=1");
65 AffichageObjet1;
66 \end{verbatim}\\
67 \multicolumn{1}{c}{\textcolor{red}{Pavé droit}}&\verb!"L=2","H=1",!\par\verb!"P=0.5"!&\includegraphics[width=5.5cm]{figures/objetpave1.pdf}&%\\
68 \begin{verbatim}
69 %subh:=9;
70 Objetpave1("L=2","H=6","P=4");
71 AffichageObjet1;
72 \end{verbatim}\\
73 \multicolumn{1}{c}{\textcolor{red}{Prisme plein}}&\verb!("axe=(0,1,2)"!%
74 \par\verb!,"h=3")!\par
75 \verb!(Liste sommets)!&\includegraphics[width=5.5cm]{figures/objetprisme1.pdf}&%\\
76 \begin{verbatim}
77 %nb:=4;subh:=20;
78 ObjetPrisme1("axe=(0,0.5,1)",%
79 "h=2")%
80 ((1,0,0),(2,3,0),(-1,4,0));
81 AffichageObjet1;
82 \end{verbatim}\\
83 \multicolumn{1}{c}{\textcolor{red}{Prisme creux}}&\verb!("axe=(0,1,2)"!%
84 \par\verb!,"h=3")!\par
85 \verb!(Liste sommets)!&\includegraphics[width=5.5cm]{figures/objetprisme2.pdf}&%\\
86 \begin{verbatim}
87 %nb:=4;subh:=20;
88 creux:true;
89 Objetprisme1("axe=(0,0.5,1)",%
90 "h=2")%
91 ((1,0,0),(2,3,0),(-1,4,0));
92 AffichageObjet1;
93 \end{verbatim}\\
94 \end{tabular}
95 \end{center}
96 \begin{center}
97 \begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
98 \multicolumn{1}{c}{\textcolor{red}{Tore}}&\verb!"R=3","r=2"!&\includegraphics[width=5.5cm]{figures/objettore1.pdf}&%\\
99 \begin{verbatim}
100 %nb:=24;subh:=36;
101 Objettore1("R=4","r=1");
102 AffichageObjet1;
103 \end{verbatim}\\
104 \multicolumn{1}{c}{\textcolor{red}{Tube plein}\footnotemark}&\verb!"F(t)","F'(t)"!,
105 \verb!rayon!, \verb!umin!, \verb!nb de points!, \verb!pas!&\includegraphics[width=5.5cm]{figures/objettube1.pdf}&%\\
106 \begin{verbatim}
107 %nb:=16;subh:=18;
108 ObjetTube1("(%
109 2*(1+cos(t)),2*tan(t/2),2*sin(t)%
110 )","(%
111 -2*sin(t),2/((cos(t/2))**2),2*cos(t)%
112 )", 1,-2.7468,71,0.0763);
113 AffichageObjet1;
114 \end{verbatim}\\
115 \multicolumn{1}{c}{\textcolor{red}{Tube creux}}&\verb!"F(t)","F'(t)"!,
116 \verb!rayon!, \verb!umin!, \verb!nb de points!, \verb!pas!&\includegraphics[width=5.5cm]{figures/objettube2.pdf}&%\\
117 \begin{verbatim}
118 %nb:=16;subh:=18;
119 creux:=true;
120 ObjetTube1("(%
121 2*(1+cos(t)),2*tan(t/2),2*sin(t)%
122 )","(%
123 -2*sin(t),2/((cos(t/2))**2),2*cos(t)%
124 )",1,-2.7468,71,0.0763);
125 AffichageObjet1;
126 \end{verbatim}\\
127 \textcolor{red}{Cylindre de révolution creux}&\verb!"r=1","h=2"!&\includegraphics[width=5.5cm]{figures/objetcylindre1.pdf}&%\\
128 \begin{verbatim}
129 creux:=true;
130 %nb:=24;subh:=9;
131 Objetcylindre1("r=2","h=4");
132 AffichageObjet1;
133 \end{verbatim}\\
134 \end{tabular}
135 \footnotetext{Le tube représenté ici est relatif à la courbe {\em
136 horoptère}.}
137 \end{center}
138 \begin{center}
139 \begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
140 \textcolor{red}{Cylindre de révolution plein}&\verb!"r=1","h=2"!&\includegraphics[width=5.5cm]{figures/objetcylindre2.pdf}&%\\
141 \begin{verbatim}
142 creux:=false;
143 %nb:=24;subh:=9;
144 Objetcylindre1("r=2","h=4");
145 AffichageObjet1;
146 \end{verbatim}\\
147 \textcolor{red}{Cône de ré\-vo\-lu\-tion creux}&\verb!"r=1","h=2"!&\includegraphics[width=5.5cm]{figures/objetcone1.pdf}&%\\
148 \begin{verbatim}
149 creux:=true;
150 %nb:=24;subh:=9;
151 Objetcone1("r=1.5","h=4");
152 AffichageObjet1;
153 \end{verbatim}\\
154 \textcolor{red}{Cône de ré\-vo\-lu\-tion plein}&\verb!"r=1","h=2"!&\includegraphics[width=5.5cm]{figures/objetcone2.pdf}&%\\
155 \begin{verbatim}
156 creux:=false;
157 %nb:=24;subh:=9;
158 Objetcone1("r=1.5","h=4");
159 AffichageObjet1;
160 \end{verbatim}\\
161 \textcolor{red}{Tronc de cône creux}&\verb!"r=1"!, \verb!"h=2"!, \verb!"H=5"!&\includegraphics[width=5.5cm]{figures/objettronccone1.pdf}&%\\
162 \begin{verbatim}
163 creux:=true;
164 %nb:=24;subh:=9;
165 Objettronccone1("r=2","h=4","H=5");
166 AffichageObjet1;
167 \end{verbatim}\\
168 \textcolor{red}{Tronc de cône plein}&\verb!"r=1"!, \verb!"h=2"!, \verb!"H=5"!&\includegraphics[width=5.5cm]{figures/objettronccone2.pdf}&%\\
169 \begin{verbatim}
170 creux:=false;
171 %nb:=24;subh:=9;
172 Objettronccone1("r=2","h=2","H=3");
173 AffichageObjet1;
174 \end{verbatim}\\
175 \end{tabular}
176 \end{center}
177 \begin{center}
178 \begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
179 \multicolumn{1}{c}{\textcolor{red}{Sphère}}&\verb!"R=3"!&\includegraphics[width=5.5cm]{figures/objetsphere1.pdf}&%\\
180 \begin{verbatim}
181 %nb:=24;subh:=18;
182 Objetsphere1("R=2");
183 AffichageObjet1;
184 \end{verbatim}\\
185 \textcolor{red}{Calotte sphérique pleine}&\verb!"r=3"!,
186 \verb!"phib=-pi/4"!, \verb!"phih=pi/6"! (en radians)&\includegraphics[width=5.5cm]{figures/objetcalotte1.pdf}&%\\
187 \begin{verbatim}
188 %nb:=24;subh:=24;
189 Objetcalotte1(%
190 "R=4","phib=-pi/3","phih=pi/4");
191 AffichageObjet1;
192 \end{verbatim}\\
193 \textcolor{red}{Calotte sphérique creuse}&\verb!"r=3"!,
194 \verb!"phib=-pi/4"!, \verb!"phih=pi/6"! (en radians)&\includegraphics[width=5.5cm]{figures/objetcalotte2.pdf}&%\\
195 \begin{verbatim}
196 %nb:=24;subh:=24;
197 Objetcalotte1(%
198 "R=4","phib=-pi/3","phih=pi/4");
199 AffichageObjet1;
200 \end{verbatim}\\
201 \textcolor{red}{Anneau à section rectangulaire}&\verb!"R=3"!, \verb!"r=1"!, \verb!"h=2"!&\includegraphics[width=5.5cm]{figures/objetanneau1.pdf}&%\\
202 \begin{verbatim}
203 %subh:=24;
204 Objetanneau1("R=4","r=3","h=1.5");
205 AffichageObjet1;
206 \end{verbatim}\\
207 \textcolor{red}{Grille dans le plan $(xOy)$}&\verb!"am=-3"!,
208 \verb!"an=2"!, \verb!"bm=-2"!, \verb!"bn=4"!&\includegraphics[width=5.5cm]{figures/objetgrille1.pdf}&%\\
209 \begin{verbatim}
210 %nb:=10;subh:=6;
211 Objetgrille1("am=-2.5","an=2.5",%
212 "bm=-1.5","bn=1.5");
213 AffichageObjet1;
214 \end{verbatim}\\
215 \end{tabular}
216 \end{center}
217 \begin{center}
218 \begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
219 \textcolor{red}{Ruban d'axe $(Oz)$}&\verb!"h=2"!,
220 \verb!Liste des!, \verb!sommets!&\includegraphics[width=5.5cm]{figures/objetruban1.pdf}&%\\
221 \begin{verbatim}
222 %subh:=3;
223 ObjetRuban2("h=2")((0,0,0),%
224 (2,2,0),(4,0,0),(6,2,0));
225 AffichageObjet2;
226 \end{verbatim}\\
227 \multicolumn{1}{c}{\textcolor{red}{Biface\footnotemark}}&\verb!Liste! \verb!des! \verb!sommets!&\includegraphics[width=5.5cm]{figures/objetbiface1.pdf}&%\\
228 \begin{verbatim}
229 ObjetBiface1((5,0,0) for %
230 t=0.06544 step 0.06544%
231 until pi:%
232 ,(5*(cos(t)**2),%
233 (3*sin(t)*((cos(t))**3))%
234 ,0) endfor);
235 AffichageObjet1;
236 \end{verbatim}\\
237 \multicolumn{1}{c}{\textcolor{red}{\texttt{OFF}}}&\verb!Nom! \verb!du! \verb!fichier!&\includegraphics[width=5.5cm]{figures/objetoff1.pdf}&%\\
238 \begin{verbatim}
239 debut:=0;
240 echelle:=15000;
241 ObjetOFF1("Kangaroo.off");
242 AffichageObjet1;
243 \end{verbatim}\\
244 \multicolumn{1}{c}{\textcolor{red}{\texttt{OBJ}}}&\verb!Nom! \verb!du! \verb!fichier!&\includegraphics[width=5.5cm]{figures/objetobj1.pdf}&%\\
245 \begin{verbatim}
246 echelle:=200;
247 ObjetOFF1("Midpoly_03-1.obj");
248 AffichageObjet1;
249 \end{verbatim}\\
250 \end{tabular}
251 \footnotetext{Sur la figure proposée, il y a en fait quatre solides
252 biface.}
253 \end{center}
254 \begin{center}
255 \begin{tabular}{m{2.5cm}m{2.75cm}m{6cm}>{\footnotesize}m{6.5cm}}
256 \multicolumn{1}{c}{\textcolor{red}{New}}&\verb!Liste! \verb!des!
257 \verb!sommets!, \verb!Liste! \verb!des! \verb!faces!&\includegraphics[width=5.5cm]{figures/objetnew1.pdf}&%\\
258 \begin{verbatim}
259 %hexaedre tetrakis
260 ObjetNew1((0,0,-3*sqrt(6)/4),%
261 (-sqrt(3)/2,-3/2,-sqrt(6)/4),%
262 (sqrt(3),0,-sqrt(6)/4),%
263 (-sqrt(3)/2,3/2,-sqrt(6)/4),%
264 (sqrt(3)/2,-3/2,sqrt(6)/4),%
265 (-sqrt(3),0,sqrt(6)/4),%
266 (sqrt(3)/2,3/2,sqrt(6)/4),%
267 (0,0,3*sqrt(6)/4),%
268 (-3*sqrt(3)/4,0,-3*sqrt(6)/8),%
269 (3*sqrt(3)/8,-9/8,-3*sqrt(6)/8),%
270 (3*sqrt(3)/8,9/8,-3*sqrt(6)/8),%
271 (-3*sqrt(3)/8,-9/8,3*sqrt(6)/8),%
272 (-3*sqrt(3)/8,9/8,3*sqrt(6)/8),%
273 (3*sqrt(3)/4,0,3*sqrt(6)/8)%
274 )(3,0,1,8,%
275 3,0,8,3,%
276 3,3,8,5,%
277 3,1,5,8,%
278 3,0,9,1,%
279 3,0,2,9,%
280 3,2,4,9,%
281 3,1,9,4,%
282 3,0,3,10,%
283 3,0,10,2,%
284 3,2,10,6,%
285 3,3,6,10,%
286 3,2,13,4,%
287 3,2,6,13,%
288 3,6,7,13,%
289 3,4,13,7,%
290 3,3,5,12,%
291 3,3,12,6,%
292 3,6,12,7,%
293 3,5,7,12,%
294 3,1,11,5,%
295 3,1,4,11,%
296 3,4,7,11,%
297 3,5,11,7%
298 );
299 \end{verbatim}\\
300 \end{tabular}
301 \end{center}
302 Pour beaucoup de ces objets, les \param{\verb!nb!} et/ou
303 \param{\verb!subh!} sont requis et ont la possibilité d'être modifiés. Ils
304 représentent le maillage sur chacun des objets. De manière générale,
305 \param{\verb!nb!} représente le maillage de \og la base\fg\ du solide
306 et \param{\verb!subh!} représente le maillage \og vertical\fg\ de
307 l'objet.
308 \par Pour les objets possédant une version creuse, c'est le paramètre
309 booléen \param{\verb!creux!} qui fait la différence. Sa valeur par
310 défaut est \verb!false!.
311 \subsection{Compléments sur l'objet \texttt{ruban}}
312 Le ruban est un paravent. Il s'agit simplement de positionner les
313 sommets dans le plan $(Oxy)$ et de donner la hauteur du paravent
314 souhaité.
315 \\Il n'est pas toujours nécessaire de prendre une ligne \og brisée\fg\
316 comme support de base pour le ruban.
317 \paragraph{Exemple 1 : Un paravent sinusoïdal}\hfill\newline
318 \begin{figure}[!ht]
319 \centering
320 \includegraphics[scale=0.9]{figures/rubansinus1.pdf}
321 \caption{Un paravent sinusoïdal}
322 \label{fig:exsyr3}
323 \end{figure}
324 \begin{lstlisting}[frame=tb]
325 figureespace(-10u,-10u,10u,10u);
326 Initialisation(500,60,20,25);
327 nb:=10; subh:=26;
328 eclairage:=false;%<-pour obtenir la grille en blanc
329 outcolor:=blanc;
330 Objetgrille1("am=-5","an=5","bm=-13","bn=13");
331 AffichageObjet1;
332 eclairage:=true;
333 outcolor:=0.5[rouge,blanc]; incolor:=0.5[vert,blanc];
334 subh:=3;
335 ObjetRuban2("h=2")(for t=-4*pi step (pi/12) until 47*pi/12:(2*sin(t),t,0), endfor(0,4*pi,0));
336 AffichageObjet2;
337 TraceAxes;
338 finespace;
339 \end{lstlisting}
340 \paragraph{Exemple 2 : Un paravent d'amour}\hfill\newline
341 \begin{figure}[!ht]
342 \centering
343 \includegraphics{figures/rubancardioide1.pdf}
344 \caption{Un paravent d'amour}
345 \end{figure}
346 \begin{lstlisting}[frame=tb]
347 figureespace(-10u,-10u,10u,10u);
348 Initialisation(500,60,20,25);
349 nb:=17; subh:=20;
350 eclairage:=false;
351 drawoptions(withcolor gris);
352 outcolor:=blanc;
353 Objetgrille1("am=-5.5","an=3","bm=-5","bn=5");
354 AffichageObjet1;
355 drawoptions();
356 eclairage:=true;
357 outcolor:=0.5[rouge,blanc]; incolor:=0.5[vert,blanc];
358 subh:=3;
359 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));
360 AffichageObjet2;
361 TraceAxesD(3.5,5.5,4);
362 finespace;
363 \end{lstlisting}
364 \subsection{Compléments sur l'objet \texttt{prisme}}
365 Si l'on souhaite définir un prisme avec une base peu courante, on
366 utilisera la macro \macro{\verb!ObjetPrisme!} (avec une majuscule) de
367 la même façon que la macro \macro{\verb!Objetprisme!} en définissant
368 l'axe, la hauteur et la liste des sommets formant la base.
369 \paragraph{Exemple 1 : Prisme droit à section carrée
370 arrondie}\hfill\newline
371 \begin{minipage}{9cm}
372 \begin{figurefixe}
373 \centering
374 \includegraphics[width=8cm]{figures/prismearrondi1.pdf}
375 \caption{Prisme droit à section carrée arrondie}
376 \label{fig:exsyr4}
377 \end{figurefixe}
378 \end{minipage}
379 \hfill
380 \begin{minipage}{9cm}
381 \begin{lstlisting}[frame=tb]
382 outcolor:=0.5[orange,blanc];
383
384 figureespace(-10u,-10u,10u,10u);
385 Initialisation(1500,-25,30,20);
386 eclairage:=false;
387 nb:=4;subh:=4;
388 Objetgrille0("am=-2","an=2","bm=-2","bn=2");
389 AffichageObjet0;
390 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));
391 AffichageObjet1;
392 TraceAxesD(2,2,2);
393 finespace;
394 \end{lstlisting}
395 \end{minipage}
396 \paragraph{Exemple 2 : Demi-prisme droit à section couronne circulaire}\hfill\newline
397 \begin{minipage}{9cm}
398 \begin{figurefixe}
399 \centering
400 \includegraphics[width=8cm]{figures/demiprisme1.pdf}
401 \label{fig:exsyr5}
402 \end{figurefixe}
403 \end{minipage}
404 \hfill
405 \begin{minipage}{9cm}
406 \begin{lstlisting}[frame=tb]
407 figureespace(-10u,-10u,10u,10u);
408 Initialisation(500,60,30,25);
409 outcolor:=blanc;
410 subh:=10;
411 Objetgrille1("am=-5","an=5","bm=-5","bn=5");
412 AffichageObjet1;
413 outcolor:=jaune; incolor:=rouge;
414 nb:=1; subh:=5;
415 angx:=90; TR:=(0,4,0);
416 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));
417 AffichageObjet2;
418 TraceAxes;
419 finespace;
420 \end{lstlisting}
421 \end{minipage}
422 \par
423 \begin{minipage}{9cm}
424 \begin{figurefixe}
425 \centering
426 \includegraphics[width=8cm]{figures/demiprisme2.pdf}
427 \label{fig:exsyr6}
428 \end{figurefixe}
429 \end{minipage}
430 \hfill
431 \begin{minipage}{9cm}
432 \begin{lstlisting}[frame=tb]
433 figureespace(-10u,-10u,10u,10u);
434 Initialisation(500,60,30,25);
435 outcolor:=blanc;
436 subh:=10;
437 Objetgrille1("am=-5","an=5","bm=-5","bn=5");
438 AffichageObjet1;
439 outcolor:=jaune; incolor:=rouge;
440 nb:=1; subh:=5;
441 angx:=90; TR:=(0,4,0);
442 creux:=true;%<-changement en solide creux
443 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));
444 AffichageObjet2;
445 TraceAxes;
446 finespace;
447 \end{lstlisting}
448 \end{minipage}
449 \paragraph{Exemple 2: Prisme droit creux dont la section est un
450 bifolium régulier}\hfill\newline
451 \begin{minipage}{8cm}
452 \includegraphics[width=8cm]{figures/prismebifolium1.pdf}
453 \end{minipage}
454 \hfill
455 \begin{minipage}{10cm}
456 \begin{lstlisting}[frame=tb]
457 figureespace(-10u,-10u,10u,10u);
458 Initialisation(500,60,30,25);
459 outcolor:=blanc;
460 subh:=10;
461 Objetgrille1("am=-5","an=5","bm=-5","bn=5");
462 AffichageObjet1;
463 outcolor:=vert; incolor:=orange;
464 nb:=1; subh:=5;
465 creux:=true;
466 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));
467 AffichageObjet2;
468 TraceAxes;
469 finespace;
470 \end{lstlisting}
471 \end{minipage}
472 \subsection{Compléments sur les objets \texttt{cylindre} et \texttt{cone}}
473 S'il l'on veut généraliser la notion de cylindre, la macro
474 \macro{\texttt{Objetcylindre}} ne suffit pas. En effet, il devient nécessaire de
475 définir une courbe {\em directrice} et la direction de {\em l'axe du
476 cylindre}.\\
477 \`A cet effet, la macro \macro{\texttt{ObjetCylindre}} ({\em notez la
478 majuscule}) a été défini.
479 \begin{center}
480 \macro{\verb!ObjetCylindre1(fn,umin,umax,vmin,vmax)!}
481 \end{center}
482 Proposons un exemple.
483 \begin{figure}[h]
484 \centering
485 \includegraphics{figures/cylindreastroide1.pdf}
486 \caption{Cylindre à base astroïdale et d'axe $(0;0;1)$}
487 \end{figure}
488 Définissons la courbe spatiale \param{\verb!fn!} :
489 \verb!(3*(cos(u)**3),3*(sin(u)**3),-2+v)! de paramètre {\em obligatoire}
490 \verb!u! et \verb!v!. C'est une astroïde tracé dans
491 le plan $z=-2$. Les paramètres seront donc \param{\verb!umin!$=\pi$};
492 \param{\verb!umax!$=-\pi$}, \param{\verb!vmin!=$0$} et (par exemple)
493 \param{\verb!vmax!$=4$} pour aller jusqu'au plan $z=2$..
494 Le code dont résulte la figure ci-dessus est donc
495 \begin{lstlisting}[frame=tb]
496 nb:=24; subh:=12;
497
498 figureespace(-10u,-10u,10u,10u);
499 Initialisation(500,30,20,50);
500 arcenciel:=true;
501 incolor:=0.75[orange,blanc];
502 ObjetCylindre1("(3*(cos(u)**3),3*(sin(u)**3),-2+v)",pi,-pi,0,4);
503 AffichageObjet1;
504 finespace;
505 \end{lstlisting}
506 \par Si l'on souhaite avoir maintenant le même cylindre partant du
507 plan $z=0$ mais d'axe $(0;1;2)$, on codera alors
508 \par
509 \begin{minipage}{8cm}
510 \includegraphics[width=8cm]{figures/cylindreastroide2.pdf}
511 \end{minipage}
512 \hfill
513 \begin{minipage}{10cm}
514 \begin{lstlisting}[frame=tb]
515 nb:=24; subh:=12;
516
517 figureespace(-10u,-10u,10u,10u);
518 Initialisation(500,30,20,50);
519 arcenciel:=true;
520 incolor:=0.75[orange,blanc];
521 ObjetCylindre1("(3*(cos(u)**3),3*(sin(u)**3)+v,2*v)",pi,-pi,0,2);
522 AffichageObjet1;
523 finespace;
524 \end{lstlisting}
525 \end{minipage}
526 L'usage de la macro \macro{\verb!ObjetCone!} (toujours avec la
527 majuscule) est le même pour la généralisation des cônes. Toutefois, il
528 faut ici définir une origine et les deux nappes du cône seront
529 symétriques par rapport à cette origine.
530 \begin{center}
531 \macro{\verb!ObjetCone1(fn,umin,umax,zbas,"orig=...")!}
532 \end{center}
533 Il ne faut pas oublier de
534 placer la courbe directrice dans le même plan que le plan de base du cône.\\Pour mieux exploiter cette
535 fonctionnalité, voici l'exemple d'un cône dont la directrice est une
536 branche d'épicycloïde et dont l'origine est le point $(0;1;3)$.
537 \par
538 \begin{minipage}{8cm}
539 \includegraphics[width=8cm]{figures/coneepi1.pdf}
540 \end{minipage}
541 \hfill
542 \begin{minipage}{10cm}
543 \begin{lstlisting}[frame=tb]
544 nb:=48;subh:=8;
545
546 figureespace(-10u,-10u,10u,10u);
547 Initialisation(500,-10,15,30);
548 outcolor:=0.5[vert,blanc];
549 incolor:=orange;
550 r:=1; q:=4;
551 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;
552 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)");
553 AffichageObjet1;
554 TraceAxes;
555 finespace;
556 \end{lstlisting}
557 \end{minipage}
558 \subsection{Compléments sur les objets \texttt{anneau}}
559 L'objet \macro{\texttt{Objetanneau}} propose {\em par défaut} une
560 section rectangulaire.
561 \par
562 \begin{minipage}{8cm}
563 \includegraphics{figures/sectionanneau1.pdf}
564 \end{minipage}
565 \hfill
566 \begin{minipage}{9cm}
567 \[\includegraphics{figures/Sectionanneau1.pdf}\]
568 \begin{lstlisting}
569 Objetannneau1("R=8","r=6","h=3");
570 \end{lstlisting}
571 \end{minipage}
572 \par Pour utiliser une autre section telle que celle-ci
573 \[\includegraphics{figures/sectionanneau2.pdf}\]
574 on utilisera
575 \begin{center}
576 \macro{\verb!ObjetAnneau1("nbp=...",pp)!}
577 \end{center}
578\param{\verb!nbp!} est le nombre de sommets de la section et
579 \param{\verb!pp!} un chemin \MP\ représentant la section souhaitée.
580 \par
581 \begin{minipage}{8cm}
582 \includegraphics[width=8cm]{figures/Sectionanneau2.pdf}
583 \end{minipage}
584 \hfill
585 \begin{minipage}{10cm}
586 \begin{lstlisting}[frame=tb]
587 figureespace(-10u,-10u,10u,10u);
588 Initialisation(500,30,30,25);
589 arcenciel:=true;
590 incolor:=jaune;
591 R:=4;
592 subh:=24;
593 path pp;
594 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;
595 ObjetAnneau1("nbp=42",pp);
596 AffichageObjet1;
597 finespace;
598 \end{lstlisting}
599 \end{minipage}
600 \subsection{Compléments sur l'objet \texttt{new}}
601 La déclaration des sommets se fait sous forme de triplets. La
602 déclaration des faces se faisant quant à elle, sous la forme d'un
603 $n+1$-uplet où $n$ est le nombre de sommets composant la face; le
604 premier nombre étant d'ailleurs égal à $n$ suivi des nombres
605 représentant les sommets de cette face : \texttt{3 4 7 8} représente
606 une face triangulaire (3) composée des sommets 4, 7 et 8 {\em donnés
607 dans le sens trigonométrique si l'on regarde la face de
608 l'extérieur}.
609 \par La déclaration des sommets et des faces peut aussi être plus
610 complexes. Cet exemple, repris de la documentation de
611 \verb!pst-solides3d! montre comment on peut définir à l'aide de
612 boucles la liste des sommets et la liste des faces.
613 \par
614 \begin{minipage}{6cm}
615 \includegraphics[width=6cm]{figures/hyperboloiderayonconstant1.pdf}
616 \end{minipage}
617 \hfill
618 \begin{minipage}{10cm}
619 \begin{lstlisting}[frame=tb]
620 Initialisation(500,30,20,25);
621 a=20;b=36;h=8;
622 zz=-h/2;
623 ObjetNew1((sqrt(1+((zz+h)**2)/4),0,zz+h)
624 for m=a downto 0:
625 for n=if m=a:b-1 else:b fi downto 1:
626 ,(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)
627 endfor
628 endfor
629 )(4,a*b,b+a*b,b-1+a*b,a*b-1
630 for m=a downto 1:
631 for n=if m=a:m*b-1 else: m*b fi downto (m-1)*b+2:
632 ,4,n,b+n,(b-1)+n,n-1
633 endfor
634 ,4,m*b+1,(m+1)*b,m*b,(m-1)*b+1
635 endfor
636 );
637 \end{lstlisting}
638 \end{minipage}
639 \subsection{Numéroter et enlever des facettes}
640 Lorsque le paramètre booléen \param{\verb!numeroteface!} est
641 positionné à \verb!true!, on numérote {\em toutes} les faces {\em
642 visibles} du solide. La police utilisée est \verb!cmr5!; on peut
643 bien évidemment la modifier grâce à \verb!defaultfont!.
644 \par
645 \begin{minipage}{6cm}
646 \includegraphics[width=6cm]{figures/cubenumerote1.pdf}
647 \end{minipage}
648 \hfill
649 \begin{minipage}{10cm}
650 \begin{lstlisting}[frame=tb]
651 defaultfont:="cmr7";
652 Initialisation(1500,30,20,20);
653 numeroteface:=true;%<-
654 subh:=5;
655 Objetcube1("a=2");
656 AffichageObjet1;
657 TraceAxesD(4,4,4);
658 \end{lstlisting}
659 \end{minipage}
660 \par Une fois ceci fait, si le booléen \param{\verb!creux!} est positionné
661 à \verb!true! alors on peut enlever des facettes pour voir ce qu'il se
662 passe à l'intérieur de l'objet considéré. On définit alors l'objet
663 puis on indique quelles sont les numéros des faces que l'on souhaite
664 enlever grâce à \macro{\verb!ObjetEnleve1(...)!}
665 \par
666 \begin{minipage}{6cm}
667 \includegraphics[width=6cm]{figures/cubecreuse1.pdf}
668 \end{minipage}
669 \hfill
670 \begin{minipage}{11cm}
671 \begin{lstlisting}[frame=tb]
672 Initialisation(1500,30,30,50);
673 subh:=5;
674 creux:=true;%<-
675 Objetcube1("a=3");
676 ObjetEnleve1(7,12,17,31,33,37,41,43,131,133,141,143);
677 AffichageObjet1;
678 \end{lstlisting}
679 \end{minipage}
680 \begin{Danger}
681 Les numéros des faces à enlever doivent être donnés dans l'ordre croissant.
682 \end{Danger}
683 Si l'on souhaite enlever beaucoup de faces, une boucle \verb!for! est
684 possible au prix d'un petit changement de syntaxe.
685 \begin{multicols}{2}
686 \begin{center}
687 \includegraphics{figures/torecreuse1.pdf}
688 \end{center}
689 \begin{lstlisting}[frame=tb]
690 nb:=16; subh:=18;
691
692 figureespace(-10u,-10u,10u,10u);
693 Initialisation(1000,30,20,30);
694 numeroteface:=true;
695 arcenciel:=true;
696 incolor:=0.5[gris,white];
697 Objettore1("R=2","r=1");
698 AffichageObjet1;
699 finespace;
700 \end{lstlisting}
701 \par\columnbreak\par
702 \begin{center}
703 \includegraphics{figures/torecreuse2.pdf}
704 \end{center}
705 \begin{lstlisting}[frame=tb]
706 numeroteface:=false;
707
708 figureespace(-10u,-10u,10u,10u);
709 Initialisation(1000,30,20,30);
710 creux:=true;
711 arcenciel:=true;
712 incolor:=0.5[gris,white];
713 Objettore1("R=2","r=1");
714 string Face;
715 Face=""&for k=133 step 2 until 193:decimal(k)&","&""& endfor decimal(195)&"";
716 ObjetEnleve1(scantokens Face);
717 AffichageObjet1;
718 finespace;
719 \end{lstlisting}
720 \end{multicols}
721 \subsection{Transparence}
722 Elle est implantée grâce au booléen \param{\verb!Transparence!}
723 positionné à \verb!false! par défaut. La couleur de transparence
724 choisie est \param{\verb!fillcolor!} positionnée à gray par défaut.
725 \begin{Danger}
726 C'est une notion gourmande en ressources. Aussi, il est plutôt
727 conseillé de l'utiliser avec des objets {\em simples}.
728 \end{Danger}
729 \begin{figure}[ht]
730 \centering
731 \includegraphics{figures/J671.pdf}
732 \caption{Polygone de Johnson : J67}
733 \end{figure}
734 \section{Et pour les bouger ?}
735 On dispose (et certains codes de la partie précédente l'ont montré) :
736 \begin{itemize}
737 \item des rotations autour des axes $(Ox)$, $(Oy)$ et $(Oz)$;
738 \item des translations;
739 \item de transformations définies par l'utilisateur.
740 \end{itemize}
741 \subsection{Les rotations et translations}
742 L'ordre choisi pour les utiliser est la rotation d'axe $(Ox)$; puis
743 celle d'axe $(Oy)$; puis celle d'axe $(Oz)$ et enfin la
744 translation. Les rotations sont définis par trois angles
745 \param{\verb!angx!}, \param{\verb!angy!} et \param{\verb!angz!}.
746 \begin{figure}[h]
747 \centering
748 \subfigure[Position%
749 initiale]{\includegraphics[width=4cm]{figures/rotation1.pdf}}\hfill
750 \subfigure[Position \texttt{angx:=90}]{\includegraphics[width=4cm]{figures/rotation2.pdf}}\hfill
751 \subfigure[Position \texttt{angy:=-45}]{\includegraphics[width=4cm]{figures/rotation3.pdf}}\hfill
752 \subfigure[Position \texttt{angz:=57}]{\includegraphics[width=4cm]{figures/rotation4.pdf}}\hfill
753 \caption{Utilisation des rotations.}
754 \end{figure}
755 \par Pour les translations, le paramètre est \param{\verb!TR!} de type
756 \verb!color!.
757 \begin{figure}[h]
758 \centering
759 \includegraphics{figures/translation1.pdf}
760 \caption{Utilisation des translations.}
761 \end{figure}
762 \begin{Danger}
763 Si un fichier \MP\ comporte plusieurs figures, n'oubliez pas de
764 remettre les paramètres angulaires et de translation à leur valeur
765 d'origine. Sinon, vous pourriez bien vous tirer les cheveux pour
766 savoir où se situe votre erreur\footnotemark\ldots
767 \end{Danger}
768 \footnotetext{Croyez-moi par expérience ;-)}
769 \subsection{Les transformations propres à l'utilisateur}
770 On dispose d'un booléen \param{\verb!transformation!} (positionné à
771 \texttt{false} par défaut) pour indiquer la transformation nécessaire
772 des sommets de l'objet considéré.
773 \\La transformation proprement dite, quant à elle, doit être définie
774 par une macro \macro{Transform} (attention à la majuscule).
775 \paragraph{Facteurs d'échelle}
776 \[\left\{\begin{array}{l}
777 x'=1,25x\\
778 y'=0,75y\\
779 z=0,5z\\
780 \end{array}
781 \right.\]
782 \begin{lstlisting}[frame=tb]
783 vardef Transform(expr PT)=
784 save $;
785 color $;
786 Xpart($)=1.25*Xpart(PT);
787 Ypart($)=0.75*Ypart(PT);
788 Zpart($)=0.5*Zpart(PT);
789 $
790 enddef;
791
792 outcolor:=jaune; incolor:=0.5[vert,blanc];
793
794 figureespace(-10u,-10u,10u,10u);
795 Initialisation(500,50,20,15);
796 nb:=24; subh:=36;
797 outcolor:=0.5[rouge,blanc];
798 Objettore1("R=4","r=2");
799 AffichageObjet1;
800 TraceAxes;
801 finespace;
802
803 figureespace(-10u,-10u,10u,10u);
804 Initialisation(500,50,20,15);
805 nb:=24; subh:=36;
806 transformation:=true;%<-Pour appliquer la transformation choisie.
807 outcolor:=0.5[rouge,blanc];
808 Objettore1("R=4","r=2");
809 AffichageObjet1;
810 TraceAxes;
811 finespace;
812 end
813 \end{lstlisting}
814 \[\includegraphics{figures/Facteurechelle1.pdf}\kern1cm\includegraphics{figures/Facteurechelle2.pdf}\]
815 \paragraph{Transformation liée à la distance du point à l'origine}
816 \[\left\{\begin{array}{l}
817 x'=(0,5\sqrt{x^2+y^2+z^2}+1-0,5\sqrt3)x\\
818 y'=(0,5\sqrt{x^2+y^2+z^2}+1-0,5\sqrt3)y\\
819 z'=(0,5\sqrt{x^2+y^2+z^2}+1-0,5\sqrt3)z\\
820 \end{array}
821 \right.\]
822 \begin{lstlisting}[frame=tb]
823 vardef Transform(expr PT)=
824 save $; color $;
825 Xpart($)=Xpart(PT)*(0.5*Norm(PT)+1-0.5*sqrt(3));
826 Ypart($)=Ypart(PT)*(0.5*Norm(PT)+1-0.5*sqrt(3));
827 Zpart($)=Zpart(PT)*(0.5*Norm(PT)+1-0.5*sqrt(3));
828 $
829 enddef;
830
831 arcenciel:=true;
832
833 figureespace(-6u,-6u,6u,6u);
834 fill feuillet;
835 Initialisation(500,60,20,50);
836 subh:=9;
837 transformation:=true;
838 Objetcube1("a=3");
839 AffichageObjet1;
840 finespace;
841 \end{lstlisting}
842 \begin{figure}[!h]
843 \centering
844 \includegraphics{figures/Transforigine1.pdf}
845 \caption{Déformation d'un cube}
846 \label{fig:exsyr7}
847 \end{figure}
848 \paragraph{Torsion d'une poutre}
849 \[M'=\mbox{Rotation}(M,(Oz),10\mbox{\degres}*z_{M})\]
850 appliqué à un prisme de hauteur 10.
851 \begin{figure}[!ht]
852 \centering
853 \subfigure[Avant
854 torsion]{\includegraphics{figures/Torsion1.pdf}}\kern1cm\subfigure[Après torsion]{\includegraphics{figures/Torsion2.pdf}}
855 \caption{Torsion d'une poutre}
856 \label{fig:exsyr8}
857 \end{figure}
858 \begin{lstlisting}[frame=tb]
859 vardef Transform(expr PT)=%pour la torsion.
860 save $; color $;
861 angz:=subh*(Zpart(PT));
862 $=RotXYZ(PT);
863 $
864 enddef;
865
866 unit:=0.75;
867
868 figureespace(-2u,-2u,2u,10u);
869 Initialisation(500,50,20,35);
870 outcolor:=blanc;
871 subh:=8;
872 Objetgrille1("am=-2","an=2","bm=-2","bn=2");
873 nb:=2; subh:=20;
874 outcolor:=0.5[rouge,blanc];
875 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));
876 nbobj:=2;
877 DessineFusion;
878 finespace;
879
880 figureespace(-2u,-2u,2u,10u);
881 Initialisation(500,50,20,25);
882 outcolor:=blanc;
883 subh:=8;
884 Objetgrille1("am=-2","an=2","bm=-2","bn=2");
885 nb:=2; subh:=20;
886 transformation:=true;
887 outcolor:=0.5[rouge,blanc];
888 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));
889 nbobj:=2;
890 DessineFusion;
891 finespace;
892 \end{lstlisting}
893 \paragraph{Flexion d'une poutre encastrée}
894 On exerce une force au sommet de la poutre dans la direction
895 $(Ox)$. La rotation se fait alors suivant l'axe $(Oy)$ d'un angle
896 proportionnel à la force exercée et à la distance au sol.
897 \begin{figure}[!ht]
898 \centering
899 \subfigure[Avant
900 flexion]{\includegraphics{figures/Flexion1.pdf}}\kern1cm\subfigure[Après flexion]{\includegraphics{figures/Flexion2.pdf}}
901 \caption{Flexion d'une poutre encastrée}
902 \end{figure}
903 \begin{lstlisting}[frame=tb]
904 vardef Transform(expr PT)=%pour la flexion.
905 save $; color $;
906 angy:=2*(Zpart(PT));
907 $=RotXYZ(PT);
908 $
909 enddef;
910
911 unit:=0.75;
912
913 figureespace(-3u,-3u,3u,10u);
914 Initialisation(500,50,20,35);
915 outcolor:=blanc;
916 subh:=8;
917 Objetgrille1("am=-2","an=2","bm=-2","bn=2");
918 nb:=2; subh:=20;
919 transformation:=true;
920 outcolor:=0.5[rouge,blanc];
921 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));
922 nbobj:=2;
923 DessineFusion;
924 finespace;
925 \end{lstlisting}
926 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 :
927 \begin{itemize}
928 \item la première est appliquée à l'objet \texttt{sphere};
929 \item la deuxième est aplliquée à l'objet résultant de la première transformation.
930 \end{itemize}
931 \begin{figure}[!ht]
932 \centering
933 \subfigure[Avant
934 les transformations]{\includegraphics{figures/Banane1.pdf}}\kern1cm\subfigure[Après les transformations]{\includegraphics{figures/Banane2.pdf}}
935 \caption{Transformation d'une sphère en \og banane\fg}
936 \end{figure}
937 \begin{lstlisting}[frame=tb]
938 vardef Transform(expr PT)=
939 save $ ; color $ ;
940 Xpart($)=0.6*Xpart(PT);
941 Ypart($)=0.6*Ypart(PT);
942 Zpart($)=1.75*Zpart(PT);
943 $
944 enddef ;
945
946 figureespace(-7u,-7u,7u,7u);
947 fill feuillet;
948 Initialisation(1500,-60,10,50);
949 nb:=12;
950 subh:=12;
951 outcolor:=jaune;
952 Objetsphere1("R=2");
953
954 transformation:=true;
955 ObjetDeplacement2(1);
956
957 vardef Transform(expr PT)=
958 save $ ; color $ ;
959 angy:=10*(Zpart(PT));
960 $=RotXYZ(PT);
961 $
962 enddef ;
963
964 outcolor:=jaune;
965 ObjetDeplacement3(2);
966 AffichageObjet3;
967 \end{lstlisting}
968 \section{Ces objets, on peut les couper ?}
969 \begin{Danger}
970 Il n'y a que la section d'un objet par un plan qui est implanté. Et
971 même avec cela, les \texttt{arithmetic overflow} sont assez
972 courants. On peut avoir également des erreurs de précisions qui
973 entraînent certaines représentations non conformes.\\Malgré ces
974 limitations, \MP\ est capable de nous procurer de bien jolies
975 figures. On peut l'aider en modifiant les paramètres
976 \param{\texttt{nb}} et \param{\texttt{subh}} pour permettre de
977 lever ces {\em petits} soucis.
978 \end{Danger}
979 On va donc pouvoir couper les différents objets par un plan. Les
980 objets seront {\em nécessairement} creux. Pour cela, on va définir un
981 plan par la macro \macro{\verb!ObjetPlan!} qui accepte comme paramètres
982 trois points formant le plan. Définir un plan par une équation
983 cartésienne ou par un point et un vecteur normal n'est pas implanté.
984 On écrira donc\par
985 \begin{lstlisting}[frame=tb]
986 ObjetPlan1("An=(0,0,0)","Bn=(1,2,0.25)","Cn=(4,-2,1)");
987 \end{lstlisting}
988 pour définir le plan d'équation $x=4z$.
989 Une fois le plan défini, on utilise la macro
990 \macro{\verb!ObjetSepare2(5,7)!}2 est le numéro de l'objet à
991 couper; 5 et 7 étant les numéros des objets résultants de la coupe : 7
992 pour la partie \og haute\fg\, 5 pour la partie \og base\fg.
993 \par Dans l'exemple ci-dessous, on a coupé une sphère de centre $O$ et
994 de rayon 1 par le plan $x+y+z=1$.
995 \begin{minipage}{8cm}
996 \begin{figurefixe}
997 \centering
998 \includegraphics{figures/sectionsphere1.pdf}
999 \caption{Section d'une sphère.}
1000 \end{figurefixe}
1001 \end{minipage}
1002 \hfill
1003 \begin{minipage}{9cm}
1004 \begin{lstlisting}[frame=tb]
1005 figureespace(-100u,-100u,100u,100u);
1006 Initialisation(2500,60,30,75);
1007 creux:=true;
1008 outcolor:=jaune;
1009 incolor:=0.5[vert,white];
1010 nb:=30;
1011 subh:=19;
1012 Objetsphere15("R=1");
1013 Objetplan21("An=(1,0,0)","Bn=(0,1,0)",%
1014 "Cn=(0,0,1)");
1015 ObjetSepare15(3,4);
1016 AffichageObjet3;
1017 TraceAxesD(2,2,2);
1018 finespace;
1019 \end{lstlisting}
1020 \end{minipage}
1021 \par Voici la section d'un tore par le plan d'équation $x=4z$.
1022 \par
1023 \begin{minipage}{8cm}
1024 \begin{figurefixe}
1025 \centering
1026 \includegraphics[width=8cm]{figures/sectiontore1.pdf}
1027 \caption{Section d'un tore.}
1028 \end{figurefixe}
1029 \end{minipage}
1030 \hfill
1031 \begin{minipage}{9cm}
1032 \begin{lstlisting}[frame=tb]
1033 figureespace(-100u,-100u,100u,100u);
1034 Initialisation(2500,60,30,75);
1035 creux:=true;
1036 outcolor:=jaune;
1037 incolor:=0.5[vert,white];
1038 nb:=30;
1039 subh:=20;
1040 Objettore15("R=2","r=0.75");
1041 Objetplan21("An=(1,0,0.25)","Bn=(2,1,0.5)","Cn=(-1,0,-0.25)");
1042 ObjetSepare15(3,4);
1043 AffichageObjet3;
1044 finespace;
1045 \end{lstlisting}
1046 \end{minipage}
1047 \par Un autre exemple (voir figure \ref{fig:sectioncube}) où on coupe
1048 un cube d'arête 2 centré sur $O$ par le même plan d'équation $x=4z$
1049 que ci-dessus.
1050 \begin{figure}[!ht]
1051 \centering
1052 \subfigure[Section d'un
1053 cube]{\includegraphics{figures/sectioncube1.pdf}}\hfill\subfigure[en
1054 vue de
1055 dessus]{\includegraphics{figures/sectioncube3.pdf}}\hfill\subfigure[en vue de face]{\includegraphics{figures/sectioncube2.pdf}}
1056 \caption{Sections d'un cube}
1057 \label{fig:sectioncube}
1058 \end{figure}
1059 \begin{lstlisting}[frame=tb]
1060 figureespace(-100u,-100u,100u,100u);
1061 Initialisation(2500,60,30,75);
1062 creux:=true;
1063 outcolor:=jaune;
1064 incolor:=0.5[vert,white];
1065 nb:=30;
1066 subh:=5;
1067 Objetcube15("a=2");
1068 Objetplan21("An=(1,0,0.25)","Bn=(0,1,0)","Cn=(4,0,1)");
1069 ObjetSepare15(3,4);
1070 AffichageObjet4;
1071 TraceAxesD(2,2,2);
1072 finespace;
1073 \end{lstlisting}
1074 \newpage
1075 On peut également enchaîner les coupes\footnote{Mais là, je ne
1076 garantis pas les résultats.}.\par
1077 \begin{minipage}{8cm}
1078 \begin{figurefixe}
1079 \centering
1080 \includegraphics[width=8cm]{figures/doublesectioncone1.pdf}
1081 \caption{Double section d'un cône}
1082 \end{figurefixe}
1083 \end{minipage}
1084 \hfill
1085 \begin{minipage}{9cm}
1086 \begin{lstlisting}[frame=tb]
1087 figureespace(-100u,-100u,100u,100u);
1088 Initialisation(2500,-60,30,75);
1089 creux:=true;
1090 outcolor:=jaune;
1091 incolor:=0.5[vert,white];
1092 nb:=30; subh:=11;
1093 angx:=90; TR:=(0,5,0);
1094 Objetcone15("r=2","h=10");
1095 angx:=0; TR:=(0,0,0);
1096 Objetplan21("An=(1,-1,0)","Bn=(2,-2,1)","Cn=(-2,2,1)");
1097 ObjetSepare15(1,2);
1098 Objetplan22("An=(1,1,0)","Bn=(2,2,1)","Cn=(-2,-2,1)");
1099 ObjetSepare1(3,4);
1100 AffichageObjet3;
1101 finespace;
1102 \end{lstlisting}
1103 \end{minipage}
1104 \section{La fusion ? C'est parti !}
1105 Une fois que l'on dispose de tous ces objets, on peut les fusionner
1106 pour créer une scène. La méthode mise en place est la suivante :
1107 \begin{itemize}
1108 \item On définit les objets les uns après les autres en leur
1109 attribuant, si besoin est, les couleurs \param{\verb!outcolor!} et \param{\verb!incolor!};
1110 \item puis on fusionne tous ces objets. Simple, non ?
1111 \end{itemize}
1112 Prenons un exemple:\par
1113 \begin{minipage}{8cm}
1114 \begin{figurefixe}
1115 \centering
1116 \includegraphics[width=6cm]{figures/fusionsyr1.pdf}
1117 \caption{Un tore et un cône}
1118 \label{fig:fusionsyr1}
1119 \end{figurefixe}
1120 \end{minipage}
1121 \hfill
1122 \begin{minipage}{10cm}
1123 \begin{lstlisting}[frame=tb]
1124 %5''
1125 figureespace(-10u,-10u,10u,10u);
1126 Initialisation(500,10,20,50);
1127 outcolor:=rouge;
1128 nb:=18; subh:=24;
1129 Objetcone1("r=2.5","h=5");
1130 outcolor:=bleu;
1131 angy:=20; TR:=(0,0,2);
1132 Objettore2("R=2","r=0.5");
1133 nbobj:=2;
1134 DessineFusion;
1135 finespace;
1136 \end{lstlisting}
1137 \end{minipage}
1138 Convaincu de la simplicité ? Non ? Alors en voici un autre :\par
1139 \begin{minipage}{8cm}
1140 \begin{figurefixe}
1141 \centering
1142 \includegraphics[width=7cm]{figures/fusionphan1.pdf}
1143 \caption{Une hélice entourant un cylindre}
1144 \end{figurefixe}
1145 \end{minipage}
1146 \hfill
1147 \begin{minipage}{10cm}
1148 \begin{lstlisting}[frame=tb]
1149 %30''
1150 figureespace(-10u,-10u,10u,10u);
1151 Initialisation(500,60,40,50);
1152 angy:=90; TR:=(-1,0,0);
1153 nb:=18; subh:=24;
1154 outcolor:=blanc;
1155 Objetcylindre1("r=0.5","h=7");
1156 TR:=(0,0,0);
1157 nb:=12;
1158 ObjetTube2("(sin(t),cos(t),t/5)","(cos(t),-sin(t),1/5)",0.25,-5,165,0.2);
1159 nbobj:=2;
1160 DessineFusion;
1161 finespace;
1162 \end{lstlisting}
1163 \end{minipage}
1164 La fusion se fait donc par l'usage de la macro
1165 \macro{\verb!DessineFusion!} qui fusionne tous les objets créés
1166 précédemment. Elle dépend de \param{nbobj} qui lui indique le nombre
1167 d'objets à fusionner. La numérotation des objets prend ici tout son
1168 sens. C'est ce qui permet à la macro de retrouver ses petits\ldots
1169 \par\begin{minipage}{8cm}
1170 \includegraphics[width=8cm]{figures/fusionhorop1.pdf}
1171 \end{minipage}
1172 \hfill
1173 \begin{minipage}{10cm}
1174 \begin{lstlisting}[frame=tb]
1175 figureespace(-20u,-20u,20u,20u);
1176 Initialisation(500,60,20,30);
1177 creux:=true;
1178 nb:=16; subh:=18;
1179 outcolor:=blanc;
1180 incolor:=0.5[vert,white];
1181 angx:=90; TR:=(2,9,0);
1182 Objetcylindre1("r=1","h=18");
1183 outcolor:=0.5[jaune,blanc];
1184 incolor:=0.5[violet,blanc];
1185 angx:=0; TR:=(0,0,0);
1186 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);
1187 nbobj:=2;
1188 DessineFusion;
1189 finespace;
1190 \end{lstlisting}
1191 \end{minipage}
1192 \par Un autre exemple avec des solides creusés manuellement.\par
1193 \begin{minipage}{8cm}
1194 \includegraphics[width=8cm]{figures/fusionsolidescreux1.pdf}
1195 \end{minipage}
1196 \hfill
1197 \begin{minipage}{9cm}
1198 \begin{lstlisting}[frame=tb]
1199 nb:=12; subh:=36;
1200
1201 figureespace(-10u,-10u,10u,10u);
1202 Initialisation(1500,20,20,50);
1203 creux:=true;
1204 outcolor:=0.5[jaune,white];
1205 incolor:=0.5[vert,white];
1206 Objetanneau1("R=4","r=3","h=1.5");
1207 ObjetEnleve1(135,136,137,138,%
1208 139,140,150,151,152,153,154,155);
1209 angx:=90;
1210 TR:=(0,0,2);
1211 outcolor:=0.5[bleu,white];
1212 incolor:=0.5[rouge,white];
1213 Objetsphere2("R=2");
1214 ObjetEnleve2(232,233,234,235,%
1215 236,237,238,239);
1216 nbobj:=2;
1217 DessineFusion;
1218 finespace;
1219 \end{lstlisting}
1220 \end{minipage}
1221 \subsection{Deux anneaux}
1222 \begin{minipage}{8cm}
1223 \includegraphics[width=8cm]{figures/exfusion1.pdf}
1224 \end{minipage}
1225 \hfill
1226 \begin{minipage}{10cm}
1227 \begin{lstlisting}[frame=tb]
1228 outcolor:=0.5[rouge,blanc];
1229
1230 figureespace(-10u,-10u,10u,10u);
1231 Initialisation(500,40,20,100);
1232 nb:=10;
1233 ObjetTube1("(cos(t),sin(t),0.25)","(-sin(t),cos(t),0)",0.15,0,50,0.12566);
1234 angx:=90; TR:=(-1,-0.1,0.5);
1235 ObjetTube2("(cos(t),sin(t),0.25)","(-sin(t),cos(t),0)",0.15,0,50,0.12566);
1236 nbobj=2;
1237 DessineFusion;
1238 finespace;
1239 \end{lstlisting}
1240 \end{minipage}
1241 \subsection{Trois calottes}
1242 \begin{minipage}{8cm}
1243 \includegraphics[width=8cm]{figures/exfusion11.pdf}
1244 \end{minipage}
1245 \hfill
1246 \begin{minipage}{10cm}
1247 \begin{lstlisting}[frame=tb]
1248 outcolor:=0.5[ciel,blanc]; incolor:=0.5[jaune,blanc];
1249
1250 nb:=24;
1251
1252 figureespace(-10u,-10u,10u,10u);
1253 Initialisation(500,30,10,50);
1254 angy:=80;
1255 subh:=24;
1256 creux:=true;
1257 Objetcalotte1("R=2","phib=-pi/2","phih=pi/6");
1258 outcolor:=0.5[rouge,blanc];
1259 incolor:=0.5[vert,blanc];
1260 TR:=(1,0,0);
1261 Objetcalotte2("R=1.5","phib=-pi/2","phih=pi/6");
1262 outcolor:=0.5[orange,blanc];
1263 incolor:=0.5[gris,blanc];
1264 TR:=(2,0,0);
1265 Objetcalotte3("R=1","phib=-pi/2","phih=pi/6");
1266 nbobj:=3;
1267 DessineFusion;
1268 finespace;
1269 \end{lstlisting}
1270 \end{minipage}

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la
Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.