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
}
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
}}
16 fichier
\texttt{toto.off
}, on l'utilisera comme ceci :
18 \macro{\verb!LectureOFF("toto.off")!
}
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
]
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
47 \includegraphics[scale=
0.9]{figures/OFF1.pdf
}
48 \caption{Un tricératops.
}
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
58 figureespace(-
10u,-
10u,
10u,
10u);
59 Initialisation(
500,-
25,
10,
50);
62 LectureOFF("triceratops.off");
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
75 \includegraphics[scale=
0.5]{figures/OFF11.pdf
}
78 \begin{minipage
}{10cm
}
79 \begin{lstlisting
}[frame=tb
]
80 %www-c.inria.fr/gamma/download/download.php
83 outcolor:=
0.5[jaune,white
];
84 incolor:=
0.5[bleu,white
];
86 figureespace(-
10u,-
10u,
10u,
10u);
87 Initialisation(
500,-
25,
10,
50);
88 LectureOFF("
10-
61.off");
93 Pour ne pas abuser, un dernier exemple.\\
95 \includegraphics[scale=
0.7]{figures/OFF21.pdf
}
98 \begin{minipage
}{10cm
}
99 \begin{lstlisting
}[frame=tb
]
104 figureespace(-
10u,-
10u,
10u,
10u);
105 Initialisation(
500,
30,
20,
50);
106 LectureOFF("
5_1.pc.off");
110 \subsection{Les fichiers
\texttt{OBJ
}}
111 Si vous disposez d'un
112 fichier
\texttt{toto.obj
}, on l'utilisera comme ceci :
114 \macro{\verb!LectureOBJ("toto.obj")!
}
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
]
125 f nbsommetsface1
1 2 3 ...
126 f nbsommetsface2
2 3 4 ...
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
140 \begin{minipage
}{8cm
}
141 \includegraphics[width=
8cm
]{figures/OBJ1.pdf
}
144 \begin{minipage
}{10cm
}
145 \begin{lstlisting
}[frame=tb
]
146 %http://www-c.inria.fr/gamma/download/
149 figureespace(-
10u,-
10u,
10u,
20u);
150 Initialisation(
2500,
80,-
70,
50);
151 outcolor:=
0.7[rose,white
];
153 LectureOBJ("../../data/Midpoly_04.obj");
158 \begin{minipage
}{8cm
}
159 \includegraphics[width=
8cm
]{figures/OBJ11.pdf
}
162 \begin{minipage
}{10cm
}
163 \begin{lstlisting
}[frame=tb
]
164 %http://www-c.inria.fr/gamma/download/
168 figureespace(-
10u,-
10u,
10u,
20u);
169 Initialisation(
2500,-
80,
80,
50);
170 outcolor:=
0.7[rose,white
];
172 LectureOBJ("../../data/Y3483.obj");
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
182 \macro{\verb!Fonction(expr fn,tmin,tmax,pas)!
}
184 où
\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
}
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);
202 \begin{minipage
}{6cm
}
203 \includegraphics[scale=
0.7]{figures/courbe21.pdf
}
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);
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! :
218 \macro{\texttt{Tube(expr Fn,dp,ds,rayon,tmin,nbp,pas)
}}
220 où
\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.
231 Voici plusieurs exemples pour que ce soit plus clair:
233 \begin{minipage
}{7.5cm
}
234 \includegraphics[width=
7.5cm
]{figures/npresentation1.pdf
}
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);
248 \begin{minipage
}{7.5cm
}
249 \includegraphics[width=
7.5cm
]{figures/courbe12.pdf
}
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);
262 \begin{minipage
}{7.5cm
}
263 \includegraphics[width=
7.5cm
]{figures/courbe22.pdf
}
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);
276 \begin{minipage
}{7.5cm
}
277 \includegraphics[width=
7.5cm
]{figures/npresentation2.pdf
}
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);
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 !
295 \includegraphics[scale=
0.5]{figures/hypotube1.pdf
}
296 \caption{Hypocycloïde en tube
}
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
307 \macro{\verb!Tuben(expr Fn,dp,rayon,tmin,nbp,pas,couleur)!
}
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);
316 Initialisation(
1000,
20,
45,
37.5);
318 draw Projette((k,-
5,
0))--Projette((k,
5,
0));
319 draw Projette((-
5,k,
0))--Projette((
5,k,
0));
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);
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
}
336 \includegraphics[width=
6cm
]{figures/ressortgaston1.pdf
}
337 \caption{Siège-ressort de Gaston Lagaffe
}
342 \begin{minipage
}{9cm
}
343 \begin{lstlisting
}[frame=tb
]
344 figureespace(-
10u,-
10u,
10u,
10u);
347 Initialisation(
1000,
20,
20,
25);
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);
355 \section{Les surfaces
}
356 \subsection{Les surfaces en $z$
}
357 De la forme $z=f(x,y)$, on utilisera alors
359 \macro{\verb!Surfz(fn,xmin,xmax,ymin,ymax,nbl,nbp)!
}
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
370 \par Les trois exemples ci-dessous ont donné des temps de compilation
371 de l'ordre de
40 secondes.
373 \begin{lstlisting
}[frame=tb
]
376 \documentclass[12pt
]{article
}
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
}
392 \right.$ etex,u*(
0,-
5));
395 \
[\includegraphics{figures/Surfz11.pdf
}\
]
396 \begin{lstlisting
}[frame=tb
]
399 \documentclass[12pt
]{article
}
407 figureespace(-
10u,-
10u,
10u,
10u);
408 Initialisation(
300,
70,
30,
10);
409 incolor:=
0.5[jaune,white
];
410 outcolor:=
0.8[violet,white
];
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
}
417 \right.$ etex,u*(
0,-
4));
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
]
430 \documentclass[12pt
]{article
}
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
}
447 \right.$ etex,u*(
0,-
4));
451 \
[\includegraphics{figures/Surfz31.pdf
}\
]
452 \subsection{\ldots paramétrées $M(u,v)=(f(u,v),g(u,v),h(u,v))$
}
454 Attention, il faut une orientation correcte des faces créees. Il sera
455 donc nécessaire d'utiliser,
{\em parfois
},
\param{\texttt{invnormale
}}.
459 \macro{\verb!Sparam(expr fn,umin,umax,upas,vmin,vmax,vpas)!
}
461 où
\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
464 \
\Voici plusieurs exemples :
466 \begin{minipage
}{6cm
}
467 \includegraphics[width=
5cm
]{figures/Sparam11.pdf
}
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);
481 \begin{minipage
}{6cm
}
482 \includegraphics[width=
5cm
]{figures/Sparam31.pdf
}
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);
496 \begin{minipage
}{6cm
}
497 \includegraphics[width=
5cm
]{figures/Sparam51.pdf
}
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);
511 \begin{minipage
}{6cm
}
512 \includegraphics[width=
5cm
]{figures/Sparam81.pdf
}
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);
526 \begin{minipage
}{9cm
}
529 \includegraphics[width=
7.5cm
]{figures/Sparam91.pdf
}
530 \caption{Une nappe cylindrique
}
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;
543 draw Projette((l,-
1,
0))--Projette((l,
5,
0)) withcolor gris;
544 draw Projette((-
1,l,
0))--Projette((
5,l,
0)) withcolor gris;
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);
552 \subsection{Les solides de révolution
}
553 C'est un cas particulier des surfaces paramétrées. La syntaxe est donc
556 \macro{\verb!Revolution(fn,umin,umax,upas,vmin,vmax,vpas)!
}
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
}
564 \begin{minipage
}{10cm
}
565 \begin{lstlisting
}[frame=tb
]
569 pp=(R,-h/
2)--((R+r)/
2,h/
2)--(r,-h/
2)--cycle;
571 incolor:=
0.5[jaune,white
];
572 outcolor:=
0.8[bleu,white
];
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);
580 \par\begin{minipage
}{6cm
}
581 \includegraphics[width=
6cm
]{figures/revolution21.pdf
}
584 \begin{minipage
}{10cm
}
585 \begin{lstlisting
}[frame=tb
]
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;
591 incolor:=
0.5[jaune,white
];
592 outcolor:=
0.8[bleu,white
];
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);
600 \par Et pour tirer profit des courbes de Bezier
601 \par\begin{minipage
}{6cm
}
602 \includegraphics[width=
6cm
]{figures/revolution31.pdf
}
605 \begin{minipage
}{10cm
}
606 \begin{lstlisting
}[frame=tb
]
608 pp=(
3,-
7)..(
1,-
6)..(
5,
0.5)..(
5,
3)..(
1,
3)..(
1,
4)..(
2,
5);
610 incolor:=
0.5[jaune,white
];
611 outcolor:=
0.8[bleu,white
];
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);