Réinitialisation du projet
[mp-solid.git] / doc / Dessinons.tex
1 \chapter{Dessinons !}
2 \begin{flushleft}
3 {\em Je compterai toujours, pour ma part, au nombre des heures les
4 plus douces, les plus heureuses de ma vie, celles où j'ai pu
5 saisir dans l'espace et étudier sans trève quelques-uns de ces
6 êtres géométriques qui flottent en quelque sorte autour de nous.}
7 \par\hfill{\sc Gaston Darboux}
8 \end{flushleft}
9 \section{La lecture externe}
10 Avant de se lancer dans les calculs, profitons du fait que de nombreux
11 logiciels de contruction 3D exportent leurs données dans divers
12 formats de fichiers. Pourquoi donc ne pas s'en servir, couplé à \MP,
13 pour représenter de tels objets ?
14 \subsection{Les fichiers \texttt{OFF}}
15 Si vous disposez d'un
16 fichier \texttt{toto.off}, on l'utilisera comme ceci :
17 \begin{center}
18 \macro{\verb!LectureOFF("toto.off")!}
19 \end{center}
20 \begin{Danger}
21 \begin{itemize}
22 \item Avant l'utilisation des fichiers \verb!OFF!, il faudra
23 s'assurer qu'ils aient une syntaxe du type
24 \begin{lstlisting}[frame=tb]
25 nbsommets nbfaces
26
27 x1 y1 z1
28 x2 y2 z2
29 ...
30 nbsommetsface1 1 2 3
31 nbsommetsface2 2 3 4
32 ...
33 \end{lstlisting}
34 \item Suivant les fichiers \texttt{OFF}, il y aura deux paramètres
35 à modifier : \param{\texttt{echelle}} qui applique un coefficient
36 divisant les données numériques du fichier par la valeur
37 choisie; \param{\texttt{debut}} qui indiquera quel est le chiffre
38 correspondant au premier sommet (bien souvent, c'est 0 mais pour
39 quelques fichiers, cela peut-être 1).
40 \item Le paramètre \param{\texttt{invnormale}} devra {\em parfois} être
41 adapté. Par défaut, il est à 1. On devra le mettre parfois comme
42 étant égal à $-1$.
43 \end{itemize}
44 \end{Danger}
45 \begin{figure}[h]
46 \centering
47 \includegraphics[scale=0.9]{figures/OFF1.pdf}
48 \caption{Un tricératops.}
49 \end{figure}
50 \begin{minipage}{\linewidth}
51 \begin{lstlisting}[frame=tb]
52 %fichier off:http://www.irit.fr/~Loic.Barthe/Enseignements/TPs_OpenGL/L3_IUP_SI/TP7/Maillages/triceratops.off
53 echelle:=2;
54 debut:=0;
55
56 invnormale:=-1;
57
58 figureespace(-10u,-10u,10u,10u);
59 Initialisation(500,-25,10,50);
60 outcolor:=0.8*white;
61 incolor:=gris;
62 LectureOFF("triceratops.off");
63 finespace;
64 \end{lstlisting}
65 \end{minipage}
66 \par
67 L'exemple\footnote{Assez long en compilation, 28 secondes environ.}
68 ci-dessous montre un {\em noeud creusé}. Pour cela, on a un paramètre
69 booléen \verb!Creux! (positionné à \verb!true! par défaut) qui
70 permet d'indiquer si le solide envisagé est creusé ou pas. Ce
71 paramètre n'est, pour le moment, disponible que pour la lecture des
72 fichiers externes.
73 \par\noindent
74 \begin{minipage}{6cm}
75 \includegraphics[scale=0.5]{figures/OFF11.pdf}
76 \end{minipage}
77 \hfill
78 \begin{minipage}{10cm}
79 \begin{lstlisting}[frame=tb]
80 %www-c.inria.fr/gamma/download/download.php
81 echelle:=2; debut:=1;
82 Creux:=false;
83 outcolor:=0.5[jaune,white];
84 incolor:=0.5[bleu,white];
85
86 figureespace(-10u,-10u,10u,10u);
87 Initialisation(500,-25,10,50);
88 LectureOFF("10-61.off");
89 finespace;
90 \end{lstlisting}
91 \end{minipage}
92 \par
93 Pour ne pas abuser, un dernier exemple.\\
94 \begin{minipage}{6cm}
95 \includegraphics[scale=0.7]{figures/OFF21.pdf}
96 \end{minipage}
97 \hfill
98 \begin{minipage}{10cm}
99 \begin{lstlisting}[frame=tb]
100 echelle:=5;
101 debut:=1;
102 arcenciel:=true;
103 invnormale:=-1;
104 figureespace(-10u,-10u,10u,10u);
105 Initialisation(500,30,20,50);
106 LectureOFF("5_1.pc.off");
107 finespace;
108 \end{lstlisting}
109 \end{minipage}
110 \subsection{Les fichiers \texttt{OBJ}}
111 Si vous disposez d'un
112 fichier \texttt{toto.obj}, on l'utilisera comme ceci :
113 \begin{center}
114 \macro{\verb!LectureOBJ("toto.obj")!}
115 \end{center}
116 \begin{Danger}
117 \begin{itemize}
118 \item Avant l'utilisation des fichiers \verb!OBJ!, il faudra
119 s'assurer qu'ils aient une syntaxe du type
120 \begin{lstlisting}[frame=tb]
121 v x1 y1 z1
122 v x2 y2 z2
123 ...
124 v xn yn zn
125 f nbsommetsface1 1 2 3 ...
126 f nbsommetsface2 2 3 4 ...
127 ...
128 \end{lstlisting}
129 \par En effet, certains fichiers \texttt{OBJ} contiennent
130 également les descriptions des vecteurs normaux aux faces. Ils
131 ne sont pas nécessaires pour nous car \MP\ fait les calculs
132 nécessaires\footnote{Il pourrait cependant être utile d'utiliser
133 directement de tels fichiers pour gagner du temps de compilation.}.
134 \item Suivant les fichiers \texttt{OBJ}, il y aura à modifier le paramètre \param{\texttt{echelle}}.
135 \item Le paramètre \param{\texttt{invnormale}} devra {\em parfois} être
136 adapté. Par défaut, il est à 1. On devra le mettre parfois comme
137 étant égal à $-1$.
138 \end{itemize}
139 \end{Danger}
140 \begin{minipage}{8cm}
141 \includegraphics[width=8cm]{figures/OBJ1.pdf}
142 \end{minipage}
143 \hfill
144 \begin{minipage}{10cm}
145 \begin{lstlisting}[frame=tb]
146 %http://www-c.inria.fr/gamma/download/
147 echelle:=50;
148
149 figureespace(-10u,-10u,10u,20u);
150 Initialisation(2500,80,-70,50);
151 outcolor:=0.7[rose,white];
152 incolor:=jaune;
153 LectureOBJ("../../data/Midpoly_04.obj");
154 finespace;
155 \end{lstlisting}
156 \end{minipage}
157 \par
158 \begin{minipage}{8cm}
159 \includegraphics[width=8cm]{figures/OBJ11.pdf}
160 \end{minipage}
161 \hfill
162 \begin{minipage}{10cm}
163 \begin{lstlisting}[frame=tb]
164 %http://www-c.inria.fr/gamma/download/
165 %avec modification
166 echelle:=0.25;
167
168 figureespace(-10u,-10u,10u,20u);
169 Initialisation(2500,-80,80,50);
170 outcolor:=0.7[rose,white];
171 incolor:=jaune;
172 LectureOBJ("../../data/Y3483.obj");
173 finespace;
174 \end{lstlisting}
175 \end{minipage}
176 \section{Les courbes}
177 %\subsection{\ldots du type $(x,y,z)=(f(t),g(t),h(t))$}
178 Pour tracer une fonction du type $M(x,y,z)=(f(t),g(t),h(t))$, on
179 utilisera la macro
180 \texttt{Fonction}.
181 \begin{center}
182 \macro{\verb!Fonction(expr fn,tmin,tmax,pas)!}
183 \end{center}
184\param{\verb!fn!} est un type \verb!string! donnant les fonctions $f$, $g$
185 et $h$ (ne pas oublier de la mettre sous forme d'un triplet);
186 \param{\verb!tmin!} et \param{\verb!tmax!} sont les bornes de
187 l'intervalle de tracé et \param{\verb!pas!} le pas d'incrémentation
188 pour positionner les points et les relier ensuite.
189 \par\begin{minipage}{6cm}
190 \includegraphics{figures/courbe11.pdf}
191 \end{minipage}
192 \hfill
193 \begin{minipage}{10cm}
194 \begin{lstlisting}[frame=tb]
195 figureespace(-10u,-10u,10u,10u);
196 Initialisation(5,30,50,20);
197 draw Fonction("(sin(t),cos(t),t/3)",-2,25,0.01);
198 finespace;
199 \end{lstlisting}
200 \end{minipage}
201 \par
202 \begin{minipage}{6cm}
203 \includegraphics[scale=0.7]{figures/courbe21.pdf}
204 \end{minipage}
205 \hfill
206 \begin{minipage}{10cm}
207 \begin{lstlisting}[frame=tb]
208 figureespace(-10u,-10u,10u,10u);
209 Initialisation(5,30,20,20);
210 draw Fonction("(cos(t)*(1+abs(t)/5),1.5*sin(t),0.2*t)",-15,15,0.1);
211 finespace;
212 \end{lstlisting}
213 \end{minipage}
214 \subsection{Les tubes : 1\ier\ essai}
215 On a une amélioration graphique : la possibilité de tracer les courbes
216 sous forme de tube avec la macro \verb!Tube! :
217 \begin{center}
218 \macro{\texttt{Tube(expr Fn,dp,ds,rayon,tmin,nbp,pas)}}
219 \end{center}
220\param{\verb!Fn!}, \param{\verb!dp!} et \param{\verb!ds!} sont des
221 types \texttt{string} représentant respectivement la fonction de
222 référence sur laquelle le tube est construit; la dérivée première et
223 la dérivée seconde. Pourquoi ? Pour calculer les vecteurs $(\vecteur
224 T, \vecteur N, \vecteur B)$ constituant le repère de Frenet local
225 attaché à la courbe. Il est d'ailleurs vivement recommandé de les
226 calculer à la main ou à l'aide d'un logiciel de calcul formel.
227 \\Une fois ceci fait, \param{\texttt{tmin}} la valeur du paramètre de départ,
228 \param{\texttt{nbp}} le nombre de pas voulus, \param{\texttt{pas}} le
229 pas pour passer d'un point à un autre.
230 \par
231 Voici plusieurs exemples pour que ce soit plus clair:
232 \par
233 \begin{minipage}{7.5cm}
234 \includegraphics[width=7.5cm]{figures/npresentation1.pdf}
235 \end{minipage}
236 \hfill
237 \begin{minipage}{10cm}
238 \begin{lstlisting}[frame=tb]
239 figureespace(-10u,-20u,10u,10u);
240 Initialisation(1000,15,70,50);
241 outcolor:=0.5[green,white];
242 draw Tube("(2*cosd(t)+cosd(3*t),2*sind(t)-sind(3*t),2*sqrt(2)*sind(2*t))","(-2*sind(t)-3*sind(3*t),2*cosd(t)-3*cosd(3*t),4*sqrt(2)*cosd(2*t))","(-2*cosd(t)-9*cosd(3*t),-2*sind(t)+9*sind(3*t),-8*sqrt(2)*sind(2*t))",0.1,90,180,1.5);
243 finespace;
244 end
245 \end{lstlisting}
246 \end{minipage}
247 \par
248 \begin{minipage}{7.5cm}
249 \includegraphics[width=7.5cm]{figures/courbe12.pdf}
250 \end{minipage}
251 \hfill
252 \begin{minipage}{10cm}
253 \begin{lstlisting}[frame=tb]
254 figureespace(-10u,-10u,10u,10u);
255 Initialisation(5,30,50,20);
256 outcolor:=0.5[red,white];
257 draw Tube("(sin(t),cos(t),t/3)","(cos(t),-sin(t),1/3)","(-sin(t),-cos(t),0)",0.1,-2,270,0.1);
258 finespace;
259 \end{lstlisting}
260 \end{minipage}
261 \par
262 \begin{minipage}{7.5cm}
263 \includegraphics[width=7.5cm]{figures/courbe22.pdf}
264 \end{minipage}
265 \hfill
266 \begin{minipage}{10cm}
267 \begin{lstlisting}[frame=tb]
268 figureespace(-10u,-20u,10u,10u);
269 Initialisation(5,30,20,20);
270 outcolor:=0.5[blue,white];
271 draw Tube("(cos(t)*(1+abs(t)/5),1.5*sin(t),0.2*t)","if t>=0:(-sin(t)*(1+t/5)+cos(t)/5,1.5*cos(t),0.2) else: (-sin(t)*(1-t/5)-cos(t)/5,1.5*cos(t),0.2) fi", "if t>=0:(-cos(t)*(1+t/5)-2*sin(t)/5,-1.5*sin(t),0) else: (-cos(t)*(1-t/5)+2*sin(t)/5,-1.5*sin(t),0) fi",0.075,-15,300,0.1);
272 finespace;
273 \end{lstlisting}
274 \end{minipage}
275 \par
276 \begin{minipage}{7.5cm}
277 \includegraphics[width=7.5cm]{figures/npresentation2.pdf}
278 \end{minipage}
279 \hfill
280 \begin{minipage}{10cm}
281 \begin{lstlisting}[frame=tb]
282 figureespace(-10u,-20u,10u,10u);
283 Initialisation(1000,15,20,50);
284 outcolor:=0.5[jaune,white];
285 draw Tube("(cos(t),1.5*sin(t),0.2*t)","(-sin(t),1.5*cos(t),0.2)","(-cos(t),-1.5*sin(t),0)",0.1,0,180,0.1);
286 finespace;
287 \end{lstlisting}
288 \end{minipage}
289 \subsection{Les tubes : 2\ieme\ essai}
290 Cependant, pour obtenir l'image ci-dessous tirée de la documentation de
291 \texttt{pst-solides3d}\footnote{Mais celle présente dans cette
292 documentation a été compilée par \MP.}, cela ne marche pas !
293 \begin{figure}[h]
294 \centering
295 \includegraphics[scale=0.5]{figures/hypotube1.pdf}
296 \caption{Hypocycloïde en tube}
297 \label{fig-hypotube}
298 \end{figure}
299 J'ai donc crée une deuxième macro permettant de construire de telles
300 figures. En fait, le problème venait de l'inversion des normales au
301 passage des points d'inflexion. De plus, grâce à un document trouvé
302 sur la toile\footnote{Malheureusement, je ne dispose plus de
303 l'adresse. Par contre, l'auteur est Loïc {\sc Barthe} de l'équipe
304 Vortex de l'IRIT-UPS Toulouse.}, il n'est plus nécessaire d'utiliser
305 la dérivée seconde. La macro utilisable est
306 \begin{center}
307 \macro{\verb!Tuben(expr Fn,dp,rayon,tmin,nbp,pas,couleur)!}
308 \end{center}
309 avec les mêmes conventions que lors du premier essai. Pour obtenir la
310 figure \ref{fig-hypotube}, on utilisera alors le code
311 \begin{lstlisting}[frame=tb]
312 figureespace(-10u,-10u,10u,10u);
313
314 nb:=16; unit:=0.8;
315
316 Initialisation(1000,20,45,37.5);
317 for k=-5 upto 5:
318 draw Projette((k,-5,0))--Projette((k,5,0));
319 draw Projette((-5,k,0))--Projette((5,k,0));
320 endfor;
321 eclairage:=false;
322 outcolor:=blanc;
323 draw Tuben("(4*cos(t)+cos(4*t)/2,4*sin(t)-sin(4*t)/2,1)","(-4*sin(t)-2*sin(4*t),4*cos(t)-2*cos(4*t),0)",1,0,102,0.06283);
324
325 finespace;
326 \end{lstlisting}
327 \`A noter que le paramètre \param{\verb!unit!} permet de faire un
328 agrandissement (ou une réduction) de la figure. Par défaut,
329 \texttt{unit=1}. De plus, il existe le paramètre \param{\verb!nb!} qui permet
330 de moduler le nombre de points sur le cercle permettant de tracer le tube.
331 \par Et pour finir, étant fan de Gaston Lagaffe, je me permets de reprendre
332 le ressort-siège de la documentation de \texttt{pst-solides3d}.
333 \par\begin{minipage}{8cm}
334 \begin{figurefixe}
335 \centering
336 \includegraphics[width=6cm]{figures/ressortgaston1.pdf}
337 \caption{Siège-ressort de Gaston Lagaffe}
338 \label{fig:exsyr1}
339 \end{figurefixe}
340 \end{minipage}
341 \hfill
342 \begin{minipage}{9cm}
343 \begin{lstlisting}[frame=tb]
344 figureespace(-10u,-10u,10u,10u);
345
346 nb:=6;
347 Initialisation(1000,20,20,25);
348 arcenciel:=true;
349 draw Tuben("((t**2+3)*sin(15*t),(t**2+3)*cos(15*t),2*t)","(2*t*sin(15*t)+15*((t**2)+3)*cos(15*t),2*t*cos(15*t)-15*((t**2)+3)*sin(15*t),2)",0.2,-2,360,1/90);
350
351 finespace;
352
353 \end{lstlisting}
354 \end{minipage}
355 \section{Les surfaces}
356 \subsection{Les surfaces en $z$}
357 De la forme $z=f(x,y)$, on utilisera alors
358 \begin{center}
359 \macro{\verb!Surfz(fn,xmin,xmax,ymin,ymax,nbl,nbp)!}
360 \end{center}
361 avec \param{\verb!fn!} la fonction écrite sous un type \verb!string!,
362 \param{\verb!xmin!}, \param{\verb!xmax!}, \param{\verb!ymin!} et \param{\verb!ymax!} les bornes des
363 intervalles de tracés, \param{\verb!nbl!} le nombre de lignes suivant les
364 $y$\footnote{Il en est ainsi car j'ai suivi la méthode décrite
365 dans le livre de Raymond Dony. Il est à noter également que pour des
366 impératifs de temps de compilation et de poids des images, les deux
367 paramètres \param{\verb!nbp!} et \param{\verb!nbl!} sont des multiples de 3.} et
368 \param{\verb!nbp!} le nombre de points utilisés sur chaque ligne pour tracer
369 la surface.
370 \par Les trois exemples ci-dessous ont donné des temps de compilation
371 de l'ordre de 40 secondes.
372 \par
373 \begin{lstlisting}[frame=tb]
374 verbatimtex
375 %&latex
376 \documentclass[12pt]{article}
377 \usepackage{fourier}
378 \begin{document}
379 etex
380
381 invnormalelum:=-1;
382
383 figureespace(-10u,-10u,10u,10u);
384 Initialisation(300,15,35.264,10);
385 incolor:=0.5[green,white];
386 outcolor:=0.25[orange,white];
387 draw SurfZ("4*cos(X++Y)*mexp(-(X++Y)*50)",-15,15,-10,10,60,150);
388 label(btex $f(z)=4*\cos\left(\sqrt{x^2+y^2}\right)*\textrm{e}^{-50*\sqrt{x^2+y^2}}\mbox{ avec }\left\{\begin{array}{l}
389 x\in[-15,15]\\
390 y\in[-10,10]\\
391 \end{array}
392 \right.$ etex,u*(0,-5));
393 finespace;
394 \end{lstlisting}
395 \[\includegraphics{figures/Surfz11.pdf}\]
396 \begin{lstlisting}[frame=tb]
397 verbatimtex
398 %&latex
399 \documentclass[12pt]{article}
400 \usepackage{fourier}
401 \usepackage{amsmath}
402 \begin{document}
403 etex
404
405 invnormalelum:=-1;
406
407 figureespace(-10u,-10u,10u,10u);
408 Initialisation(300,70,30,10);
409 incolor:=0.5[jaune,white];
410 outcolor:=0.8[violet,white];
411 arcenciel:=true;
412 draw SurfZ("if (X=0) and (Y=0):10 else:10*sin((X++Y))/(X++Y) fi",-8,8,-8,8,60,150);
413 label(btex $f(z)=10\times\dfrac{\sin\left(\sqrt{x^2+y^2}\right)}{\sqrt{x^2+y^2}}\mbox{ avec }\left\{\begin{array}{l}
414 x\in[-8,8]\\
415 y\in[-8,8]\\
416 \end{array}
417 \right.$ etex,u*(0,-4));
418 finespace;
419 \end{lstlisting}
420 \par
421 \[\includegraphics{figures/Surfz21.pdf}\]
422 \L'exemple précédent montre l'utilisation du paramètre
423 \param{\texttt{invnormalelum}} permettant d'opposer la normale permettant la
424 détermination de la quantité lumineuse. De plus, la gestion de la
425 lumière est un peu différente lors du tracé des surfaces en $z$. En
426 effet, on a parfois besoin de voir ce qui se passe dans la partie cachée\ldots
427 \begin{lstlisting}[frame=tb]
428 verbatimtex
429 % &latex
430 \documentclass[12pt]{article}
431 \usepackage{fourier}
432 \usepackage{amsmath}
433 \begin{document}
434 etex
435
436 invnormalelum:=-1;
437
438 figureespace(-10u,-10u,10u,10u);
439 Initialisation(300,45,35,10);
440 incolor:=0.5[jaune,white];
441 outcolor:=0.8[violet,white];
442 draw SurfZ("if X=0:if Y=0:10 else:10*sin(Y)/Y fi else:if Y=0:10*sin(X)/X else: 10*sin(X)/X*sin(Y)/Y fi fi",-10,10,-12,12,60,150);
443 label(btex $f(z)=10\times\dfrac{\sin x}x\dfrac{\sin y}y\mbox{ avec }\left\{\begin{array}{l}
444 x\in[-10,10]\\
445 y\in[-12,12]\\
446 \end{array}
447 \right.$ etex,u*(0,-4));
448 finespace;
449 end
450 \end{lstlisting}
451 \[\includegraphics{figures/Surfz31.pdf}\]
452 \subsection{\ldots paramétrées $M(u,v)=(f(u,v),g(u,v),h(u,v))$}
453 \begin{Danger}
454 Attention, il faut une orientation correcte des faces créees. Il sera
455 donc nécessaire d'utiliser, {\em parfois}, \param{\texttt{invnormale}}.
456 \end{Danger}
457 Utilisons la macro
458 \begin{center}
459 \macro{\verb!Sparam(expr fn,umin,umax,upas,vmin,vmax,vpas)!}
460 \end{center}
461\param{\texttt{fn}} est un type \texttt{string} représentant la fonction
462 $M(u,v)$ donnée sous forme d'un triplet; les autres paramètres parlant
463 d'eux mêmes.
464 \\Voici plusieurs exemples :
465 \par%\vfill\par
466 \begin{minipage}{6cm}
467 \includegraphics[width=5cm]{figures/Sparam11.pdf}
468 \end{minipage}
469 \hfill
470 \begin{minipage}{10cm}
471 \begin{lstlisting}[frame=tb]
472 figureespace(-10u,-10u,10u,10u);
473 Initialisation(500,-30,15,75);
474 outcolor:=0.5[red,white];
475 incolor:=0.5[jaune,white];
476 draw Sparam("((1+0.5*cos(u))*cos(v),(1+0.5*cos(u))*sin(v),0.5*sin(u))",-pi,pi/12,pi/15,2*pi/3,2*pi,pi/20);
477 finespace;
478 \end{lstlisting}
479 \end{minipage}
480 \par\vfill\par
481 \begin{minipage}{6cm}
482 \includegraphics[width=5cm]{figures/Sparam31.pdf}
483 \end{minipage}
484 \hfill
485 \begin{minipage}{10cm}
486 \begin{lstlisting}[frame=tb]
487 figureespace(-10u,-10u,10u,10u);
488 Initialisation(50,-110,10,100);
489 outcolor:=0.5[orange,white];
490 incolor:=0.25[gris,white];
491 draw Sparam("(u,v,u*u-v*v)",-1,1,0.05,-1,1,0.05);
492 finespace;
493 \end{lstlisting}
494 \end{minipage}
495 \par\vfill\par
496 \begin{minipage}{6cm}
497 \includegraphics[width=5cm]{figures/Sparam51.pdf}
498 \end{minipage}
499 \hfill
500 \begin{minipage}{10cm}
501 \begin{lstlisting}[frame=tb]
502 figureespace(-10u,-10u,10u,10u);
503 Initialisation(500,10,20,100);
504 incolor:=0.75[jaune,white];
505 outcolor:=0.5[green,white];
506 draw Sparam("(u*cos(v)*sin(pi/6),u*sin(v)*sin(pi/6),u*cos(pi/6))",-2,-0.1,0.2,-2.6,2.6,0.2);
507 finespace;
508 \end{lstlisting}
509 \end{minipage}
510 \par\vfill\par
511 \begin{minipage}{6cm}
512 \includegraphics[width=5cm]{figures/Sparam81.pdf}
513 \end{minipage}
514 \hfill
515 \begin{minipage}{10cm}
516 \begin{lstlisting}[frame=tb]
517 figureespace(-10u,-10u,10u,10u);
518 Initialisation(50,0,-20,100);
519 incolor:=0.75[orange,white];
520 outcolor:=0.5[blue,white];
521 draw Sparam("(cos(v)*sqrt(1+u*u),sin(v)*sqrt(1+u*u),0.6*u)",-1,1.5,0.1,-5*pi/6,5*pi/6,pi/36);
522 finespace;
523 \end{lstlisting}
524 \end{minipage}
525 \par\vfill\par
526 \begin{minipage}{9cm}
527 \begin{figurefixe}
528 \centering
529 \includegraphics[width=7.5cm]{figures/Sparam91.pdf}
530 \caption{Une nappe cylindrique}
531 \label{fig:exsyr2}
532 \end{figurefixe}
533 \end{minipage}
534 \hfill
535 \begin{minipage}{9cm}
536 \begin{lstlisting}[frame=tb]
537 figureespace(-10u,-10u,10u,10u);
538 Initialisation(100,5,10,25);
539 incolor:=0.5[jaune,white];
540 outcolor:=0.75[violet,blanc];
541 drawarrow Projette((0,0,0))--Projette((0,3,3)) withpen pencircle scaled2bp;
542 for l=-1 upto 5:
543 draw Projette((l,-1,0))--Projette((l,5,0)) withcolor gris;
544 draw Projette((-1,l,0))--Projette((5,l,0)) withcolor gris;
545 endfor;
546 TraceAxes;
547 drawarrow Projette((0,0,0))--Projette((0,3,3)) withpen pencircle scaled2bp;
548 draw Sparam("(6*(cos(u)**3)*sin(u),4*cos(u)*cos(u)+v,v)",0,2*pi,pi/30,0,2*sqrt(2),0.1);
549 finespace;
550 \end{lstlisting}
551 \end{minipage}
552 \subsection{Les solides de révolution}
553 C'est un cas particulier des surfaces paramétrées. La syntaxe est donc
554 très voisine :
555 \begin{center}
556 \macro{\verb!Revolution(fn,umin,umax,upas,vmin,vmax,vpas)!}
557 \end{center}
558 avec les mêmes notations que précédemment {\em sauf} que \param{\verb!fn!}
559 doit représenter un chemin \MP. Voici quelques exemples.
560 \par\begin{minipage}{6cm}
561 \includegraphics[width=6cm]{figures/revolution11.pdf}
562 \end{minipage}
563 \hfill
564 \begin{minipage}{10cm}
565 \begin{lstlisting}[frame=tb]
566 r=2; R=8; h=3;
567
568 path pp;
569 pp=(R,-h/2)--((R+r)/2,h/2)--(r,-h/2)--cycle;
570
571 incolor:=0.5[jaune,white];
572 outcolor:=0.8[bleu,white];
573
574 figureespace(-10u,-10u,10u,10u);
575 Initialisation(500,30,40,25);
576 draw Revolution("pp",0,length pp,0.1,0,2*pi,pi/12);
577 finespace;
578 \end{lstlisting}
579 \end{minipage}
580 \par\begin{minipage}{6cm}
581 \includegraphics[width=6cm]{figures/revolution21.pdf}
582 \end{minipage}
583 \hfill
584 \begin{minipage}{10cm}
585 \begin{lstlisting}[frame=tb]
586 r=3; R=8; h=6;
587
588 path pp;
589 pp=(r,h/2)--(r,-h/2)--(R,-h/2)--(R,-h/2+1)--(R-1.5,-h/2+1)--(R-1.5,h/2-1)--(R,h/2-1)--(R,h/2)--cycle;
590
591 incolor:=0.5[jaune,white];
592 outcolor:=0.8[bleu,white];
593
594 figureespace(-10u,-10u,10u,10u);
595 Initialisation(500,30,20,25);
596 draw Revolution("pp",0,length pp,0.25,0,2*pi,pi/12);
597 finespace;
598 \end{lstlisting}
599 \end{minipage}
600 \par Et pour tirer profit des courbes de Bezier
601 \par\begin{minipage}{6cm}
602 \includegraphics[width=6cm]{figures/revolution31.pdf}
603 \end{minipage}
604 \hfill
605 \begin{minipage}{10cm}
606 \begin{lstlisting}[frame=tb]
607 path pp;
608 pp=(3,-7)..(1,-6)..(5,0.5)..(5,3)..(1,3)..(1,4)..(2,5);
609
610 incolor:=0.5[jaune,white];
611 outcolor:=0.8[bleu,white];
612
613 figureespace(-10u,-10u,10u,10u);
614 Initialisation(500,30,20,25);
615 draw Revolution("pp",0,length pp,0.2,0,2*pi,pi/12);
616 finespace;
617 \end{lstlisting}
618 \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.