--- /dev/null
+
+ *jeu. 11 août 2011 09:20:33 CEST : Réinitialisation du projet suite à des
+ manipulations intempestives de ma part (JMS)
\ No newline at end of file
--- /dev/null
+\chapter{Dessinons !}
+\begin{flushleft}
+ {\em Je compterai toujours, pour ma part, au nombre des heures les
+ plus douces, les plus heureuses de ma vie, celles où j'ai pu
+ saisir dans l'espace et étudier sans trève quelques-uns de ces
+ êtres géométriques qui flottent en quelque sorte autour de nous.}
+\par\hfill{\sc Gaston Darboux}
+\end{flushleft}
+\section{La lecture externe}
+Avant de se lancer dans les calculs, profitons du fait que de nombreux
+logiciels de contruction 3D exportent leurs données dans divers
+formats de fichiers. Pourquoi donc ne pas s'en servir, couplé à \MP,
+pour représenter de tels objets ?
+\subsection{Les fichiers \texttt{OFF}}
+Si vous disposez d'un
+fichier \texttt{toto.off}, on l'utilisera comme ceci :
+\begin{center}
+ \macro{\verb!LectureOFF("toto.off")!}
+\end{center}
+\begin{Danger}
+ \begin{itemize}
+ \item Avant l'utilisation des fichiers \verb!OFF!, il faudra
+ s'assurer qu'ils aient une syntaxe du type
+ \begin{lstlisting}[frame=tb]
+ nbsommets nbfaces
+
+ x1 y1 z1
+ x2 y2 z2
+ ...
+ nbsommetsface1 1 2 3
+ nbsommetsface2 2 3 4
+ ...
+ \end{lstlisting}
+ \item Suivant les fichiers \texttt{OFF}, il y aura deux paramètres
+ à modifier : \param{\texttt{echelle}} qui applique un coefficient
+ divisant les données numériques du fichier par la valeur
+ choisie; \param{\texttt{debut}} qui indiquera quel est le chiffre
+ correspondant au premier sommet (bien souvent, c'est 0 mais pour
+ quelques fichiers, cela peut-être 1).
+ \item Le paramètre \param{\texttt{invnormale}} devra {\em parfois} être
+ adapté. Par défaut, il est à 1. On devra le mettre parfois comme
+ étant égal à $-1$.
+ \end{itemize}
+\end{Danger}
+\begin{figure}[h]
+\centering
+\includegraphics[scale=0.9]{figures/OFF1.pdf}
+\caption{Un tricératops.}
+\end{figure}
+\begin{minipage}{\linewidth}
+ \begin{lstlisting}[frame=tb]
+%fichier off:http://www.irit.fr/~Loic.Barthe/Enseignements/TPs_OpenGL/L3_IUP_SI/TP7/Maillages/triceratops.off
+echelle:=2;
+debut:=0;
+
+invnormale:=-1;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,-25,10,50);
+outcolor:=0.8*white;
+incolor:=gris;
+LectureOFF("triceratops.off");
+finespace;
+ \end{lstlisting}
+\end{minipage}
+\par
+L'exemple\footnote{Assez long en compilation, 28 secondes environ.}
+ci-dessous montre un {\em noeud creusé}. Pour cela, on a un paramètre
+ booléen \verb!Creux! (positionné à \verb!true! par défaut) qui
+ permet d'indiquer si le solide envisagé est creusé ou pas. Ce
+ paramètre n'est, pour le moment, disponible que pour la lecture des
+ fichiers externes.
+\par\noindent
+\begin{minipage}{6cm}
+ \includegraphics[scale=0.5]{figures/OFF11.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ %www-c.inria.fr/gamma/download/download.php
+ echelle:=2; debut:=1;
+ Creux:=false;
+ outcolor:=0.5[jaune,white];
+ incolor:=0.5[bleu,white];
+
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(500,-25,10,50);
+ LectureOFF("10-61.off");
+ finespace;
+ \end{lstlisting}
+\end{minipage}
+\par
+Pour ne pas abuser, un dernier exemple.\\
+\begin{minipage}{6cm}
+ \includegraphics[scale=0.7]{figures/OFF21.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ echelle:=5;
+ debut:=1;
+ arcenciel:=true;
+ invnormale:=-1;
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(500,30,20,50);
+ LectureOFF("5_1.pc.off");
+ finespace;
+ \end{lstlisting}
+\end{minipage}
+\subsection{Les fichiers \texttt{OBJ}}
+Si vous disposez d'un
+fichier \texttt{toto.obj}, on l'utilisera comme ceci :
+\begin{center}
+ \macro{\verb!LectureOBJ("toto.obj")!}
+\end{center}
+\begin{Danger}
+ \begin{itemize}
+ \item Avant l'utilisation des fichiers \verb!OBJ!, il faudra
+ s'assurer qu'ils aient une syntaxe du type
+ \begin{lstlisting}[frame=tb]
+ v x1 y1 z1
+ v x2 y2 z2
+ ...
+ v xn yn zn
+ f nbsommetsface1 1 2 3 ...
+ f nbsommetsface2 2 3 4 ...
+ ...
+ \end{lstlisting}
+ \par En effet, certains fichiers \texttt{OBJ} contiennent
+ également les descriptions des vecteurs normaux aux faces. Ils
+ ne sont pas nécessaires pour nous car \MP\ fait les calculs
+ nécessaires\footnote{Il pourrait cependant être utile d'utiliser
+ directement de tels fichiers pour gagner du temps de compilation.}.
+ \item Suivant les fichiers \texttt{OBJ}, il y aura à modifier le paramètre \param{\texttt{echelle}}.
+ \item Le paramètre \param{\texttt{invnormale}} devra {\em parfois} être
+ adapté. Par défaut, il est à 1. On devra le mettre parfois comme
+ étant égal à $-1$.
+ \end{itemize}
+\end{Danger}
+\begin{minipage}{8cm}
+ \includegraphics[width=8cm]{figures/OBJ1.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+%http://www-c.inria.fr/gamma/download/
+echelle:=50;
+
+figureespace(-10u,-10u,10u,20u);
+Initialisation(2500,80,-70,50);
+outcolor:=0.7[rose,white];
+incolor:=jaune;
+LectureOBJ("../../data/Midpoly_04.obj");
+finespace;
+ \end{lstlisting}
+\end{minipage}
+\par
+\begin{minipage}{8cm}
+ \includegraphics[width=8cm]{figures/OBJ11.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+%http://www-c.inria.fr/gamma/download/
+%avec modification
+echelle:=0.25;
+
+figureespace(-10u,-10u,10u,20u);
+Initialisation(2500,-80,80,50);
+outcolor:=0.7[rose,white];
+incolor:=jaune;
+LectureOBJ("../../data/Y3483.obj");
+finespace;
+ \end{lstlisting}
+\end{minipage}
+\section{Les courbes}
+%\subsection{\ldots du type $(x,y,z)=(f(t),g(t),h(t))$}
+Pour tracer une fonction du type $M(x,y,z)=(f(t),g(t),h(t))$, on
+utilisera la macro
+\texttt{Fonction}.
+\begin{center}
+ \macro{\verb!Fonction(expr fn,tmin,tmax,pas)!}
+\end{center}
+où \param{\verb!fn!} est un type \verb!string! donnant les fonctions $f$, $g$
+et $h$ (ne pas oublier de la mettre sous forme d'un triplet);
+\param{\verb!tmin!} et \param{\verb!tmax!} sont les bornes de
+l'intervalle de tracé et \param{\verb!pas!} le pas d'incrémentation
+pour positionner les points et les relier ensuite.
+\par\begin{minipage}{6cm}
+ \includegraphics{figures/courbe11.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(5,30,50,20);
+ draw Fonction("(sin(t),cos(t),t/3)",-2,25,0.01);
+ finespace;
+ \end{lstlisting}
+\end{minipage}
+\par
+\begin{minipage}{6cm}
+ \includegraphics[scale=0.7]{figures/courbe21.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(5,30,20,20);
+ draw Fonction("(cos(t)*(1+abs(t)/5),1.5*sin(t),0.2*t)",-15,15,0.1);
+ finespace;
+ \end{lstlisting}
+\end{minipage}
+\subsection{Les tubes : 1\ier\ essai}
+On a une amélioration graphique : la possibilité de tracer les courbes
+sous forme de tube avec la macro \verb!Tube! :
+\begin{center}
+ \macro{\texttt{Tube(expr Fn,dp,ds,rayon,tmin,nbp,pas)}}
+\end{center}
+où \param{\verb!Fn!}, \param{\verb!dp!} et \param{\verb!ds!} sont des
+types \texttt{string} représentant respectivement la fonction de
+référence sur laquelle le tube est construit; la dérivée première et
+la dérivée seconde. Pourquoi ? Pour calculer les vecteurs $(\vecteur
+T, \vecteur N, \vecteur B)$ constituant le repère de Frenet local
+attaché à la courbe. Il est d'ailleurs vivement recommandé de les
+calculer à la main ou à l'aide d'un logiciel de calcul formel.
+\\Une fois ceci fait, \param{\texttt{tmin}} la valeur du paramètre de départ,
+\param{\texttt{nbp}} le nombre de pas voulus, \param{\texttt{pas}} le
+pas pour passer d'un point à un autre.
+\par
+Voici plusieurs exemples pour que ce soit plus clair:
+\par
+\begin{minipage}{7.5cm}
+ \includegraphics[width=7.5cm]{figures/npresentation1.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ figureespace(-10u,-20u,10u,10u);
+ Initialisation(1000,15,70,50);
+ outcolor:=0.5[green,white];
+ 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);
+ finespace;
+ end
+\end{lstlisting}
+\end{minipage}
+\par
+\begin{minipage}{7.5cm}
+ \includegraphics[width=7.5cm]{figures/courbe12.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(5,30,50,20);
+outcolor:=0.5[red,white];
+ 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);
+ finespace;
+\end{lstlisting}
+\end{minipage}
+\par
+\begin{minipage}{7.5cm}
+ \includegraphics[width=7.5cm]{figures/courbe22.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ figureespace(-10u,-20u,10u,10u);
+ Initialisation(5,30,20,20);
+ outcolor:=0.5[blue,white];
+ 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);
+ finespace;
+\end{lstlisting}
+\end{minipage}
+\par
+\begin{minipage}{7.5cm}
+ \includegraphics[width=7.5cm]{figures/npresentation2.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+\begin{lstlisting}[frame=tb]
+ figureespace(-10u,-20u,10u,10u);
+ Initialisation(1000,15,20,50);
+ outcolor:=0.5[jaune,white];
+ 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);
+ finespace;
+\end{lstlisting}
+\end{minipage}
+\subsection{Les tubes : 2\ieme\ essai}
+Cependant, pour obtenir l'image ci-dessous tirée de la documentation de
+\texttt{pst-solides3d}\footnote{Mais celle présente dans cette
+ documentation a été compilée par \MP.}, cela ne marche pas !
+\begin{figure}[h]
+ \centering
+ \includegraphics[scale=0.5]{figures/hypotube1.pdf}
+ \caption{Hypocycloïde en tube}
+ \label{fig-hypotube}
+\end{figure}
+J'ai donc crée une deuxième macro permettant de construire de telles
+figures. En fait, le problème venait de l'inversion des normales au
+passage des points d'inflexion. De plus, grâce à un document trouvé
+sur la toile\footnote{Malheureusement, je ne dispose plus de
+ l'adresse. Par contre, l'auteur est Loïc {\sc Barthe} de l'équipe
+ Vortex de l'IRIT-UPS Toulouse.}, il n'est plus nécessaire d'utiliser
+la dérivée seconde. La macro utilisable est
+\begin{center}
+ \macro{\verb!Tuben(expr Fn,dp,rayon,tmin,nbp,pas,couleur)!}
+\end{center}
+avec les mêmes conventions que lors du premier essai. Pour obtenir la
+figure \ref{fig-hypotube}, on utilisera alors le code
+\begin{lstlisting}[frame=tb]
+ figureespace(-10u,-10u,10u,10u);
+
+ nb:=16; unit:=0.8;
+
+ Initialisation(1000,20,45,37.5);
+ for k=-5 upto 5:
+ draw Projette((k,-5,0))--Projette((k,5,0));
+ draw Projette((-5,k,0))--Projette((5,k,0));
+ endfor;
+ eclairage:=false;
+ outcolor:=blanc;
+ 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);
+
+ finespace;
+\end{lstlisting}
+\`A noter que le paramètre \param{\verb!unit!} permet de faire un
+agrandissement (ou une réduction) de la figure. Par défaut,
+\texttt{unit=1}. De plus, il existe le paramètre \param{\verb!nb!} qui permet
+de moduler le nombre de points sur le cercle permettant de tracer le tube.
+\par Et pour finir, étant fan de Gaston Lagaffe, je me permets de reprendre
+le ressort-siège de la documentation de \texttt{pst-solides3d}.
+\par\begin{minipage}{8cm}
+ \begin{figurefixe}
+ \centering
+ \includegraphics[width=6cm]{figures/ressortgaston1.pdf}
+ \caption{Siège-ressort de Gaston Lagaffe}
+ \label{fig:exsyr1}
+ \end{figurefixe}
+\end{minipage}
+\hfill
+\begin{minipage}{9cm}
+ \begin{lstlisting}[frame=tb]
+ figureespace(-10u,-10u,10u,10u);
+
+ nb:=6;
+ Initialisation(1000,20,20,25);
+ arcenciel:=true;
+ 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);
+
+ finespace;
+
+ \end{lstlisting}
+\end{minipage}
+\section{Les surfaces}
+\subsection{Les surfaces en $z$}
+De la forme $z=f(x,y)$, on utilisera alors
+\begin{center}
+ \macro{\verb!Surfz(fn,xmin,xmax,ymin,ymax,nbl,nbp)!}
+\end{center}
+avec \param{\verb!fn!} la fonction écrite sous un type \verb!string!,
+\param{\verb!xmin!}, \param{\verb!xmax!}, \param{\verb!ymin!} et \param{\verb!ymax!} les bornes des
+intervalles de tracés, \param{\verb!nbl!} le nombre de lignes suivant les
+$y$\footnote{Il en est ainsi car j'ai suivi la méthode décrite
+ dans le livre de Raymond Dony. Il est à noter également que pour des
+ impératifs de temps de compilation et de poids des images, les deux
+ paramètres \param{\verb!nbp!} et \param{\verb!nbl!} sont des multiples de 3.} et
+\param{\verb!nbp!} le nombre de points utilisés sur chaque ligne pour tracer
+la surface.
+\par Les trois exemples ci-dessous ont donné des temps de compilation
+de l'ordre de 40 secondes.
+\par
+\begin{lstlisting}[frame=tb]
+ verbatimtex
+ %&latex
+ \documentclass[12pt]{article}
+ \usepackage{fourier}
+ \begin{document}
+ etex
+
+ invnormalelum:=-1;
+
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(300,15,35.264,10);
+ incolor:=0.5[green,white];
+ outcolor:=0.25[orange,white];
+ draw SurfZ("4*cos(X++Y)*mexp(-(X++Y)*50)",-15,15,-10,10,60,150);
+ 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}
+ x\in[-15,15]\\
+ y\in[-10,10]\\
+ \end{array}
+ \right.$ etex,u*(0,-5));
+ finespace;
+ \end{lstlisting}
+\[\includegraphics{figures/Surfz11.pdf}\]
+\begin{lstlisting}[frame=tb]
+ verbatimtex
+ %&latex
+ \documentclass[12pt]{article}
+ \usepackage{fourier}
+ \usepackage{amsmath}
+ \begin{document}
+ etex
+
+ invnormalelum:=-1;
+
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(300,70,30,10);
+ incolor:=0.5[jaune,white];
+ outcolor:=0.8[violet,white];
+ arcenciel:=true;
+ draw SurfZ("if (X=0) and (Y=0):10 else:10*sin((X++Y))/(X++Y) fi",-8,8,-8,8,60,150);
+ 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}
+ x\in[-8,8]\\
+ y\in[-8,8]\\
+ \end{array}
+ \right.$ etex,u*(0,-4));
+ finespace;
+\end{lstlisting}
+\par
+\[\includegraphics{figures/Surfz21.pdf}\]
+\L'exemple précédent montre l'utilisation du paramètre
+\param{\texttt{invnormalelum}} permettant d'opposer la normale permettant la
+détermination de la quantité lumineuse. De plus, la gestion de la
+lumière est un peu différente lors du tracé des surfaces en $z$. En
+effet, on a parfois besoin de voir ce qui se passe dans la partie cachée\ldots
+\begin{lstlisting}[frame=tb]
+ verbatimtex
+ % &latex
+ \documentclass[12pt]{article}
+ \usepackage{fourier}
+ \usepackage{amsmath}
+ \begin{document}
+ etex
+
+ invnormalelum:=-1;
+
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(300,45,35,10);
+ incolor:=0.5[jaune,white];
+ outcolor:=0.8[violet,white];
+ 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);
+ label(btex $f(z)=10\times\dfrac{\sin x}x\dfrac{\sin y}y\mbox{ avec }\left\{\begin{array}{l}
+ x\in[-10,10]\\
+ y\in[-12,12]\\
+ \end{array}
+ \right.$ etex,u*(0,-4));
+ finespace;
+ end
+\end{lstlisting}
+\[\includegraphics{figures/Surfz31.pdf}\]
+\subsection{\ldots paramétrées $M(u,v)=(f(u,v),g(u,v),h(u,v))$}
+\begin{Danger}
+ Attention, il faut une orientation correcte des faces créees. Il sera
+ donc nécessaire d'utiliser, {\em parfois}, \param{\texttt{invnormale}}.
+\end{Danger}
+Utilisons la macro
+\begin{center}
+ \macro{\verb!Sparam(expr fn,umin,umax,upas,vmin,vmax,vpas)!}
+\end{center}
+où \param{\texttt{fn}} est un type \texttt{string} représentant la fonction
+$M(u,v)$ donnée sous forme d'un triplet; les autres paramètres parlant
+d'eux mêmes.
+\\Voici plusieurs exemples :
+\par%\vfill\par
+\begin{minipage}{6cm}
+\includegraphics[width=5cm]{figures/Sparam11.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(500,-30,15,75);
+ outcolor:=0.5[red,white];
+ incolor:=0.5[jaune,white];
+ 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);
+ finespace;
+ \end{lstlisting}
+\end{minipage}
+\par\vfill\par
+\begin{minipage}{6cm}
+\includegraphics[width=5cm]{figures/Sparam31.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(50,-110,10,100);
+ outcolor:=0.5[orange,white];
+ incolor:=0.25[gris,white];
+ draw Sparam("(u,v,u*u-v*v)",-1,1,0.05,-1,1,0.05);
+ finespace;
+ \end{lstlisting}
+\end{minipage}
+\par\vfill\par
+\begin{minipage}{6cm}
+\includegraphics[width=5cm]{figures/Sparam51.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(500,10,20,100);
+ incolor:=0.75[jaune,white];
+ outcolor:=0.5[green,white];
+ 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);
+ finespace;
+ \end{lstlisting}
+\end{minipage}
+\par\vfill\par
+\begin{minipage}{6cm}
+\includegraphics[width=5cm]{figures/Sparam81.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(50,0,-20,100);
+ incolor:=0.75[orange,white];
+ outcolor:=0.5[blue,white];
+ 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);
+ finespace;
+ \end{lstlisting}
+\end{minipage}
+\par\vfill\par
+\begin{minipage}{9cm}
+\begin{figurefixe}
+\centering
+\includegraphics[width=7.5cm]{figures/Sparam91.pdf}
+\caption{Une nappe cylindrique}
+\label{fig:exsyr2}
+\end{figurefixe}
+\end{minipage}
+\hfill
+\begin{minipage}{9cm}
+ \begin{lstlisting}[frame=tb]
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(100,5,10,25);
+ incolor:=0.5[jaune,white];
+ outcolor:=0.75[violet,blanc];
+ drawarrow Projette((0,0,0))--Projette((0,3,3)) withpen pencircle scaled2bp;
+ for l=-1 upto 5:
+ draw Projette((l,-1,0))--Projette((l,5,0)) withcolor gris;
+ draw Projette((-1,l,0))--Projette((5,l,0)) withcolor gris;
+ endfor;
+ TraceAxes;
+ drawarrow Projette((0,0,0))--Projette((0,3,3)) withpen pencircle scaled2bp;
+ 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);
+ finespace;
+ \end{lstlisting}
+\end{minipage}
+\subsection{Les solides de révolution}
+C'est un cas particulier des surfaces paramétrées. La syntaxe est donc
+très voisine :
+\begin{center}
+ \macro{\verb!Revolution(fn,umin,umax,upas,vmin,vmax,vpas)!}
+\end{center}
+avec les mêmes notations que précédemment {\em sauf} que \param{\verb!fn!}
+doit représenter un chemin \MP. Voici quelques exemples.
+\par\begin{minipage}{6cm}
+ \includegraphics[width=6cm]{figures/revolution11.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ r=2; R=8; h=3;
+
+ path pp;
+ pp=(R,-h/2)--((R+r)/2,h/2)--(r,-h/2)--cycle;
+
+ incolor:=0.5[jaune,white];
+ outcolor:=0.8[bleu,white];
+
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(500,30,40,25);
+ draw Revolution("pp",0,length pp,0.1,0,2*pi,pi/12);
+ finespace;
+\end{lstlisting}
+\end{minipage}
+\par\begin{minipage}{6cm}
+ \includegraphics[width=6cm]{figures/revolution21.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ r=3; R=8; h=6;
+
+ path pp;
+ 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;
+
+ incolor:=0.5[jaune,white];
+ outcolor:=0.8[bleu,white];
+
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(500,30,20,25);
+ draw Revolution("pp",0,length pp,0.25,0,2*pi,pi/12);
+ finespace;
+ \end{lstlisting}
+\end{minipage}
+\par Et pour tirer profit des courbes de Bezier
+\par\begin{minipage}{6cm}
+ \includegraphics[width=6cm]{figures/revolution31.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ path pp;
+ pp=(3,-7)..(1,-6)..(5,0.5)..(5,3)..(1,3)..(1,4)..(2,5);
+
+ incolor:=0.5[jaune,white];
+ outcolor:=0.8[bleu,white];
+
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(500,30,20,25);
+ draw Revolution("pp",0,length pp,0.2,0,2*pi,pi/12);
+ finespace;
+ \end{lstlisting}
+\end{minipage}
\ No newline at end of file
--- /dev/null
+\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}
\ No newline at end of file
--- /dev/null
+\chapter{Historique}
+\begin{description}
+\item[25/01/2011] Modification de l'objet \texttt{Deplacement} (gestion des couleurs). Modification mineure de la documentation (Ajout d'un exemple dans la partie transformation de la section 3).
+\item[27/11/2010] Corrections de \texttt{Redundant equation}.
+\item[31/08/2008] Ajout de la transparence pour l'affichage des objets.
+\item[21/08/2008] Ajout des objets \texttt{OFF}, \texttt{OBJ},
+ \texttt{tetraedre}, \texttt{octaedre}, \texttt{dodecaedre} et
+ \texttt{icosaedre}.
+\item[16/08/2008] Ajout de l'objet \texttt{New}.
+\item[13/08/2008] Ajout des objets \texttt{Fusion} et \texttt{Déplacement}.
+\item[12/08/2008] Possibilité de couper un objet par un plan.
+\item[05/08/2008] Possibilité de numéroter et d'enlever des faces.
+\item[01/08/2008] Ajout des solides \texttt{biface} et \texttt{calotte
+ sphérique pleine}.
+\item[30/07/2008] Redéfinition de l'affichage et de la fusion
+ d'objets. Ajout des solides \texttt{grille} et \texttt{ruban}.
+\item[29/07/2008] Debut de la mise en place des transformations
+ (uniquement disponible pour les objets).
+\item[28/07/2008] Ajout d'objets et de la fusion.
+\item[19/07/2008] Ajout de la gestion de la lumière.
+\item[18/07/2008] Ajout de l'espace de couleurs HSV.
+\item[26/06/2008] Ajout des solides de révolution. Premiers essais sur
+ la fusion de deux objets.
+\item[25/06/2008] Ajout des surfaces $z=f(x,y)$.
+\item[24/06/2008] Ajout \og des tubes\fg\ dans la représentation des
+ courbes. Ajout des surfaces paramétrées.
+\item[23/06/2008] Lancement de la première version très {\em
+ expérimentale}. Tout est encore en vrac. La lecture de fichiers
+ externes au format \verb!OFF! est possible.
+\end{description}
\ No newline at end of file
--- /dev/null
+\chapter{\texttt{pst-solides3d}}
+Bien qu'il y ait de nombreux exemples empruntés à
+\texttt{pst-solides3d} dans les parties précédentes, cette partie
+constitue un hommage au travail des auteurs de ce package. C'est ma
+façon de les remercier pour les conseils, les encouragements et les
+approfondissements qu'ils m'ont apportés.
+\par C'est également ici que l'on trouvera certaines fonctionnalités
+avancées {\em non documentées} et/ou {\em non implantées}.
+\paragraph{Exemple 1}\hfill\newline
+\begin{minipage}{8cm}
+ \begin{figurefixe}
+ \centering
+ \includegraphics[width=7cm]{figures/hommage11.pdf}
+ \caption{Une spirale conique}
+ \end{figurefixe}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ %1'9"
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(200,20,20,15);
+ arcenciel:=true;
+ incolor:=gris;
+ draw Tuben("(0.5*t*sin(0.707)*cos(t),0.5*sin(0.707)*t*sin(t),-0.5*t*cos(0.707))","(0.5*sin(0.707)*(cos(t)-t*sin(t)),0.5*sin(0.707)*(sin(t)+t*cos(t)),-0.5*cos(0.707))",0.4,-25.4,508,0.1);
+ finespace;
+\end{lstlisting}
+\end{minipage}
+\paragraph{Exemple 2}\hfill\newline
+ \begin{figure}[!ht]
+ \centering
+ \includegraphics[scale=0.9]{figures/hommage21.pdf}
+ \caption{La surface $z=\dfrac{\sin(x^2+y^2)}3$}
+ \end{figure}
+\begin{lstlisting}[frame=tb]
+ satu:=1;
+
+ %1'9"
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(5000,30,30,40);
+ arcenciel:=true;
+ incolor:=0.9[gris,blanc];
+ draw SurfZ("sin((X**2+Y**2)/3)",-5,5,-5,5,90,120);
+ TraceAxesD(4,3,3);
+ finespace;
+\end{lstlisting}
+\paragraph{Exemple 3}\hfill\newline
+\begin{figure}[!ht]
+ \centering
+ \includegraphics{figures/hommage31.pdf}
+ \caption{La surface $z=xy(x^2-y^2)$}
+\end{figure}
+\begin{lstlisting}[frame=tb]
+ %1"
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(500,50,60,40);
+ arcenciel:=true;
+ incolor:=0.9[gris,blanc];
+ draw SurfZ("X*Y*(X**2-Y**2)*0.1",-3,3,-3,3,30,60);
+ TraceAxesD(3,3,5);
+ finespace;
+\end{lstlisting}
+\paragraph{Exemple 4}\hfill\newline
+\begin{minipage}{8cm}
+ \begin{figurefixe}
+ \centering
+ \includegraphics[width=7cm]{figures/hommage41.pdf}
+ \caption{Un coquillage}
+ \end{figurefixe}
+\end{minipage}
+\hfill
+\begin{minipage}{10cm}
+ \begin{lstlisting}[frame=tb]
+ %2"
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(2000,20,-10,25);
+ arcenciel:=true;
+ incolor:=0.5[gris,white];
+ draw Sparam("(1.21**v*(sin(u)*cos(u)),1.21**v*(sin(u)**2*sin(v)),1.21**v*(sin(u)**2*cos(v)))",pi/24,11*pi/12,pi/24,0,10*pi/4,pi/24);
+ TraceAxesD(8,5,5);
+ finespace;
+\end{lstlisting}
+\end{minipage}
+\paragraph{Exemple 5} Cet exemple nous permet d'utiliser le paramètre
+\param{\verb!Ferme1!} qui indique si le solide \no1 est \og fermé\fg
+(c'est-à-dire sans creux visibles) ou non (c'est-à-dire avec des creux
+visibles ou si l'on souhaite voir l'intérieur du solide). L'intérêt
+réside dans une diminution du nombre de faces à traiter; ce qui
+contribue à un meilleur temps de compilation.\\Ici, les
+paramètres \param{\verb!Ferme1!}\ldots sont tous à \texttt{true} : en
+effet, on ne souhaite pas voir l'intérieur des champignons.
+\begin{figure}
+ \centering
+ \includegraphics[width=7cm]{figures/hommage51.pdf}
+ \caption{Des champignons}
+\end{figure}
+\begin{lstlisting}[frame=tb]%
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(500,20,10,10);
+
+ vardef Pp(expr R,h)=(0,0)--
+ for k=-33 step 10 until 43:
+ (cosd(k)*0.5*h-0.2*h,0.3*h+0.5*h*sind(k))--
+ endfor
+ for l=0 step 15 until 90:
+ (0.8*R*cosd(l)+0.2*R,0.8*R*sind(l)+0.6*h)--
+ endfor
+ (0,h)
+ enddef;%pour la section des champignons
+
+ outcolor:=blanc;
+ nb:=30;subh:=15;
+ h=10;R=5;
+ Ferme1:=true;%pour ne pas tenir compte des faces non vues
+ ObjetAnneau1("nbp=18",Pp(R,h));
+ angx:=-20;
+ outcolor:=0.5[rouge,blanc];
+ TR:=(-4,2.5,0);
+ h:=5;R:=2.5;
+ Ferme2:=true;
+ ObjetAnneau2("nbp=18",Pp(R,h));
+ angx:=30;
+ TR:=(-4,-4,0);
+ h:=4;R:=2;
+ outcolor:=0.5[jaune,white];
+ Ferme3:=true;
+ ObjetAnneau3("nbp=18",Pp(R,h));
+ nbobj:=3;
+ DessineFusion;
+ finespace;
+\end{lstlisting}
+ \paragraph{Exemple 6} Manuel Luque a proposé un
+ document\footnote{\url{http://melusine.eu.org/syracuse/mluque/solides3d2007/fusee_tintin/objectif_fusee.pdf}} sur la fusée lunaire utilisée par Tintin dans les deux tomes \og Objetif Lune\fg\ et \og On a marché sur la Lune\fg. J'ai donc repris comme base son travail.
+ \begin{figure}[!ht]
+ \centering
+ \includegraphics{figures/fuseetintin1.pdf}
+ \caption{La fusée de Tintin}
+ \end{figure}
+ \begin{lstlisting}[frame=tb]%
+ %Il est nécessaire de redéfinir l'ordre des rotations.
+ vardef Transform(expr PT)=RotX(RotY(RotZ(PT)))
+ enddef;
+
+ transformation:=true;
+
+ %30"
+ figureespace(-10u,-10u,10u,10u);
+ fill feuillet;
+ for k=1 upto 100:
+ fill fullcircle scaled (2*uniformdeviate(1)*mm) shifted((uniformdeviate(1))[coinbg,coinbd]+uniformdeviate(1)*(coinhg-coinbg)) withcolor jaune;
+ endfor;
+
+ Initialisation(500,-50,20,50);
+ unit:=0.2;
+ traits:=false;
+ angx:=-80;
+ angy:=20;
+ outcolor:=rouge;
+ path rocket[];
+ rocket1=(0,4.6)--(-0.8,4.6)--(-0.85,5.6)--(-0.95,6.6)--(-1.05,7.6)--(-1.1,8.6)--(-1.2,9.6);
+ rocket2=(-1.2,9.6)--(-1.25,10.6)--(-1.3,11.6)--(-1.35,12.6)--(-1.4,13.6)--(-1.4,14.6)--(-1.375,15.6)--(-1.27,16.6)--(-1.2,17.6)--(-1.05,18.6);
+ rocket3=(-1.05,18.6)--(-0.85,19.6)--(-0.65,20.6)--(-0.35,21.6)--(-0.1,22.2)--(-0.1,23.75)--(0,23.75);
+ subh:=24;
+ path propulsion;
+ propulsion=(0,4.6)--(-0.8,4.6)--(0,0);
+ perso1:=true;
+ Ferme1:=false;
+ string couleurperso;
+ couleurperso="if ((tapj mod 48)=0) or ((tapj mod 48)=1) or ((tapj mod 48)=2) or ((tapj mod 48)=6) or ((tapj mod 48)=7) or ((tapj mod 48)=8) or ((tapj mod 48)=12) or ((tapj mod 48)=13) or ((tapj mod 48)=14) or ((tapj mod 48)=18) or ((tapj mod 48)=19) or ((tapj mod 48)=20) or ((tapj mod 48)=27) or ((tapj mod 48)=28) or ((tapj mod 48)=29) or ((tapj mod 48)=33) or ((tapj mod 48)=34) or ((tapj mod 48)=35) or ((tapj mod 48)=39) or ((tapj mod 48)=40) or ((tapj mod 48)=41) or ((tapj mod 48)=45) or ((tapj mod 48)=46) or ((tapj mod 48)=47):red else: white fi;";
+ ObjetAnneau1("nbp=10",rocket2);
+ outcolor:=rouge;
+ for k=3 upto 6:
+ Ferme[k]:=true;
+ endfor;
+ incolor:=0.5[jaune,orange];
+ Ferme2:=false;
+ ObjetAnneau2("nbp=7",rocket1);
+ ObjetAnneau3("nbp=7",rocket3);
+ Ferme10:=true;
+ outcolor:=0.5[jaune,orange];
+ ObjetAnneau10("nbp=3",propulsion);
+ outcolor:=rouge;
+ path amortisseur;
+ amortisseur=for k=-90 step 10 until 0:(cosd(k),sind(k)+1)--endfor for k=0 step 2 until 22:(cosd(k)*11.78-10.78,11.78*sind(k)+1)-- endfor (0,5.75);
+ TR:=Image((0,-5,0));
+ ObjetAnneau4("nbp=22",amortisseur);
+ angz:=120;
+ TR:=(0,0,0);
+ TR:=Image((0,-5,0));
+ ObjetAnneau5("nbp=22",amortisseur);
+ angz:=-120;
+ TR:=(0,0,0);
+ TR:=Image((0,-5,0));
+ ObjetAnneau6("nbp=22",amortisseur);
+ TR:=(0,0,0);
+ angz:=0;
+ subh:=1;
+ ObjetBiface7((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+ angz:=120;
+ ObjetBiface8((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+ angz:=-120;
+ ObjetBiface9((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+ nbobj:=10;
+ DessineFusion;
+ clip currentpicture to (fullcircle scaled 16cm);
+ finespace;
+ end
+ \end{lstlisting}
+On voit ici apparaître les paramètres \param{\verb!perso!}. Ils ont
+été spécialement crées pour cette fusée. En effet, le principal
+problème pour définir cette fusée est l'alternance des couleurs
+blanche et rouge sur le corps de la fusée. Aussi à l'aide de ces
+paramètres, on peut faire adopter un style spécial à un objet. Par
+contre, il existe une {\em contrainte} : la définition de ce style
+spécial doit se faire par le \texttt{string}
+\param{\verb!couleurperso!}.
+\par Voici un autre exemple\par
+\begin{minipage}{8cm}
+ \includegraphics[width=8cm]{figures/torecolore1.pdf}
+\end{minipage}
+\hfill
+\begin{minipage}{9cm}
+ \begin{lstlisting}[frame=tb]
+ perso1:=true;
+ couleurperso:="if ((tapj div subh) mod 3)=0:if (tapj mod 3)=0: rouge elseif (tapj mod 3)=1: noir else: bleu fi elseif ((tapj div subh) mod 3)=1:if (tapj mod 3)=1: rouge elseif (tapj mod 3)=2: noir else: bleu fi elseif ((tapj div subh) mod 3)=2:if (tapj mod 3)=2: rouge elseif (tapj mod 3)=0: noir else: bleu fi fi;";
+
+ nb:=12;
+ subh:=18;
+
+ figureespace(-10u,-10u,10u,10u);
+ Initialisation(1500,30,20,50);
+ angy:=25;angz:=-20;
+ Objettore1("R=3","r=1");
+ AffichageObjet1;
+ finespace;
+ \end{lstlisting}
+\end{minipage}
+\paragraph{Exemple 7} Manuel a également construis une
+image\footnote{D'autres sont également disponibles à l'adresse
+\begin{center}
+\url{http://melusine.eu.org/lab/bpst/pst- solides3d/tintin}
+\end{center}} melant
+le package \texttt{pst-map} et \texttt{pst-solides3d}. Il était
+tentant alors de meler \texttt{mp-solides} et \texttt{mp-geo}.
+\begin{figure}[!ht]
+ \centering
+ \includegraphics{figures/Terrefusee1.pdf}
+ \caption{La fusée s'éloignant de la Terre}
+\end{figure}
+\begin{lstlisting}[frame=tb]
+%figure obtenue en modifiant un petit peu la macro
+ %originelle Mappemonde.
+ input mp-geo
+ input mp-solid;
+
+ vardef mappemonde(expr longobs,latobs)=
+ projection:="non";
+ Initialisation(5,longobs,latobs,500);
+ numeric phim,phip,phii;%phi moins -- phi plus - phi intermediaire
+ phim=Phi+arcsind(rayon/Rho)-90;
+ phip=Phi+90-arcsind(rayon/Rho);
+ color pte[];
+ pte1=rayon*(cosd(phim)*cosd(Theta),cosd(phim)*sind(Theta),sind(phim));
+ pte2=rayon*(cosd(phip)*cosd(Theta),cosd(phip)*sind(Theta),sind(phip));
+ pte3=1/2[pte1,pte2];
+ pte4-pte3=Normal((0,0,0),pte1,pte2);
+ if (Phi>90):
+ phip:=180-phip;
+ phii:=180-phim;
+ phim:=phip;
+ phip:=phii;
+ fi;
+ if (Phi<-90):
+ phip:=-180-phip;
+ phii:=-180-phim;
+ phim:=phip;
+ phip:=phii;
+ fi;
+ fill cercles(pte3,pte1,pte3,pte1,pte4) withcolor ciel;
+ Lecture("Cameriquesud.dat");
+ Lecture("Ccaraibes.dat");
+ Lecture("Cameriquecentrale.dat");
+ Lecture("Cameriquenord.dat");
+ Lecture("Casie.dat");
+ Lecture("Ceurope.dat");
+ Lecture("Cafrique.dat");
+ if volcans=true:
+ Lecturevolcans;
+ fi;
+ if lacs=true:
+ Lecturelacs;
+ Lecturelacssup;
+ fi;
+ Lectureiles;
+ if capitales=true:
+ Lecturecapitales;
+ fi;
+ if fleuves=true:
+ Lecturerivieres;
+ fi;
+ if maillage=true:
+ drawoptions(withcolor gris);
+ MaillageSphere;
+ drawoptions();
+ fi;
+ if maille=true:
+ Maille;
+ fi;
+ draw cercles(pte3,pte1,pte3,pte1,pte4);
+ enddef;
+
+ vardef Transform(expr PT)=RotY(RotX(RotZ(PT)))
+ enddef;
+
+ transformation:=true;
+
+ figureespace(-10u,-10u,10u,10u);
+ picture terre;
+ fleuves:=false;
+ lacs:=false;
+ capitales:=false;
+ terre=image(
+ mappemonde(80,20);
+ );
+ fill feuillet;
+ for k=1 upto 100:
+ fill fullcircle scaled (2*uniformdeviate(1)*mm) shifted((uniformdeviate(1))[coinbg,coinbd]+uniformdeviate(1)*(coinhg-coinbg)) withcolor jaune;
+ endfor;
+ draw terre;
+
+ Initialisation(500,160,20,50);
+ unit:=0.2;
+ traits:=false;
+ angy:=-60;
+ outcolor:=rouge;
+ path rocket[];
+ rocket1=(0,4.6)--(-0.8,4.6)--(-0.85,5.6)--(-0.95,6.6)--(-1.05,7.6)--(-1.1,8.6)--(-1.2,9.6);
+ rocket2=(-1.2,9.6)--(-1.25,10.6)--(-1.3,11.6)--(-1.35,12.6)--(-1.4,13.6)--(-1.4,14.6)--(-1.375,15.6)--(-1.27,16.6)--(-1.2,17.6)--(-1.05,18.6);
+ rocket3=(-1.05,18.6)--(-0.85,19.6)--(-0.65,20.6)--(-0.35,21.6)--(-0.1,22.2)--(-0.1,23.75)--(0,23.75);
+ subh:=24;
+ perso1:=true;
+ Ferme1:=false;
+ string couleurperso;
+ couleurperso="if ((tapj mod 48)=0) or ((tapj mod 48)=1) or ((tapj mod 48)=2) or ((tapj mod 48)=6) or ((tapj mod 48)=7) or ((tapj mod 48)=8) or ((tapj mod 48)=12) or ((tapj mod 48)=13) or ((tapj mod 48)=14) or ((tapj mod 48)=18) or ((tapj mod 48)=19) or ((tapj mod 48)=20) or ((tapj mod 48)=27) or ((tapj mod 48)=28) or ((tapj mod 48)=29) or ((tapj mod 48)=33) or ((tapj mod 48)=34) or ((tapj mod 48)=35) or ((tapj mod 48)=39) or ((tapj mod 48)=40) or ((tapj mod 48)=41) or ((tapj mod 48)=45) or ((tapj mod 48)=46) or ((tapj mod 48)=47):red else: white fi;";
+ TR:=(0,-15,0);
+ ObjetAnneau1("nbp=10",rocket2);
+ outcolor:=rouge;
+ for k=2 upto 6:
+ Ferme[k]:=true;
+ endfor;
+ ObjetAnneau2("nbp=7",rocket1);
+ ObjetAnneau3("nbp=7",rocket3);
+ path amortisseur;
+ amortisseur=for k=-90 step 10 until 0:(cosd(k),sind(k)+1)--endfor for k=0 step 2 until 22:(cosd(k)*11.78-10.78,11.78*sind(k)+1)-- endfor (0,5.75);
+ TR:=(0,-15,0)+(0,-5,0);
+ ObjetAnneau4("nbp=22",amortisseur);
+ angz:=150;
+ TR:=(0,0,0);
+ TR:=(0,-15,0)+Image((0,-5,0));
+ ObjetAnneau5("nbp=22",amortisseur);
+ angz:=-90;
+ TR:=(0,0,0);
+ TR:=(0,-15,0)+Image((0,-5,0));
+ ObjetAnneau6("nbp=22",amortisseur);
+ TR:=(0,-15,0)+(0,0,0);
+ angz:=0;
+ subh:=1;
+ ObjetBiface7((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+ angz:=150;
+ ObjetBiface8((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+ angz:=-90;
+ ObjetBiface9((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+ nbobj:=9;
+ DessineFusion;
+ finespace;
+ end
+\end{lstlisting}
\ No newline at end of file
--- /dev/null
+\chapter{Présentation}
+\begin{flushleft}
+{\em
+Un mathématicien n'a pas parfaitement compris ses propres travaux tant
+qu'il ne les a pas clarifiés au point de pouvoir aller dans la rue les
+expliquer à la première personne venue.}
+\par\hfill {\sc Joseph-Louis Lagrange}
+\end{flushleft}
+\begin{Danger}
+ Avant toutes choses, je tiens particulièrement à remercier
+ chaleureusement les auteurs de \texttt{pst-solides3d} pour leur aide
+ et leur accord quant à l'utilisation de la terminologie et de
+ nombreux exemples de leur documentation.
+\end{Danger}
+\section{Constitution du package}
+\begin{itemize}
+\item Fichier \texttt{mp-solid.mp}.
+\item Documentation et exemples : \texttt{doc.tgz(pdf)}.
+\end{itemize}
+Ce package est disponible à l'url
+\url{http://syracuse.eu.org/syracuse/...}.
+\section{Introduction}
+\'Emerveillé, comme tout à chacun, par les prouesses de
+\texttt{pst-solides3d}, je me suis posé la question de savoir si cela
+était réalisable avec \MP. Malheureuse question, car pas mal de temps
+il m'a fallu\footnote{Yoda est avec moi !} pour aboutir à cette
+première version\ldots Temps de codage, d'apprentissage, de révision
+de mes connaissances mathématiques,\ldots ont été très chronophage.\\
+Mes sources d'inspiration ont été \verb!pst-solides3d! (en parcourant
+le code), les auteurs ({\em merveilleux auteurs}) de ce package et le
+livre \og Graphisme scientifique sur ordinateur\fg\ de Raymond {\sc Dony}.
+\section{Le package}
+\texttt{mp-solid} contient les macros nécessaires pour les tracés
+demandés. Certaines macros ont été reprises de
+\texttt{geometriesyr16}\footnote{Package dédié à la
+ géométrie. Disponible à \url{melusine.eu.org/syracuse/poulecl/geometriesyr16/}.},
+de \texttt{donymodule}\footnote{Package complémentaire de
+ \texttt{geometriesyr16} pour la gestion des figures géométriques de
+ l'espace. Disponible en téléchargeant \texttt{geometriesyr16}.}. Je
+dois remercier également Anthony {\sc Phan} et son package
+\texttt{m3D}\footnote{Disponible à l'adresse \url{http://www-math.univ-poitiers.fr/~phan/m3Dplain.html}} pour m'avoir
+permis de clarifier certaines conventions dans les représentations
+spatiales\ldots
+\par \texttt{mp-solid} {\em semble} être moins gourmand en ressources
+\MP\ que \verb!mp-geo!\footnote{Package permettant le tracé de
+ représentations terrestres spatiales ou planes disponibles à
+ l'adresse \begin{center}
+\url{http://syracuse-dev.org/mpst-globe/browser/trunk/mp-geo}
+\end{center}
+}; cependant, pour
+certains exemples, le temps de compilation est assez
+long\footnote{Dans la mesure du possible, les temps de compilation
+ importants seront indiqués.}.
+\section{Généralités}
+\subsection{Le choix du point de vue}
+\begin{figure}[h]
+ \centering
+ \includegraphics{figures/choixvue1.pdf}
+ \caption{Position du point de vue.}
+\end{figure}
+Les coordonnées de l'objet, ici le cube violet, sont données sous
+forme de \texttt{color} dans le repère $Oxyz$. Les coordonnées du
+point de vue $V$, sont données dans ce même repère en coordonnées
+sphériques sous la forme
+\begin{center}
+ \macro{\texttt{Initialisation(5,30,20,50)}}
+\end{center}
+5 étant le rayon de la sphère de centre $(0,0,0)$, $\phi=30$\degres\ et
+$\theta=20$\degres.
+\\L'écran est placé perpendiculairement à la direction $\vecteur{OV}$,
+à une distance de $V$ égale à 50.
+\begin{Danger}
+ Le rayon de la sphère n'est, {\em mathématiquement}, pas
+ important. En effet, la projection choisie est une projection
+ perspective. Seuls importent $\phi$, $\theta$ et la distance à
+ l'écran.
+\par Par contre, il a un intérêt de précision dans les calculs de
+\MP; c'est pour cela que bien souvent une valeur de 500 voire de
+1\,000 sera choisie.
+\end{Danger}
+Les axes peuvent être représentés {\em en traits d'axes} par la macro
+\macro{\verb!TraceAxesD(xmax,ymax,zmax)!} : les axes $[Ox)$, $[Oy)$,
+$[Oz)$ seront représenté de l'origine respectivement jusqu'au point
+$(\verb!xmax!;0;0)$, $(0;\verb!ymax!;0)$, $(0;0;\verb!zmax!)$.
+\\Il existe une autre possibilité : \macro{\verb!TraceAxes!} qui trace
+les axes en traits d'axes colorés mais avec $\verb!xmax!=\verb!ymax!=\verb!zmax!=5$.
+\subsection{Les couleurs}
+Pour la représentation des solides, il y a deux façons de définir la
+coloration des faces :
+\begin{itemize}
+\item soit avec les paramètres de type \texttt{color} :
+ \param{\texttt{incolor}} (couleur intérieure) et
+ \param{\texttt{outcolor}} (couleur extérieure);
+\item soit avec les paramètres \param{\texttt{arcenciel}} (de type
+ \texttt{boolean}) et \texttt{incolor}.
+\end{itemize}
+\begin{figure}[h]
+ \centering
+ \subfigure[\texttt{outcolor} et
+ \texttt{incolor}]{\includegraphics[scale=0.6]{figures/couleurs1.pdf}}\hfill\subfigure[\texttt{arcenciel} et \texttt{incolor}]{\includegraphics[scale=0.6]{figures/couleurs2.pdf}}
+ \caption{Exemples d'utilisation de \texttt{incolor}, \texttt{outcolor} et \texttt{arcenciel}.}
+\end{figure}
+Pour colorer, on dispose des espaces de couleur suivants :
+\begin{itemize}
+ \item l'espace RGB (classique de \MP);
+ \item l'espace HSV.\par
+ \begin{figure}[h]
+ \centering
+ \includegraphics{figures/hsv1.pdf}
+ \caption{Une représentation de l'espace de couleurs HSV.}
+ \end{figure}
+ Ce dernier type n'étant pas implanté dans \MP, il
+ s'utilise de la façon suivante\footnote{Les formules de conversions
+ ont été obtenues à l'adresse \url{http://en.wikipedia.org/wiki/HSL_color_space}.}:
+ \begin{center}
+ \macro{\verb!Hsvtorgb(a,s,l)!}
+ \end{center}
+ où \param{\texttt{a}} est la teinte donnée sous la forme d'un angle compris
+ entre 0\degres\ et 360\degres, \param{\texttt{s}} la saturation
+ (entre 0 (non saturée) et 1 (saturée)), \param{\texttt{v}} la
+ valeur (qui peut se confondre avec la luminosité) (entre 0 et
+ 1). Par défaut, la saturation est égale à 0.45 et la luminosité à
+ 1. On peut les modifier à l'aide des paramètres numériques
+ \param{\texttt{satu}} et \param{\texttt{lum}}. Par exemple, on
+ peut obtenir les dégradés suivants :
+ \begin{figure}[ht]
+ \centering
+ \subfigure[degradé de rouge à vert dans l'espace
+ RGB]{\includegraphics[scale=0.5]{figures/grillergb1.pdf}}\hfill\subfigure[degradé de 0\degres\ à
+ 360\degres\ dans l'espace HSV (saturation et luminosité
+ maximale)]{\includegraphics[scale=0.5]{figures/grillehsv1.pdf}}
+ \hfill\subfigure[degradé de 0\degres\ à
+ 360\degres\ dans l'espace HSV (saturation à 0.5 et luminosité
+ maximale)]{\includegraphics[scale=0.5]{figures/grillehsv11.pdf}}
+ \caption{Dégradés dans les espaces de couleurs}
+ \end{figure}
+ \end{itemize}
+\subsection{Gestion des ombres}
+La lumière est gérée avec la méthode de {\sc Lambert}. Par défaut, la
+gestion de la lumière est active. On peut la désactiver grâce au
+booléen \param{\texttt{eclairage}}.\\Il n'y a pas de position par
+défaut de la lumière, {\em il ne faut donc pas oublier de la
+ positionner}.\\L'intensité lumineuse se règle avec le
+paramètre numérique \param{\texttt{intensite}}. Par défaut, elle est
+réglée à 2.
+\begin{figure}[h]
+ \centering
+ \subfigure[Sans
+ lumière]{\includegraphics[scale=0.7]{figures/noeud43.pdf}}\hfill\subfigure[Avec lumière]{\includegraphics[scale=0.7]{figures/noeud44.pdf}}
+ \caption{Utilisation ou non de la lumière}
+\end{figure}
+\par Voici trois exemples où la source lumineuse se déplace sur l'axe $z$ :
+$(0;0;0)$ puis $(0;0;3)$ et enfin $(0;0;10)$.
+\begin{figure}[ht]
+ \centering
+ \subfigure[Position 1]{\includegraphics[scale=0.35]{figures/source1.pdf}}\hfill\subfigure[Position 2]{\includegraphics[scale=0.35]{figures/source2.pdf}}\hfill\subfigure[Position 3]{\includegraphics[scale=0.35]{figures/source3.pdf}}
+ \caption{Diverses positions de la source lumineuse}
+\end{figure}
\ No newline at end of file
--- /dev/null
+\documentclass[12pt]{book}
+
+%by JCC +CP pour le lien lors d'une compilation avec pdflatex :)
+\makeatletter
+\newenvironment{figurefixe}{%
+\begingroup
+\parskip=0pt
+% rôle de \caption
+\def\caption##1{\refstepcounter{figure}
+ \protected@write\@auxout{}%
+ {\string\@writefile{lof}{\string\contentsline%
+ {figure}{\string\numberline {\thefigure}{\ignorespaces%
+##1}}{\thepage}{figure.\thefigure}}}%
+ \par\bigskip
+ \hbox to \hsize{\hss \figurename~\thefigure\CaptionSeparator
+##1\hss}}%
+ \par\bigskip
+% rôle de \label
+\def\label##1{\protected@write\@auxout{}%
+ {\string\newlabel {##1}{{\thefigure}{\thepage}}}}%
+% préparation contenu
+\par\vspace{-6pt}\hbox\bgroup\vbox\bgroup}{\egroup\egroup\par\null\endgroup}
+\makeatother
+%endJCC
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[frenchb]{babel}
+\parindent0pt
+\usepackage[a4paper,margin=1.25cm,includeheadfoot]{geometry}
+\usepackage{graphicx}
+\usepackage{fourier}
+\usepackage[scaled=0.875]{helvet}
+\usepackage{mflogo}
+\usepackage[colorlinks=true]{hyperref}
+\usepackage{url,calc,subfigure,tabularx,amsmath,multicol}
+\usepackage{listings}
+\lstset{language=metapost,breaklines=true,numbers=left,numberfirstline=true,stepnumber=5,numbersep=1pt,numberstyle=\tiny,firstnumber=1,basicstyle=\footnotesize,commentstyle=\itshape\color{red}}%numéroter les listings
+
+\newcommand{\macro}[1]{%
+\colorbox{yellow}{#1}%
+}
+
+\newcommand{\param}[1]{%
+\colorbox{cyan}{#1}%
+}
+
+\usepackage{tikz}
+\usetikzlibrary{shapes}
+\usetikzlibrary{topaths}
+\newsavebox{\dangerbox}
+\newlength{\marge}\setlength{\marge}{7.5mm}
+
+\newenvironment{Danger}{%
+ \begin{lrbox}{\dangerbox}
+ \begin{minipage}{\linewidth-\marge}
+}
+{%
+\end{minipage}%
+ \end{lrbox}
+\tikzstyle{mybox} = [draw=blue!20, fill=red!20, very thick,
+ rectangle, rounded corners, inner sep=10pt]
+\par\noindent
+\begin{tikzpicture}
+\node [mybox] (box) {%
+ \begin{minipage}[t!]{\linewidth-\marge}
+ \usebox{\dangerbox}
+ \end{minipage}
+ };
+\end{tikzpicture}
+\par
+}
+
+\newcommand\abstractname{Résumé}
+
+\makeatletter
+ \newenvironment{abstract}{%
+ %\titlepage
+ \null\vfil
+ \@beginparpenalty\@lowpenalty
+ \begin{center}%
+ \bfseries \abstractname
+ \@endparpenalty\@M
+ \end{center}}%
+ {\par\vfil\null}%\endtitlepage}
+\makeatother
+
+\input{christ5}
+\title{\texttt{mp-solid}\[\includegraphics[scale=0.8]{figures/npresentation1.pdf}\]}
+\author{Christophe Poulain}
+\date{Version 1 -- \today%\par
+\begin{abstract}
+Package permettant de construire des solides, des courbes de
+ l'espace avec de nombreux apports dus à
+ \texttt{pst-solides3d}.\footnote{Remercions de suite Jean-Paul {\sc
+ Vignault} et Manuel {\sc Luque} pour ce magnifique (et le mot
+ est {\em faible}) package \texttt{pstricks}.}
+\end{abstract}
+}
+
+\begin{document}
+\maketitle
+\tableofcontents
+\input{Presentation}
+\input{Dessinons}
+\input{Fusion}
+\input{Hommage}
+\input{Historique}
+\listoffigures
+\end{document}
\ No newline at end of file
--- /dev/null
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: -114 -114 114 114
+%%HiResBoundingBox: -113.3858 -113.3858 113.3858 113.3858
+%%Creator: MetaPost 1.208
+%%CreationDate: 2011.01.25:2231
+%%Pages: 1
+%%DocumentResources: procset mpost-minimal
+%%DocumentSuppliedResources: procset mpost-minimal
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset mpost-minimal
+/bd{bind def}bind def/fshow {exch findfont exch scalefont setfont show}bd
+/fcp{findfont dup length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall}bd
+/fmc{FontMatrix dup length array copy dup dup}bd/fmd{/FontMatrix exch def}bd
+/Amul{4 -1 roll exch mul 1000 div}bd/ExtendFont{fmc 0 get Amul 0 exch put fmd}bd
+/ScaleFont{dup fmc 0 get Amul 0 exch put dup dup 3 get Amul 3 exch put fmd}bd
+/SlantFont{fmc 2 get dup 0 eq{pop 1}if Amul FontMatrix 0 get mul 2 exch put fmd}bd
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+gsave newpath -113.3858 -113.3858 moveto
+-113.3858 113.3858 lineto
+113.3858 113.3858 lineto
+113.3858 -113.3858 lineto
+ closepath clip
+ 0 0 0 setrgbcolor
+newpath -113.3858 -113.3858 moveto
+-113.3858 113.3858 lineto
+113.3858 113.3858 lineto
+113.3858 -113.3858 lineto
+ closepath fill
+ 0.00153 0.00153 0 setrgbcolor
+newpath 26.36185 -41.70647 moveto
+21.65222 -44.81277 lineto
+25.00076 -42.6426 lineto
+30.439 -39.06403 lineto
+ closepath fill
+ 0 0 0 setrgbcolor 0 0.25 dtransform truncate idtransform setlinewidth pop
+ [] 0 setdash 1 setlinejoin 10 setmiterlimit
+newpath 26.36185 -41.70647 moveto
+21.65222 -44.81277 lineto
+25.00076 -42.6426 lineto
+30.439 -39.06403 lineto
+ closepath stroke
+ 0.00156 0.00156 0 setrgbcolor
+newpath -30.43861 -39.06403 moveto
+-25.00038 -42.6426 lineto
+-21.65108 -44.81316 lineto
+-26.3607 -41.70685 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -30.43861 -39.06403 moveto
+-25.00038 -42.6426 lineto
+-21.65108 -44.81316 lineto
+-26.3607 -41.70685 lineto
+ closepath stroke
+ 0.04031 0.04031 0 setrgbcolor
+newpath 0.00076 -49.80965 moveto
+0 -49.95193 lineto
+3.26309 -49.79973 lineto
+6.47125 -49.50829 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00076 -49.80965 moveto
+0 -49.95193 lineto
+3.26309 -49.79973 lineto
+6.47125 -49.50829 lineto
+ closepath stroke
+ 0.04117 0.04117 0 setrgbcolor
+newpath -6.46973 -49.50829 moveto
+-3.26309 -49.80011 lineto
+0 -49.95193 lineto
+0.00076 -49.80965 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -6.46973 -49.50829 moveto
+-3.26309 -49.80011 lineto
+0 -49.95193 lineto
+0.00076 -49.80965 lineto
+ closepath stroke
+ 0.08295 0.08295 0 setrgbcolor
+newpath 30.6202 -37.88643 moveto
+26.36185 -41.70647 lineto
+30.439 -39.06403 lineto
+35.35614 -34.81712 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 30.6202 -37.88643 moveto
+26.36185 -41.70647 lineto
+30.439 -39.06403 lineto
+35.35614 -34.81712 lineto
+ closepath stroke
+ 0.08313 0.08313 0 setrgbcolor
+newpath -35.35652 -34.81712 moveto
+-30.43861 -39.06403 lineto
+-26.3607 -41.70685 lineto
+-30.61867 -37.88681 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -35.35652 -34.81712 moveto
+-30.43861 -39.06403 lineto
+-26.3607 -41.70685 lineto
+-30.61867 -37.88681 lineto
+ closepath stroke
+ 0.05692 0.05692 0 setrgbcolor
+newpath 5.64651 49.38545 moveto
+11.20262 48.68698 lineto
+6.46706 49.50905 lineto
+3.25928 49.79973 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 5.64651 49.38545 moveto
+11.20262 48.68698 lineto
+6.46706 49.50905 lineto
+3.25928 49.79973 lineto
+ closepath stroke
+ 0.05704 0.05704 0 setrgbcolor
+newpath -3.26042 49.79973 moveto
+-6.46896 49.50905 lineto
+-11.20338 48.6866 lineto
+-5.6469 49.38545 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -3.26042 49.79973 moveto
+-6.46896 49.50905 lineto
+-11.20338 48.6866 lineto
+-5.6469 49.38545 lineto
+ closepath stroke
+ 0.07532 0.07532 0 setrgbcolor
+newpath 19.12918 45.49446 moveto
+24.99542 42.64565 lineto
+21.6465 44.81621 lineto
+16.5657 47.155 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 19.12918 45.49446 moveto
+24.99542 42.64565 lineto
+21.6465 44.81621 lineto
+16.5657 47.155 lineto
+ closepath stroke
+ 0.07504 0.07504 0 setrgbcolor
+newpath -16.56647 47.155 moveto
+-21.64688 44.81583 lineto
+-24.99504 42.64565 lineto
+-19.12956 45.49408 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -16.56647 47.155 moveto
+-21.64688 44.81583 lineto
+-24.99504 42.64565 lineto
+-19.12956 45.49408 lineto
+ closepath stroke
+ 0.13162 0.13162 0 setrgbcolor
+newpath 9.56764 -48.36922 moveto
+6.47125 -49.50829 lineto
+11.20758 -48.68584 lineto
+16.57143 -47.15309 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 9.56764 -48.36922 moveto
+6.47125 -49.50829 lineto
+11.20758 -48.68584 lineto
+16.57143 -47.15309 lineto
+ closepath stroke
+ 0.13147 0.13147 0 setrgbcolor
+newpath -16.57104 -47.15271 moveto
+-11.20758 -48.68584 lineto
+-6.46973 -49.50829 lineto
+-9.5665 -48.36922 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -16.57104 -47.15271 moveto
+-11.20758 -48.68584 lineto
+-6.46973 -49.50829 lineto
+-9.5665 -48.36922 lineto
+ closepath stroke
+ 0.16183 0.16183 0 setrgbcolor
+newpath 34.35516 -33.4179 moveto
+30.6202 -37.88643 lineto
+35.35614 -34.81712 lineto
+39.66942 -29.9736 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 34.35516 -33.4179 moveto
+30.6202 -37.88643 lineto
+35.35614 -34.81712 lineto
+39.66942 -29.9736 lineto
+ closepath stroke
+ 0.16223 0.16223 0 setrgbcolor
+newpath -39.66866 -29.97398 moveto
+-35.35652 -34.81712 lineto
+-30.61867 -37.88681 lineto
+-34.35402 -33.41827 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -39.66866 -29.97398 moveto
+-35.35652 -34.81712 lineto
+-30.61867 -37.88681 lineto
+-34.35402 -33.41827 lineto
+ closepath stroke
+ 0.15594 0.15594 0 setrgbcolor
+newpath 12.93564 47.56393 moveto
+19.12918 45.49446 lineto
+16.5657 47.155 lineto
+11.20262 48.68698 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 12.93564 47.56393 moveto
+19.12918 45.49446 lineto
+16.5657 47.155 lineto
+11.20262 48.68698 lineto
+ closepath stroke
+ 0.15604 0.15604 0 setrgbcolor
+newpath -11.20262 48.68698 moveto
+-16.56647 47.155 lineto
+-19.12956 45.49408 lineto
+-12.93564 47.56393 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -11.20262 48.68698 moveto
+-16.56647 47.155 lineto
+-19.12956 45.49408 lineto
+-12.93564 47.56393 lineto
+ closepath stroke
+ 0.2373 0.2373 0 setrgbcolor
+newpath 37.5019 -28.37791 moveto
+34.35516 -33.4179 lineto
+39.66942 -29.9736 lineto
+43.30177 -24.61815 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 37.5019 -28.37791 moveto
+34.35516 -33.4179 lineto
+39.66942 -29.9736 lineto
+43.30177 -24.61815 lineto
+ closepath stroke
+ 0.2373 0.2373 0 setrgbcolor
+newpath -43.30177 -24.61853 moveto
+-39.66866 -29.97398 lineto
+-34.35402 -33.41827 lineto
+-37.50038 -28.37791 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -43.30177 -24.61853 moveto
+-39.66866 -29.97398 lineto
+-34.35402 -33.41827 lineto
+-37.50038 -28.37791 lineto
+ closepath stroke
+ 0.21637 0.21637 0 setrgbcolor
+newpath -0.00305 49.23935 moveto
+3.25928 49.79973 lineto
+-0.00076 49.95155 lineto
+0 49.23897 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -0.00305 49.23935 moveto
+3.25928 49.79973 lineto
+-0.00076 49.95155 lineto
+0 49.23897 lineto
+ closepath stroke
+ 0.21387 0.21387 0 setrgbcolor
+newpath 0 49.23897 moveto
+-0.00076 49.95155 lineto
+-3.26042 49.79973 lineto
+0.00305 49.23935 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0 49.23897 moveto
+-0.00076 49.95155 lineto
+-3.26042 49.79973 lineto
+0.00305 49.23935 lineto
+ closepath stroke
+ 0.23483 0.23483 0 setrgbcolor
+newpath 6.52008 48.81935 moveto
+12.93564 47.56393 lineto
+11.20262 48.68698 lineto
+5.64651 49.38545 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 6.52008 48.81935 moveto
+12.93564 47.56393 lineto
+11.20262 48.68698 lineto
+5.64651 49.38545 lineto
+ closepath stroke
+ 0.23422 0.23422 0 setrgbcolor
+newpath -5.64651 49.38545 moveto
+-11.20262 48.68698 lineto
+-12.93564 47.56393 lineto
+-6.52008 48.81935 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -5.64651 49.38545 moveto
+-11.20262 48.68698 lineto
+-12.93564 47.56393 lineto
+-6.52008 48.81935 lineto
+ closepath stroke
+ 0.24875 0.24875 0 setrgbcolor
+newpath -0.00534 49.23973 moveto
+5.64651 49.38545 lineto
+3.25928 49.79973 lineto
+-0.00305 49.23935 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -0.00534 49.23973 moveto
+5.64651 49.38545 lineto
+3.25928 49.79973 lineto
+-0.00305 49.23935 lineto
+ closepath stroke
+ 0.24835 0.24835 0 setrgbcolor
+newpath 0.00305 49.23935 moveto
+-3.26042 49.79973 lineto
+-5.6469 49.38545 lineto
+0.00534 49.23973 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00305 49.23935 moveto
+-3.26042 49.79973 lineto
+-5.6469 49.38545 lineto
+0.00534 49.23973 lineto
+ closepath stroke
+ 0.30045 0.30045 0 setrgbcolor
+newpath 0.00076 -48.81439 moveto
+0.00076 -49.80965 lineto
+6.47125 -49.50829 lineto
+9.56764 -48.36922 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00076 -48.81439 moveto
+0.00076 -49.80965 lineto
+6.47125 -49.50829 lineto
+9.56764 -48.36922 lineto
+ closepath stroke
+ 0.30063 0.30063 0 setrgbcolor
+newpath -9.5665 -48.36922 moveto
+-6.46973 -49.50829 lineto
+0.00076 -49.80965 lineto
+0.00076 -48.81439 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -9.5665 -48.36922 moveto
+-6.46973 -49.50829 lineto
+0.00076 -49.80965 lineto
+0.00076 -48.81439 lineto
+ closepath stroke
+ 0.32169 0.32169 0 setrgbcolor
+newpath 12.50114 -46.40198 moveto
+9.56764 -48.36922 lineto
+16.57143 -47.15309 lineto
+21.65222 -44.81277 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 12.50114 -46.40198 moveto
+9.56764 -48.36922 lineto
+16.57143 -47.15309 lineto
+21.65222 -44.81277 lineto
+ closepath stroke
+ 0.32098 0.32098 0 setrgbcolor
+newpath -21.65108 -44.81316 moveto
+-16.57104 -47.15271 lineto
+-9.5665 -48.36922 lineto
+-12.49962 -46.40198 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -21.65108 -44.81316 moveto
+-16.57104 -47.15271 lineto
+-9.5665 -48.36922 lineto
+-12.49962 -46.40198 lineto
+ closepath stroke
+ 0.30838 0.30838 0 setrgbcolor
+newpath 40.00702 -22.85194 moveto
+37.5019 -28.37791 lineto
+43.30177 -24.61815 lineto
+46.19446 -18.84117 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 40.00702 -22.85194 moveto
+37.5019 -28.37791 lineto
+43.30177 -24.61815 lineto
+46.19446 -18.84117 lineto
+ closepath stroke
+ 0.3085 0.3085 0 setrgbcolor
+newpath -46.19408 -18.84155 moveto
+-43.30177 -24.61853 lineto
+-37.50038 -28.37791 lineto
+-40.00511 -22.85194 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -46.19408 -18.84155 moveto
+-43.30177 -24.61853 lineto
+-37.50038 -28.37791 lineto
+-40.00511 -22.85194 lineto
+ closepath stroke
+ 0.3092 0.3092 0 setrgbcolor
+newpath -0.0061 49.24011 moveto
+6.52008 48.81935 lineto
+5.64651 49.38545 lineto
+-0.00534 49.23973 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -0.0061 49.24011 moveto
+6.52008 48.81935 lineto
+5.64651 49.38545 lineto
+-0.00534 49.23973 lineto
+ closepath stroke
+ 0.31107 0.31107 0 setrgbcolor
+newpath 0.00534 49.23973 moveto
+-5.64651 49.38545 lineto
+-6.52008 48.81935 lineto
+0.0061 49.24011 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00534 49.23973 moveto
+-5.64651 49.38545 lineto
+-6.52008 48.81935 lineto
+0.0061 49.24011 lineto
+ closepath stroke
+ 0.37375 0.37375 0 setrgbcolor
+newpath 41.82777 -16.93497 moveto
+40.00702 -22.85194 lineto
+46.19446 -18.84117 lineto
+48.29712 -12.74185 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 41.82777 -16.93497 moveto
+40.00702 -22.85194 lineto
+46.19446 -18.84117 lineto
+48.29712 -12.74185 lineto
+ closepath stroke
+ 0.37363 0.37363 0 setrgbcolor
+newpath -48.29712 -12.74223 moveto
+-46.19408 -18.84155 lineto
+-40.00511 -22.85194 lineto
+-41.82587 -16.93535 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -48.29712 -12.74223 moveto
+-46.19408 -18.84155 lineto
+-40.00511 -22.85194 lineto
+-41.82587 -16.93535 lineto
+ closepath stroke
+ 0.37708 0.37708 0 setrgbcolor
+newpath -0.00534 49.2405 moveto
+5.64651 48.25325 lineto
+6.52008 48.81935 lineto
+-0.0061 49.24011 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -0.00534 49.2405 moveto
+5.64651 48.25325 lineto
+6.52008 48.81935 lineto
+-0.0061 49.24011 lineto
+ closepath stroke
+ 0.379 0.379 0 setrgbcolor
+newpath 0.0061 49.24011 moveto
+-6.52008 48.81935 lineto
+-5.64651 48.25325 lineto
+0.00534 49.2405 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.0061 49.24011 moveto
+-6.52008 48.81935 lineto
+-5.64651 48.25325 lineto
+0.00534 49.2405 lineto
+ closepath stroke
+ 0.43259 0.43259 0 setrgbcolor
+newpath 42.93251 -10.72845 moveto
+41.82777 -16.93497 lineto
+48.29712 -12.74185 lineto
+49.57275 -6.42433 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 42.93251 -10.72845 moveto
+41.82777 -16.93497 lineto
+48.29712 -12.74185 lineto
+49.57275 -6.42433 lineto
+ closepath stroke
+ 0.43262 0.43262 0 setrgbcolor
+newpath -49.57275 -6.42471 moveto
+-48.29712 -12.74223 lineto
+-41.82587 -16.93535 lineto
+-42.9306 -10.72884 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -49.57275 -6.42471 moveto
+-48.29712 -12.74223 lineto
+-41.82587 -16.93535 lineto
+-42.9306 -10.72884 lineto
+ closepath stroke
+ 0.44 0.44 0 setrgbcolor
+newpath -0.00305 49.24088 moveto
+3.26004 47.83897 lineto
+5.64651 48.25325 lineto
+-0.00534 49.2405 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -0.00305 49.24088 moveto
+3.26004 47.83897 lineto
+5.64651 48.25325 lineto
+-0.00534 49.2405 lineto
+ closepath stroke
+ 0.4396 0.4396 0 setrgbcolor
+newpath 0.00534 49.2405 moveto
+-5.64651 48.25325 lineto
+-3.26004 47.83897 lineto
+0.00305 49.24088 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00534 49.2405 moveto
+-5.64651 48.25325 lineto
+-3.26004 47.83897 lineto
+0.00305 49.24088 lineto
+ closepath stroke
+ 0.44107 0.44107 0 setrgbcolor
+newpath 5.64651 48.25325 moveto
+11.203 46.44089 lineto
+12.93564 47.56393 lineto
+6.52008 48.81935 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 5.64651 48.25325 moveto
+11.203 46.44089 lineto
+12.93564 47.56393 lineto
+6.52008 48.81935 lineto
+ closepath stroke
+ 0.44043 0.44043 0 setrgbcolor
+newpath -6.52008 48.81935 moveto
+-12.93564 47.56393 lineto
+-11.20262 46.44089 lineto
+-5.64651 48.25325 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -6.52008 48.81935 moveto
+-12.93564 47.56393 lineto
+-11.20262 46.44089 lineto
+-5.64651 48.25325 lineto
+ closepath stroke
+ 0.50397 0.50397 0 setrgbcolor
+newpath 15.22102 -43.64128 moveto
+12.50114 -46.40198 lineto
+21.65222 -44.81277 lineto
+26.36185 -41.70647 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 15.22102 -43.64128 moveto
+12.50114 -46.40198 lineto
+21.65222 -44.81277 lineto
+26.36185 -41.70647 lineto
+ closepath stroke
+ 0.50418 0.50418 0 setrgbcolor
+newpath -26.3607 -41.70685 moveto
+-21.65108 -44.81316 lineto
+-12.49962 -46.40198 lineto
+-15.21873 -43.64128 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -26.3607 -41.70685 moveto
+-21.65108 -44.81316 lineto
+-12.49962 -46.40198 lineto
+-15.21873 -43.64128 lineto
+ closepath stroke
+ 0.47186 0.47186 0 setrgbcolor
+newpath 0.00305 49.24088 moveto
+-3.26004 47.83897 lineto
+0 47.68715 lineto
+0 49.24126 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00305 49.24088 moveto
+-3.26004 47.83897 lineto
+0 47.68715 lineto
+0 49.24126 lineto
+ closepath stroke
+ 0.47437 0.47437 0 setrgbcolor
+newpath 0 49.24126 moveto
+0 47.68715 lineto
+3.26004 47.83897 lineto
+-0.00305 49.24088 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0 49.24126 moveto
+0 47.68715 lineto
+3.26004 47.83897 lineto
+-0.00305 49.24088 lineto
+ closepath stroke
+ 0.48428 0.48428 0 setrgbcolor
+newpath 43.30254 -4.33769 moveto
+42.93251 -10.72845 lineto
+49.57275 -6.42433 lineto
+50 0.00343 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.30254 -4.33769 moveto
+42.93251 -10.72845 lineto
+49.57275 -6.42433 lineto
+50 0.00343 lineto
+ closepath stroke
+ 0.4845 0.4845 0 setrgbcolor
+newpath -50 0.00305 moveto
+-49.57275 -6.42471 lineto
+-42.9306 -10.72884 lineto
+-43.30063 -4.33769 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -50 0.00305 moveto
+-49.57275 -6.42471 lineto
+-42.9306 -10.72884 lineto
+-43.30063 -4.33769 lineto
+ closepath stroke
+ 0.49417 0.49417 0 setrgbcolor
+newpath 11.203 46.44089 moveto
+16.56685 43.83316 lineto
+19.12918 45.49446 lineto
+12.93564 47.56393 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 11.203 46.44089 moveto
+16.56685 43.83316 lineto
+19.12918 45.49446 lineto
+12.93564 47.56393 lineto
+ closepath stroke
+ 0.4942 0.4942 0 setrgbcolor
+newpath -12.93564 47.56393 moveto
+-19.12956 45.49408 lineto
+-16.56609 43.83316 lineto
+-11.20262 46.44089 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -12.93564 47.56393 moveto
+-19.12956 45.49408 lineto
+-16.56609 43.83316 lineto
+-11.20262 46.44089 lineto
+ closepath stroke
+ 0.55325 0.55325 0 setrgbcolor
+newpath 0.00114 -46.98372 moveto
+0.00076 -48.81439 lineto
+9.56764 -48.36922 lineto
+12.50114 -46.40198 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00114 -46.98372 moveto
+0.00076 -48.81439 lineto
+9.56764 -48.36922 lineto
+12.50114 -46.40198 lineto
+ closepath stroke
+ 0.55347 0.55347 0 setrgbcolor
+newpath -12.49962 -46.40198 moveto
+-9.5665 -48.36922 lineto
+0.00076 -48.81439 lineto
+0.00114 -46.98372 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -12.49962 -46.40198 moveto
+-9.5665 -48.36922 lineto
+0.00076 -48.81439 lineto
+0.00114 -46.98372 lineto
+ closepath stroke
+ 0.5282 0.5282 0 setrgbcolor
+newpath 42.93175 2.12631 moveto
+43.30254 -4.33769 lineto
+50 0.00343 lineto
+49.57161 6.43005 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 42.93175 2.12631 moveto
+43.30254 -4.33769 lineto
+50 0.00343 lineto
+49.57161 6.43005 lineto
+ closepath stroke
+ 0.52829 0.52829 0 setrgbcolor
+newpath -49.57161 6.43005 moveto
+-50 0.00305 lineto
+-43.30063 -4.33769 lineto
+-42.93022 2.12631 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -49.57161 6.43005 moveto
+-50 0.00305 lineto
+-43.30063 -4.33769 lineto
+-42.93022 2.12631 lineto
+ closepath stroke
+ 0.53864 0.53864 0 setrgbcolor
+newpath 16.56685 43.83316 moveto
+21.64726 40.47546 lineto
+24.99542 42.64565 lineto
+19.12918 45.49446 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 16.56685 43.83316 moveto
+21.64726 40.47546 lineto
+24.99542 42.64565 lineto
+19.12918 45.49446 lineto
+ closepath stroke
+ 0.53839 0.53839 0 setrgbcolor
+newpath -19.12956 45.49408 moveto
+-24.99504 42.64565 lineto
+-21.64688 40.47546 lineto
+-16.56609 43.83316 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -19.12956 45.49408 moveto
+-24.99504 42.64565 lineto
+-21.64688 40.47546 lineto
+-16.56609 43.83316 lineto
+ closepath stroke
+ 0.56384 0.56384 0 setrgbcolor
+newpath 41.82663 8.55522 moveto
+42.93175 2.12631 lineto
+49.57161 6.43005 lineto
+48.2956 12.74834 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 41.82663 8.55522 moveto
+42.93175 2.12631 lineto
+49.57161 6.43005 lineto
+48.2956 12.74834 lineto
+ closepath stroke
+ 0.56363 0.56363 0 setrgbcolor
+newpath -48.29521 12.74796 moveto
+-49.57161 6.43005 lineto
+-42.93022 2.12631 lineto
+-41.82472 8.55522 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -48.29521 12.74796 moveto
+-49.57161 6.43005 lineto
+-42.93022 2.12631 lineto
+-41.82472 8.55522 lineto
+ closepath stroke
+ 0.57297 0.57297 0 setrgbcolor
+newpath 21.64726 40.47546 moveto
+26.35765 36.42578 lineto
+30.43404 39.06784 lineto
+24.99542 42.64565 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 21.64726 40.47546 moveto
+26.35765 36.42578 lineto
+30.43404 39.06784 lineto
+24.99542 42.64565 lineto
+ closepath stroke
+ 0.57346 0.57346 0 setrgbcolor
+newpath -24.99504 42.64565 moveto
+-30.43442 39.06784 lineto
+-26.35689 36.4254 lineto
+-21.64688 40.47546 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -24.99504 42.64565 moveto
+-30.43442 39.06784 lineto
+-26.35689 36.4254 lineto
+-21.64688 40.47546 lineto
+ closepath stroke
+ 0.5904 0.5904 0 setrgbcolor
+newpath 40.00473 14.83688 moveto
+41.82663 8.55522 lineto
+48.2956 12.74834 lineto
+46.19217 18.8469 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 40.00473 14.83688 moveto
+41.82663 8.55522 lineto
+48.2956 12.74834 lineto
+46.19217 18.8469 lineto
+ closepath stroke
+ 0.59045 0.59045 0 setrgbcolor
+newpath -46.19217 18.8469 moveto
+-48.29521 12.74796 lineto
+-41.82472 8.55522 lineto
+-40.00359 14.8365 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -46.19217 18.8469 moveto
+-48.29521 12.74796 lineto
+-41.82472 8.55522 lineto
+-40.00359 14.8365 lineto
+ closepath stroke
+ 0.59747 0.59747 0 setrgbcolor
+newpath 26.35765 36.42578 moveto
+30.61676 31.75201 lineto
+35.3527 34.82132 lineto
+30.43404 39.06784 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 26.35765 36.42578 moveto
+30.61676 31.75201 lineto
+35.3527 34.82132 lineto
+30.43404 39.06784 lineto
+ closepath stroke
+ 0.59735 0.59735 0 setrgbcolor
+newpath -30.43442 39.06784 moveto
+-35.35194 34.82094 lineto
+-30.61562 31.75163 lineto
+-26.35689 36.4254 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -30.43442 39.06784 moveto
+-35.35194 34.82094 lineto
+-30.61562 31.75163 lineto
+-26.35689 36.4254 lineto
+ closepath stroke
+ 0.60709 0.60709 0 setrgbcolor
+newpath 37.49924 20.86487 moveto
+40.00473 14.83688 lineto
+46.19217 18.8469 lineto
+43.2991 24.62425 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 37.49924 20.86487 moveto
+40.00473 14.83688 lineto
+46.19217 18.8469 lineto
+43.2991 24.62425 lineto
+ closepath stroke
+ 0.60721 0.60721 0 setrgbcolor
+newpath -43.2991 24.62387 moveto
+-46.19217 18.8469 lineto
+-40.00359 14.8365 lineto
+-37.4981 20.86449 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -43.2991 24.62387 moveto
+-46.19217 18.8469 lineto
+-40.00359 14.8365 lineto
+-37.4981 20.86449 lineto
+ closepath stroke
+ 0.61081 0.61081 0 setrgbcolor
+newpath 30.61676 31.75201 moveto
+34.35211 26.53503 lineto
+39.66484 29.97894 lineto
+35.3527 34.82132 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 30.61676 31.75201 moveto
+34.35211 26.53503 lineto
+39.66484 29.97894 lineto
+35.3527 34.82132 lineto
+ closepath stroke
+ 0.61093 0.61093 0 setrgbcolor
+newpath -35.35194 34.82094 moveto
+-39.66522 29.97856 lineto
+-34.35059 26.53503 lineto
+-30.61562 31.75163 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -35.35194 34.82094 moveto
+-39.66522 29.97856 lineto
+-34.35059 26.53503 lineto
+-30.61562 31.75163 lineto
+ closepath stroke
+ 0.61438 0.61438 0 setrgbcolor
+newpath 34.35211 26.53503 moveto
+37.49924 20.86487 lineto
+43.2991 24.62425 lineto
+39.66484 29.97894 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 34.35211 26.53503 moveto
+37.49924 20.86487 lineto
+43.2991 24.62425 lineto
+39.66484 29.97894 lineto
+ closepath stroke
+ 0.6145 0.6145 0 setrgbcolor
+newpath -39.66522 29.97856 moveto
+-43.2991 24.62387 lineto
+-37.4981 20.86449 lineto
+-34.35059 26.53503 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -39.66522 29.97856 moveto
+-43.2991 24.62387 lineto
+-37.4981 20.86449 lineto
+-34.35059 26.53503 lineto
+ closepath stroke
+ 0.61835 0.61835 0 setrgbcolor
+newpath 3.26004 47.83897 moveto
+6.46858 45.61882 lineto
+11.203 46.44089 lineto
+5.64651 48.25325 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 3.26004 47.83897 moveto
+6.46858 45.61882 lineto
+11.203 46.44089 lineto
+5.64651 48.25325 lineto
+ closepath stroke
+ 0.61847 0.61847 0 setrgbcolor
+newpath -5.64651 48.25325 moveto
+-11.20262 46.44089 lineto
+-6.46706 45.61882 lineto
+-3.26004 47.83897 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -5.64651 48.25325 moveto
+-11.20262 46.44089 lineto
+-6.46706 45.61882 lineto
+-3.26004 47.83897 lineto
+ closepath stroke
+ 0.67654 0.67654 0 setrgbcolor
+newpath 17.67883 -40.13367 moveto
+15.22102 -43.64128 lineto
+26.36185 -41.70647 lineto
+30.6202 -37.88643 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 17.67883 -40.13367 moveto
+15.22102 -43.64128 lineto
+26.36185 -41.70647 lineto
+30.6202 -37.88643 lineto
+ closepath stroke
+ 0.67679 0.67679 0 setrgbcolor
+newpath -30.61867 -37.88681 moveto
+-26.3607 -41.70685 lineto
+-15.21873 -43.64128 lineto
+-17.6773 -40.13367 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -30.61867 -37.88681 moveto
+-26.3607 -41.70685 lineto
+-15.21873 -43.64128 lineto
+-17.6773 -40.13367 lineto
+ closepath stroke
+ 0.72137 0.72137 0 setrgbcolor
+newpath 0 47.68715 moveto
+0.00038 45.31784 lineto
+6.46858 45.61882 lineto
+3.26004 47.83897 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0 47.68715 moveto
+0.00038 45.31784 lineto
+6.46858 45.61882 lineto
+3.26004 47.83897 lineto
+ closepath stroke
+ 0.7222 0.7222 0 setrgbcolor
+newpath -3.26004 47.83897 moveto
+-6.46706 45.61882 lineto
+0.00038 45.31784 lineto
+0 47.68715 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -3.26004 47.83897 moveto
+-6.46706 45.61882 lineto
+0.00038 45.31784 lineto
+0 47.68715 lineto
+ closepath stroke
+ 0.79416 0.79416 0 setrgbcolor
+newpath 0.00153 -44.34929 moveto
+0.00114 -46.98372 lineto
+12.50114 -46.40198 lineto
+15.22102 -43.64128 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00153 -44.34929 moveto
+0.00114 -46.98372 lineto
+12.50114 -46.40198 lineto
+15.22102 -43.64128 lineto
+ closepath stroke
+ 0.79468 0.79468 0 setrgbcolor
+newpath -15.21873 -43.64128 moveto
+-12.49962 -46.40198 lineto
+0.00114 -46.98372 lineto
+0.00153 -44.34929 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -15.21873 -43.64128 moveto
+-12.49962 -46.40198 lineto
+0.00114 -46.98372 lineto
+0.00153 -44.34929 lineto
+ closepath stroke
+ 0.78708 0.78708 0 setrgbcolor
+newpath 6.46858 45.61882 moveto
+9.56497 42.61742 lineto
+16.56685 43.83316 lineto
+11.203 46.44089 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 6.46858 45.61882 moveto
+9.56497 42.61742 lineto
+16.56685 43.83316 lineto
+11.203 46.44089 lineto
+ closepath stroke
+ 0.78671 0.78671 0 setrgbcolor
+newpath -11.20262 46.44089 moveto
+-16.56609 43.83316 lineto
+-9.56383 42.61742 lineto
+-6.46706 45.61882 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -11.20262 46.44089 moveto
+-16.56609 43.83316 lineto
+-9.56383 42.61742 lineto
+-6.46706 45.61882 lineto
+ closepath stroke
+ 0.83572 0.83572 0 setrgbcolor
+newpath 19.83566 -35.93903 moveto
+17.67883 -40.13367 lineto
+30.6202 -37.88643 lineto
+34.35516 -33.4179 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 19.83566 -35.93903 moveto
+17.67883 -40.13367 lineto
+30.6202 -37.88643 lineto
+34.35516 -33.4179 lineto
+ closepath stroke
+ 0.83594 0.83594 0 setrgbcolor
+newpath -34.35402 -33.41827 moveto
+-30.61867 -37.88681 lineto
+-17.6773 -40.13367 lineto
+-19.83337 -35.9394 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -34.35402 -33.41827 moveto
+-30.61867 -37.88681 lineto
+-17.6773 -40.13367 lineto
+-19.83337 -35.9394 lineto
+ closepath stroke
+ 0.94049 0.94049 0 setrgbcolor
+newpath 9.56497 42.61742 moveto
+12.49847 38.88702 lineto
+21.64726 40.47546 lineto
+16.56685 43.83316 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 9.56497 42.61742 moveto
+12.49847 38.88702 lineto
+21.64726 40.47546 lineto
+16.56685 43.83316 lineto
+ closepath stroke
+ 0.94067 0.94067 0 setrgbcolor
+newpath -16.56609 43.83316 moveto
+-21.64688 40.47546 lineto
+-12.49695 38.88702 lineto
+-9.56383 42.61742 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -16.56609 43.83316 moveto
+-21.64688 40.47546 lineto
+-12.49695 38.88702 lineto
+-9.56383 42.61742 lineto
+ closepath stroke
+ 0.95654 0.95654 0 setrgbcolor
+newpath 0.00038 45.31784 moveto
+0.00038 42.17224 lineto
+9.56497 42.61742 lineto
+6.46858 45.61882 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00038 45.31784 moveto
+0.00038 42.17224 lineto
+9.56497 42.61742 lineto
+6.46858 45.61882 lineto
+ closepath stroke
+ 0.9567 0.9567 0 setrgbcolor
+newpath -6.46706 45.61882 moveto
+-9.56383 42.61742 lineto
+0.00038 42.17224 lineto
+0.00038 45.31784 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -6.46706 45.61882 moveto
+-9.56383 42.61742 lineto
+0.00038 42.17224 lineto
+0.00038 45.31784 lineto
+ closepath stroke
+ 0.97983 0.97983 0 setrgbcolor
+newpath 21.65222 -31.12984 moveto
+19.83566 -35.93903 lineto
+34.35516 -33.4179 lineto
+37.5019 -28.37791 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 21.65222 -31.12984 moveto
+19.83566 -35.93903 lineto
+34.35516 -33.4179 lineto
+37.5019 -28.37791 lineto
+ closepath stroke
+ 0.9797 0.9797 0 setrgbcolor
+newpath -37.50038 -28.37791 moveto
+-34.35402 -33.41827 lineto
+-19.83337 -35.9394 lineto
+-21.64993 -31.13022 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -37.50038 -28.37791 moveto
+-34.35402 -33.41827 lineto
+-19.83337 -35.9394 lineto
+-21.64993 -31.13022 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00076 -40.9565 moveto
+0.00153 -44.34929 lineto
+15.22102 -43.64128 lineto
+17.67883 -40.13367 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00076 -40.9565 moveto
+0.00153 -44.34929 lineto
+15.22102 -43.64128 lineto
+17.67883 -40.13367 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -17.6773 -40.13367 moveto
+-15.21873 -43.64128 lineto
+0.00153 -44.34929 lineto
+0.00076 -40.9565 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -17.6773 -40.13367 moveto
+-15.21873 -43.64128 lineto
+0.00153 -44.34929 lineto
+0.00076 -40.9565 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 12.49847 38.88702 moveto
+15.21797 34.49135 lineto
+26.35765 36.42578 lineto
+21.64726 40.47546 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 12.49847 38.88702 moveto
+15.21797 34.49135 lineto
+26.35765 36.42578 lineto
+21.64726 40.47546 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -21.64688 40.47546 moveto
+-26.35689 36.4254 lineto
+-15.21645 34.49135 lineto
+-12.49695 38.88702 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -21.64688 40.47546 moveto
+-26.35689 36.4254 lineto
+-15.21645 34.49135 lineto
+-12.49695 38.88702 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 23.09875 -25.78773 moveto
+21.65222 -31.12984 lineto
+37.5019 -28.37791 lineto
+40.00702 -22.85194 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 23.09875 -25.78773 moveto
+21.65222 -31.12984 lineto
+37.5019 -28.37791 lineto
+40.00702 -22.85194 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -40.00511 -22.85194 moveto
+-37.50038 -28.37791 lineto
+-21.64993 -31.13022 lineto
+-23.09608 -25.78812 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -40.00511 -22.85194 moveto
+-37.50038 -28.37791 lineto
+-21.64993 -31.13022 lineto
+-23.09608 -25.78812 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00038 42.17224 moveto
+0.00114 38.30528 lineto
+12.49847 38.88702 lineto
+9.56497 42.61742 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00038 42.17224 moveto
+0.00114 38.30528 lineto
+12.49847 38.88702 lineto
+9.56497 42.61742 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -9.56383 42.61742 moveto
+-12.49695 38.88702 lineto
+0.00114 38.30528 lineto
+0.00038 42.17224 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -9.56383 42.61742 moveto
+-12.49695 38.88702 lineto
+0.00114 38.30528 lineto
+0.00038 42.17224 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 15.21797 34.49135 moveto
+17.6773 29.50516 lineto
+30.61676 31.75201 lineto
+26.35765 36.42578 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 15.21797 34.49135 moveto
+17.6773 29.50516 lineto
+30.61676 31.75201 lineto
+26.35765 36.42578 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -26.35689 36.4254 moveto
+-30.61562 31.75163 lineto
+-17.6754 29.50478 lineto
+-15.21645 34.49135 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -26.35689 36.4254 moveto
+-30.61562 31.75163 lineto
+-17.6754 29.50478 lineto
+-15.21645 34.49135 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00153 -36.86218 moveto
+0.00076 -40.9565 lineto
+17.67883 -40.13367 lineto
+19.83566 -35.93903 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00153 -36.86218 moveto
+0.00076 -40.9565 lineto
+17.67883 -40.13367 lineto
+19.83566 -35.93903 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -19.83337 -35.9394 moveto
+-17.6773 -40.13367 lineto
+0.00076 -40.9565 lineto
+0.00153 -36.86218 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -19.83337 -35.9394 moveto
+-17.6773 -40.13367 lineto
+0.00076 -40.9565 lineto
+0.00153 -36.86218 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 24.15009 -20.00504 moveto
+23.09875 -25.78773 lineto
+40.00702 -22.85194 lineto
+41.82777 -16.93497 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 24.15009 -20.00504 moveto
+23.09875 -25.78773 lineto
+40.00702 -22.85194 lineto
+41.82777 -16.93497 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -41.82587 -16.93535 moveto
+-40.00511 -22.85194 lineto
+-23.09608 -25.78812 lineto
+-24.14742 -20.00504 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -41.82587 -16.93535 moveto
+-40.00511 -22.85194 lineto
+-23.09608 -25.78812 lineto
+-24.14742 -20.00504 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 17.6773 29.50516 moveto
+19.83452 24.0139 lineto
+34.35211 26.53503 lineto
+30.61676 31.75201 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 17.6773 29.50516 moveto
+19.83452 24.0139 lineto
+34.35211 26.53503 lineto
+30.61676 31.75201 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -30.61562 31.75163 moveto
+-34.35059 26.53503 lineto
+-19.83147 24.0139 lineto
+-17.6754 29.50478 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -30.61562 31.75163 moveto
+-34.35059 26.53503 lineto
+-19.83147 24.0139 lineto
+-17.6754 29.50478 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 24.7879 -13.87901 moveto
+24.15009 -20.00504 lineto
+41.82777 -16.93497 lineto
+42.93251 -10.72845 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 24.7879 -13.87901 moveto
+24.15009 -20.00504 lineto
+41.82777 -16.93497 lineto
+42.93251 -10.72845 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -42.9306 -10.72884 moveto
+-41.82587 -16.93535 lineto
+-24.14742 -20.00504 lineto
+-24.78523 -13.8794 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -42.9306 -10.72884 moveto
+-41.82587 -16.93535 lineto
+-24.14742 -20.00504 lineto
+-24.78523 -13.8794 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00114 38.30528 moveto
+0.00114 33.78296 lineto
+15.21797 34.49135 lineto
+12.49847 38.88702 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00114 38.30528 moveto
+0.00114 33.78296 lineto
+15.21797 34.49135 lineto
+12.49847 38.88702 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -12.49695 38.88702 moveto
+-15.21645 34.49135 lineto
+0.00114 33.78296 lineto
+0.00114 38.30528 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -12.49695 38.88702 moveto
+-15.21645 34.49135 lineto
+0.00114 33.78296 lineto
+0.00114 38.30528 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 19.83452 24.0139 moveto
+21.65108 18.11256 lineto
+37.49924 20.86487 lineto
+34.35211 26.53503 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 19.83452 24.0139 moveto
+21.65108 18.11256 lineto
+37.49924 20.86487 lineto
+34.35211 26.53503 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -34.35059 26.53503 moveto
+-37.4981 20.86449 lineto
+-21.6484 18.11256 lineto
+-19.83147 24.0139 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -34.35059 26.53503 moveto
+-37.4981 20.86449 lineto
+-21.6484 18.11256 lineto
+-19.83147 24.0139 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 25.00153 -7.51572 moveto
+24.7879 -13.87901 lineto
+42.93251 -10.72845 lineto
+43.30254 -4.33769 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 25.00153 -7.51572 moveto
+24.7879 -13.87901 lineto
+42.93251 -10.72845 lineto
+43.30254 -4.33769 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -43.30063 -4.33769 moveto
+-42.9306 -10.72884 lineto
+-24.78523 -13.8794 lineto
+-24.99886 -7.51572 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -43.30063 -4.33769 moveto
+-42.9306 -10.72884 lineto
+-24.78523 -13.8794 lineto
+-24.99886 -7.51572 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00153 -32.13768 moveto
+0.00153 -36.86218 lineto
+19.83566 -35.93903 lineto
+21.65222 -31.12984 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00153 -32.13768 moveto
+0.00153 -36.86218 lineto
+19.83566 -35.93903 lineto
+21.65222 -31.12984 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -21.64993 -31.13022 moveto
+-19.83337 -35.9394 lineto
+0.00153 -36.86218 lineto
+0.00153 -32.13768 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -21.64993 -31.13022 moveto
+-19.83337 -35.9394 lineto
+0.00153 -36.86218 lineto
+0.00153 -32.13768 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 21.65108 18.11256 moveto
+23.09761 11.90071 lineto
+40.00473 14.83688 lineto
+37.49924 20.86487 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 21.65108 18.11256 moveto
+23.09761 11.90071 lineto
+40.00473 14.83688 lineto
+37.49924 20.86487 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -37.4981 20.86449 moveto
+-40.00359 14.8365 lineto
+-23.09494 11.90071 lineto
+-21.6484 18.11256 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -37.4981 20.86449 moveto
+-40.00359 14.8365 lineto
+-23.09494 11.90071 lineto
+-21.6484 18.11256 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 24.78752 -1.02425 moveto
+25.00153 -7.51572 lineto
+43.30254 -4.33769 lineto
+42.93175 2.12631 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 24.78752 -1.02425 moveto
+25.00153 -7.51572 lineto
+43.30254 -4.33769 lineto
+42.93175 2.12631 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -42.93022 2.12631 moveto
+-43.30063 -4.33769 lineto
+-24.99886 -7.51572 lineto
+-24.78485 -1.02425 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -42.93022 2.12631 moveto
+-43.30063 -4.33769 lineto
+-24.99886 -7.51572 lineto
+-24.78485 -1.02425 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 23.09761 11.90071 moveto
+24.14932 5.48553 lineto
+41.82663 8.55522 lineto
+40.00473 14.83688 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 23.09761 11.90071 moveto
+24.14932 5.48553 lineto
+41.82663 8.55522 lineto
+40.00473 14.83688 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -40.00359 14.8365 moveto
+-41.82472 8.55522 lineto
+-24.14665 5.48553 lineto
+-23.09494 11.90071 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -40.00359 14.8365 moveto
+-41.82472 8.55522 lineto
+-24.14665 5.48553 lineto
+-23.09494 11.90071 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 24.14932 5.48553 moveto
+24.78752 -1.02425 lineto
+42.93175 2.12631 lineto
+41.82663 8.55522 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 24.14932 5.48553 moveto
+24.78752 -1.02425 lineto
+42.93175 2.12631 lineto
+41.82663 8.55522 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -41.82472 8.55522 moveto
+-42.93022 2.12631 lineto
+-24.78485 -1.02425 lineto
+-24.14665 5.48553 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -41.82472 8.55522 moveto
+-42.93022 2.12631 lineto
+-24.78485 -1.02425 lineto
+-24.14665 5.48553 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00114 33.78296 moveto
+0.00153 28.68233 lineto
+17.6773 29.50516 lineto
+15.21797 34.49135 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00114 33.78296 moveto
+0.00153 28.68233 lineto
+17.6773 29.50516 lineto
+15.21797 34.49135 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -15.21645 34.49135 moveto
+-17.6754 29.50478 lineto
+0.00153 28.68233 lineto
+0.00114 33.78296 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -15.21645 34.49135 moveto
+-17.6754 29.50478 lineto
+0.00153 28.68233 lineto
+0.00114 33.78296 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.0019 -26.86272 moveto
+0.00153 -32.13768 lineto
+21.65222 -31.12984 lineto
+23.09875 -25.78773 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.0019 -26.86272 moveto
+0.00153 -32.13768 lineto
+21.65222 -31.12984 lineto
+23.09875 -25.78773 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -23.09608 -25.78812 moveto
+-21.64993 -31.13022 lineto
+0.00153 -32.13768 lineto
+0.0019 -26.86272 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -23.09608 -25.78812 moveto
+-21.64993 -31.13022 lineto
+0.00153 -32.13768 lineto
+0.0019 -26.86272 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00153 28.68233 moveto
+0.00153 23.09113 lineto
+19.83452 24.0139 lineto
+17.6773 29.50516 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00153 28.68233 moveto
+0.00153 23.09113 lineto
+19.83452 24.0139 lineto
+17.6773 29.50516 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -17.6754 29.50478 moveto
+-19.83147 24.0139 lineto
+0.00153 23.09113 lineto
+0.00153 28.68233 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -17.6754 29.50478 moveto
+-19.83147 24.0139 lineto
+0.00153 23.09113 lineto
+0.00153 28.68233 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00153 -21.12885 moveto
+0.0019 -26.86272 lineto
+23.09875 -25.78773 lineto
+24.15009 -20.00504 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00153 -21.12885 moveto
+0.0019 -26.86272 lineto
+23.09875 -25.78773 lineto
+24.15009 -20.00504 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -24.14742 -20.00504 moveto
+-23.09608 -25.78812 lineto
+0.0019 -26.86272 lineto
+0.00153 -21.12885 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -24.14742 -20.00504 moveto
+-23.09608 -25.78812 lineto
+0.0019 -26.86272 lineto
+0.00153 -21.12885 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -19.83147 24.0139 moveto
+-21.6484 18.11256 lineto
+0.00114 17.1051 lineto
+0.00153 23.09113 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -19.83147 24.0139 moveto
+-21.6484 18.11256 lineto
+0.00114 17.1051 lineto
+0.00153 23.09113 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00153 23.09113 moveto
+0.00114 17.1051 lineto
+21.65108 18.11256 lineto
+19.83452 24.0139 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00153 23.09113 moveto
+0.00114 17.1051 lineto
+21.65108 18.11256 lineto
+19.83452 24.0139 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00153 -15.03258 moveto
+0.00153 -21.12885 lineto
+24.15009 -20.00504 lineto
+24.7879 -13.87901 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00153 -15.03258 moveto
+0.00153 -21.12885 lineto
+24.15009 -20.00504 lineto
+24.7879 -13.87901 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -24.78523 -13.8794 moveto
+-24.14742 -20.00504 lineto
+0.00153 -21.12885 lineto
+0.00153 -15.03258 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -24.78523 -13.8794 moveto
+-24.14742 -20.00504 lineto
+0.00153 -21.12885 lineto
+0.00153 -15.03258 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00114 17.1051 moveto
+0.00114 10.82611 lineto
+23.09761 11.90071 lineto
+21.65108 18.11256 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00114 17.1051 moveto
+0.00114 10.82611 lineto
+23.09761 11.90071 lineto
+21.65108 18.11256 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -21.6484 18.11256 moveto
+-23.09494 11.90071 lineto
+0.00114 10.82611 lineto
+0.00114 17.1051 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -21.6484 18.11256 moveto
+-23.09494 11.90071 lineto
+0.00114 10.82611 lineto
+0.00114 17.1051 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00153 -8.67882 moveto
+0.00153 -15.03258 lineto
+24.7879 -13.87901 lineto
+25.00153 -7.51572 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00153 -8.67882 moveto
+0.00153 -15.03258 lineto
+24.7879 -13.87901 lineto
+25.00153 -7.51572 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -24.99886 -7.51572 moveto
+-24.78523 -13.8794 lineto
+0.00153 -15.03258 lineto
+0.00153 -8.67882 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -24.99886 -7.51572 moveto
+-24.78523 -13.8794 lineto
+0.00153 -15.03258 lineto
+0.00153 -8.67882 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00114 10.82611 moveto
+0.0019 4.3621 lineto
+24.14932 5.48553 lineto
+23.09761 11.90071 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00114 10.82611 moveto
+0.0019 4.3621 lineto
+24.14932 5.48553 lineto
+23.09761 11.90071 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -23.09494 11.90071 moveto
+-24.14665 5.48553 lineto
+0.0019 4.3621 lineto
+0.00114 10.82611 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -23.09494 11.90071 moveto
+-24.14665 5.48553 lineto
+0.0019 4.3621 lineto
+0.00114 10.82611 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00153 -2.17781 moveto
+0.00153 -8.67882 lineto
+25.00153 -7.51572 lineto
+24.78752 -1.02425 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00153 -2.17781 moveto
+0.00153 -8.67882 lineto
+25.00153 -7.51572 lineto
+24.78752 -1.02425 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -24.78485 -1.02425 moveto
+-24.99886 -7.51572 lineto
+0.00153 -8.67882 lineto
+0.00153 -2.17781 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -24.78485 -1.02425 moveto
+-24.99886 -7.51572 lineto
+0.00153 -8.67882 lineto
+0.00153 -2.17781 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.0019 4.3621 moveto
+0.00153 -2.17781 lineto
+24.78752 -1.02425 lineto
+24.14932 5.48553 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.0019 4.3621 moveto
+0.00153 -2.17781 lineto
+24.78752 -1.02425 lineto
+24.14932 5.48553 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -24.14665 5.48553 moveto
+-24.78485 -1.02425 lineto
+0.00153 -2.17781 lineto
+0.0019 4.3621 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -24.14665 5.48553 moveto
+-24.78485 -1.02425 lineto
+0.00153 -2.17781 lineto
+0.0019 4.3621 lineto
+ closepath stroke
+grestore
+showpage
+%%EOF
--- /dev/null
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: -114 -114 114 114
+%%HiResBoundingBox: -113.3858 -113.3858 113.3858 113.3858
+%%Creator: MetaPost 1.208
+%%CreationDate: 2011.01.25:2231
+%%Pages: 1
+%%DocumentResources: procset mpost-minimal
+%%DocumentSuppliedResources: procset mpost-minimal
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset mpost-minimal
+/bd{bind def}bind def/fshow {exch findfont exch scalefont setfont show}bd
+/fcp{findfont dup length dict begin{1 index/FID ne{def}{pop pop}ifelse}forall}bd
+/fmc{FontMatrix dup length array copy dup dup}bd/fmd{/FontMatrix exch def}bd
+/Amul{4 -1 roll exch mul 1000 div}bd/ExtendFont{fmc 0 get Amul 0 exch put fmd}bd
+/ScaleFont{dup fmc 0 get Amul 0 exch put dup dup 3 get Amul 3 exch put fmd}bd
+/SlantFont{fmc 2 get dup 0 eq{pop 1}if Amul FontMatrix 0 get mul 2 exch put fmd}bd
+%%EndResource
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+%%Page: 1 1
+gsave newpath -113.3858 -113.3858 moveto
+-113.3858 113.3858 lineto
+113.3858 113.3858 lineto
+113.3858 -113.3858 lineto
+ closepath clip
+gsave newpath -113.3858 -113.3858 moveto
+-113.3858 113.3858 lineto
+113.3858 113.3858 lineto
+113.3858 -113.3858 lineto
+ closepath clip
+ 0 0 0 setrgbcolor
+newpath -113.3858 -113.3858 moveto
+-113.3858 113.3858 lineto
+113.3858 113.3858 lineto
+113.3858 -113.3858 lineto
+ closepath fill
+ 0.3872 0.3872 0 setrgbcolor
+newpath -25.62065 -26.24855 moveto
+-20.43533 -38.28163 lineto
+-16.96053 -38.34953 lineto
+-21.85287 -27.108 lineto
+ closepath fill
+ 0 0 0 setrgbcolor 0 0.25 dtransform truncate idtransform setlinewidth pop
+ [] 0 setdash 1 setlinejoin 10 setmiterlimit
+newpath -25.62065 -26.24855 moveto
+-20.43533 -38.28163 lineto
+-16.96053 -38.34953 lineto
+-21.85287 -27.108 lineto
+ closepath stroke
+ 0.38235 0.38235 0 setrgbcolor
+newpath -20.43533 -38.28163 moveto
+-13.68752 -48.98415 lineto
+-10.58807 -48.38562 lineto
+-16.96053 -38.34953 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -20.43533 -38.28163 moveto
+-13.68752 -48.98415 lineto
+-10.58807 -48.38562 lineto
+-16.96053 -38.34953 lineto
+ closepath stroke
+ 0.40631 0.40631 0 setrgbcolor
+newpath -28.88603 -13.31367 moveto
+-25.62065 -26.24855 lineto
+-21.85287 -27.108 lineto
+-24.93057 -15.03906 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -28.88603 -13.31367 moveto
+-25.62065 -26.24855 lineto
+-21.85287 -27.108 lineto
+-24.93057 -15.03906 lineto
+ closepath stroke
+ 0.52075 0.52075 0 setrgbcolor
+newpath 27.87132 -20.32204 moveto
+30.06783 -28.7674 lineto
+33.86803 -27.21748 lineto
+31.79474 -18.41278 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 27.87132 -20.32204 moveto
+30.06783 -28.7674 lineto
+33.86803 -27.21748 lineto
+31.79474 -18.41278 lineto
+ closepath stroke
+ 0.39001 0.39001 0 setrgbcolor
+newpath -13.68752 -48.98415 moveto
+-5.82123 -58.04787 lineto
+-3.14827 -56.94542 lineto
+-10.58807 -48.38562 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -13.68752 -48.98415 moveto
+-5.82123 -58.04787 lineto
+-3.14827 -56.94542 lineto
+-10.58807 -48.38562 lineto
+ closepath stroke
+ 0.50656 0.50656 0 setrgbcolor
+newpath 26.4656 -11.5284 moveto
+27.87132 -20.32204 lineto
+31.79474 -18.41278 lineto
+30.46036 -9.2598 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 26.4656 -11.5284 moveto
+27.87132 -20.32204 lineto
+31.79474 -18.41278 lineto
+30.46036 -9.2598 lineto
+ closepath stroke
+ 0.5242 0.5242 0 setrgbcolor
+newpath 30.06783 -28.7674 moveto
+32.85217 -36.68823 lineto
+36.47156 -35.47783 lineto
+33.86803 -27.21748 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 30.06783 -28.7674 moveto
+32.85217 -36.68823 lineto
+36.47156 -35.47783 lineto
+33.86803 -27.21748 lineto
+ closepath stroke
+ 0.44101 0.44101 0 setrgbcolor
+newpath -30.00069 0.0061 moveto
+-28.88603 -13.31367 lineto
+-24.93057 -15.03906 lineto
+-25.98076 -2.59895 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -30.00069 0.0061 moveto
+-28.88603 -13.31367 lineto
+-24.93057 -15.03906 lineto
+-25.98076 -2.59895 lineto
+ closepath stroke
+ 0.47903 0.47903 0 setrgbcolor
+newpath 25.9819 -2.59972 moveto
+26.4656 -11.5284 lineto
+30.46036 -9.2598 lineto
+30.0003 0.00496 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 25.9819 -2.59972 moveto
+26.4656 -11.5284 lineto
+30.46036 -9.2598 lineto
+30.0003 0.00496 lineto
+ closepath stroke
+ 0.52106 0.52106 0 setrgbcolor
+newpath 32.85217 -36.68823 moveto
+35.96497 -43.95866 lineto
+39.34212 -43.05153 lineto
+36.47156 -35.47783 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 32.85217 -36.68823 moveto
+35.96497 -43.95866 lineto
+39.34212 -43.05153 lineto
+36.47156 -35.47783 lineto
+ closepath stroke
+ 0.40619 0.40619 0 setrgbcolor
+newpath -5.82123 -58.04787 moveto
+2.67754 -65.30342 lineto
+4.90303 -63.88206 lineto
+-3.14827 -56.94542 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -5.82123 -58.04787 moveto
+2.67754 -65.30342 lineto
+4.90303 -63.88206 lineto
+-3.14827 -56.94542 lineto
+ closepath stroke
+ 0.5163 0.5163 0 setrgbcolor
+newpath 35.96497 -43.95866 moveto
+39.1159 -50.51003 lineto
+42.1833 -49.86229 lineto
+39.34212 -43.05153 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 35.96497 -43.95866 moveto
+39.1159 -50.51003 lineto
+42.1833 -49.86229 lineto
+39.34212 -43.05153 lineto
+ closepath stroke
+ 0.43774 0.43774 0 setrgbcolor
+newpath 26.46637 6.23016 moveto
+25.9819 -2.59972 lineto
+30.0003 0.00496 lineto
+30.46112 9.124 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 26.46637 6.23016 moveto
+25.9819 -2.59972 lineto
+30.0003 0.00496 lineto
+30.46112 9.124 lineto
+ closepath stroke
+ 0.42728 0.42728 0 setrgbcolor
+newpath 2.67754 -65.30342 moveto
+11.32011 -70.71266 lineto
+13.10005 -69.16428 lineto
+4.90303 -63.88206 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 2.67754 -65.30342 moveto
+11.32011 -70.71266 lineto
+13.10005 -69.16428 lineto
+4.90303 -63.88206 lineto
+ closepath stroke
+ 0.49063 0.49063 0 setrgbcolor
+newpath -28.88374 13.15155 moveto
+-30.00069 0.0061 lineto
+-25.98076 -2.59895 lineto
+-24.92905 9.71832 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -28.88374 13.15155 moveto
+-30.00069 0.0061 lineto
+-25.98076 -2.59895 lineto
+-24.92905 9.71832 lineto
+ closepath stroke
+ 0.51566 0.51566 0 setrgbcolor
+newpath 39.1159 -50.51003 moveto
+42.00249 -56.32248 lineto
+44.693 -55.8834 lineto
+42.1833 -49.86229 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 39.1159 -50.51003 moveto
+42.00249 -56.32248 lineto
+44.693 -55.8834 lineto
+42.1833 -49.86229 lineto
+ closepath stroke
+ 0.44794 0.44794 0 setrgbcolor
+newpath 11.32011 -70.71266 moveto
+19.65714 -74.35493 lineto
+21.0167 -72.86263 lineto
+13.10005 -69.16428 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 11.32011 -70.71266 moveto
+19.65714 -74.35493 lineto
+21.0167 -72.86263 lineto
+13.10005 -69.16428 lineto
+ closepath stroke
+ 0.38559 0.38559 0 setrgbcolor
+newpath 27.87247 14.74304 moveto
+26.46637 6.23016 lineto
+30.46112 9.124 lineto
+31.79588 17.8566 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 27.87247 14.74304 moveto
+26.46637 6.23016 lineto
+30.46112 9.124 lineto
+31.79588 17.8566 lineto
+ closepath stroke
+ 0.52454 0.52454 0 setrgbcolor
+newpath 42.00249 -56.32248 moveto
+44.3348 -61.41205 lineto
+46.58241 -61.13281 lineto
+44.693 -55.8834 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 42.00249 -56.32248 moveto
+44.3348 -61.41205 lineto
+46.58241 -61.13281 lineto
+44.693 -55.8834 lineto
+ closepath stroke
+ 0.46286 0.46286 0 setrgbcolor
+newpath 19.65714 -74.35493 moveto
+27.30103 -76.39008 lineto
+28.27492 -75.11635 lineto
+21.0167 -72.86263 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 19.65714 -74.35493 moveto
+27.30103 -76.39008 lineto
+28.27492 -75.11635 lineto
+21.0167 -72.86263 lineto
+ closepath stroke
+ 0.55402 0.55402 0 setrgbcolor
+newpath -25.61722 25.58556 moveto
+-28.88374 13.15155 lineto
+-24.92905 9.71832 lineto
+-21.84868 21.43631 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -25.61722 25.58556 moveto
+-28.88374 13.15155 lineto
+-24.92905 9.71832 lineto
+-21.84868 21.43631 lineto
+ closepath stroke
+ 0.54633 0.54633 0 setrgbcolor
+newpath 44.3348 -61.41205 moveto
+45.8477 -65.81345 lineto
+47.59178 -65.64789 lineto
+46.58241 -61.13281 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 44.3348 -61.41205 moveto
+45.8477 -65.81345 lineto
+47.59178 -65.64789 lineto
+46.58241 -61.13281 lineto
+ closepath stroke
+ 0.46262 0.46262 0 setrgbcolor
+newpath 27.30103 -76.39008 moveto
+33.94661 -77.02713 lineto
+34.57108 -76.10245 lineto
+28.27492 -75.11635 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 27.30103 -76.39008 moveto
+33.94661 -77.02713 lineto
+34.57108 -76.10245 lineto
+28.27492 -75.11635 lineto
+ closepath stroke
+ 0.56989 0.56989 0 setrgbcolor
+newpath 45.8477 -65.81345 moveto
+46.31462 -69.54918 lineto
+47.50748 -69.4603 lineto
+47.59178 -65.64789 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 45.8477 -65.81345 moveto
+46.31462 -69.54918 lineto
+47.50748 -69.4603 lineto
+47.59178 -65.64789 lineto
+ closepath stroke
+ 0.32745 0.32745 0 setrgbcolor
+newpath 30.07011 22.74666 moveto
+27.87247 14.74304 lineto
+31.79588 17.8566 lineto
+33.86993 25.99106 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 30.07011 22.74666 moveto
+27.87247 14.74304 lineto
+31.79588 17.8566 lineto
+33.86993 25.99106 lineto
+ closepath stroke
+ 0.65155 0.65155 0 setrgbcolor
+newpath 40.81192 -75.11482 moveto
+43.46428 -74.94392 lineto
+43.46428 -74.94392 lineto
+42.46826 -74.07799 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 40.81192 -75.11482 moveto
+43.46428 -74.94392 lineto
+43.46428 -74.94392 lineto
+42.46826 -74.07799 lineto
+ closepath stroke
+ 0.66885 0.66885 0 setrgbcolor
+newpath 42.46826 -74.07799 moveto
+43.46428 -74.94392 lineto
+43.46428 -74.94392 lineto
+44.20586 -73.16093 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 42.46826 -74.07799 moveto
+43.46428 -74.94392 lineto
+43.46428 -74.94392 lineto
+44.20586 -73.16093 lineto
+ closepath stroke
+ 0.62796 0.62796 0 setrgbcolor
+newpath -20.43 36.83014 moveto
+-25.61722 25.58556 lineto
+-21.84868 21.43631 lineto
+-16.95633 32.13348 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -20.43 36.83014 moveto
+-25.61722 25.58556 lineto
+-21.84868 21.43631 lineto
+-16.95633 32.13348 lineto
+ closepath stroke
+ 0.89389 0.89389 0 setrgbcolor
+newpath 34.57108 -76.10245 moveto
+39.68086 -75.99373 lineto
+40.81192 -75.11482 lineto
+36.84464 -74.41101 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 34.57108 -76.10245 moveto
+39.68086 -75.99373 lineto
+40.81192 -75.11482 lineto
+36.84464 -74.41101 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 43.62488 -70.62798 moveto
+44.20586 -73.16093 lineto
+45.55817 -72.60971 lineto
+46.31462 -69.54918 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.62488 -70.62798 moveto
+44.20586 -73.16093 lineto
+45.55817 -72.60971 lineto
+46.31462 -69.54918 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -16.96053 -38.34953 moveto
+-10.58807 -48.38562 lineto
+-1.59836 -46.13762 lineto
+-7.1415 -36.91711 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -16.96053 -38.34953 moveto
+-10.58807 -48.38562 lineto
+-1.59836 -46.13762 lineto
+-7.1415 -36.91711 lineto
+ closepath stroke
+ 0.26889 0.26889 0 setrgbcolor
+newpath 32.85522 30.1094 moveto
+30.07011 22.74666 lineto
+33.86993 25.99106 lineto
+36.47499 33.38127 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 32.85522 30.1094 moveto
+30.07011 22.74666 lineto
+33.86993 25.99106 lineto
+36.47499 33.38127 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -10.58807 -48.38562 moveto
+-3.14827 -56.94542 lineto
+4.85992 -54.12903 lineto
+-1.59836 -46.13762 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -10.58807 -48.38562 moveto
+-3.14827 -56.94542 lineto
+4.85992 -54.12903 lineto
+-1.59836 -46.13762 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 28.27492 -75.11635 moveto
+34.57108 -76.10245 lineto
+36.84464 -74.41101 lineto
+31.70624 -72.74513 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 28.27492 -75.11635 moveto
+34.57108 -76.10245 lineto
+36.84464 -74.41101 lineto
+31.70624 -72.74513 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 41.85143 -67.37442 moveto
+43.62488 -70.62798 lineto
+46.31462 -69.54918 lineto
+45.8477 -65.81345 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 41.85143 -67.37442 moveto
+43.62488 -70.62798 lineto
+46.31462 -69.54918 lineto
+45.8477 -65.81345 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -21.85287 -27.108 moveto
+-16.96053 -38.34953 lineto
+-7.1415 -36.91711 lineto
+-11.40175 -26.68762 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -21.85287 -27.108 moveto
+-16.96053 -38.34953 lineto
+-7.1415 -36.91711 lineto
+-11.40175 -26.68762 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 36.84464 -74.41101 moveto
+40.81192 -75.11482 lineto
+42.46826 -74.07799 lineto
+40.15884 -72.40753 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 36.84464 -74.41101 moveto
+40.81192 -75.11482 lineto
+42.46826 -74.07799 lineto
+40.15884 -72.40753 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 40.15884 -72.40753 moveto
+42.46826 -74.07799 lineto
+44.20586 -73.16093 lineto
+43.62488 -70.62798 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 40.15884 -72.40753 moveto
+42.46826 -74.07799 lineto
+44.20586 -73.16093 lineto
+43.62488 -70.62798 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -3.14827 -56.94542 moveto
+4.90303 -63.88206 lineto
+11.82404 -60.77309 lineto
+4.85992 -54.12903 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -3.14827 -56.94542 moveto
+4.90303 -63.88206 lineto
+11.82404 -60.77309 lineto
+4.85992 -54.12903 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 4.90303 -63.88206 moveto
+13.10005 -69.16428 lineto
+18.87474 -66.04462 lineto
+11.82404 -60.77309 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 4.90303 -63.88206 moveto
+13.10005 -69.16428 lineto
+18.87474 -66.04462 lineto
+11.82404 -60.77309 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 21.0167 -72.86263 moveto
+28.27492 -75.11635 lineto
+31.70624 -72.74513 lineto
+25.6195 -69.99893 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 21.0167 -72.86263 moveto
+28.27492 -75.11635 lineto
+31.70624 -72.74513 lineto
+25.6195 -69.99893 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 20.01 -31.38542 moveto
+23.48137 -39.38446 lineto
+32.85217 -36.68823 lineto
+30.06783 -28.7674 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 20.01 -31.38542 moveto
+23.48137 -39.38446 lineto
+32.85217 -36.68823 lineto
+30.06783 -28.7674 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 23.48137 -39.38446 moveto
+27.44179 -46.63086 lineto
+35.96497 -43.95866 lineto
+32.85217 -36.68823 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 23.48137 -39.38446 moveto
+27.44179 -46.63086 lineto
+35.96497 -43.95866 lineto
+32.85217 -36.68823 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 13.10005 -69.16428 moveto
+21.0167 -72.86263 lineto
+25.6195 -69.99893 lineto
+18.87474 -66.04462 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 13.10005 -69.16428 moveto
+21.0167 -72.86263 lineto
+25.6195 -69.99893 lineto
+18.87474 -66.04462 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 39.08234 -63.38844 moveto
+41.85143 -67.37442 lineto
+45.8477 -65.81345 lineto
+44.3348 -61.41205 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 39.08234 -63.38844 moveto
+41.85143 -67.37442 lineto
+45.8477 -65.81345 lineto
+44.3348 -61.41205 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 17.30614 -22.76993 moveto
+20.01 -31.38542 lineto
+30.06783 -28.7674 lineto
+27.87132 -20.32204 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 17.30614 -22.76993 moveto
+20.01 -31.38542 lineto
+30.06783 -28.7674 lineto
+27.87132 -20.32204 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 27.44179 -46.63086 moveto
+31.57692 -53.05252 lineto
+39.1159 -50.51003 lineto
+35.96497 -43.95866 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 27.44179 -46.63086 moveto
+31.57692 -53.05252 lineto
+39.1159 -50.51003 lineto
+35.96497 -43.95866 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -24.93057 -15.03906 moveto
+-21.85287 -27.108 lineto
+-11.40175 -26.68762 lineto
+-14.08424 -15.75966 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -24.93057 -15.03906 moveto
+-21.85287 -27.108 lineto
+-11.40175 -26.68762 lineto
+-14.08424 -15.75966 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 31.57692 -53.05252 moveto
+35.56175 -58.62961 lineto
+42.00249 -56.32248 lineto
+39.1159 -50.51003 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 31.57692 -53.05252 moveto
+35.56175 -58.62961 lineto
+42.00249 -56.32248 lineto
+39.1159 -50.51003 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 35.56175 -58.62961 moveto
+39.08234 -63.38844 lineto
+44.3348 -61.41205 lineto
+42.00249 -56.32248 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 35.56175 -58.62961 moveto
+39.08234 -63.38844 lineto
+44.3348 -61.41205 lineto
+42.00249 -56.32248 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 15.58952 -13.73215 moveto
+17.30614 -22.76993 lineto
+27.87132 -20.32204 lineto
+26.4656 -11.5284 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 15.58952 -13.73215 moveto
+17.30614 -22.76993 lineto
+27.87132 -20.32204 lineto
+26.4656 -11.5284 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 31.70624 -72.74513 moveto
+36.84464 -74.41101 lineto
+40.15884 -72.40753 lineto
+36.67564 -69.9112 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 31.70624 -72.74513 moveto
+36.84464 -74.41101 lineto
+40.15884 -72.40753 lineto
+36.67564 -69.9112 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 36.67564 -69.9112 moveto
+40.15884 -72.40753 lineto
+43.62488 -70.62798 lineto
+41.85143 -67.37442 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 36.67564 -69.9112 moveto
+40.15884 -72.40753 lineto
+43.62488 -70.62798 lineto
+41.85143 -67.37442 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -25.98076 -2.59895 moveto
+-24.93057 -15.03906 lineto
+-14.08424 -15.75966 lineto
+-14.99939 -4.50592 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -25.98076 -2.59895 moveto
+-24.93057 -15.03906 lineto
+-14.08424 -15.75966 lineto
+-14.99939 -4.50592 lineto
+ closepath stroke
+ 0.70834 0.70834 0 setrgbcolor
+newpath -13.68103 46.52748 moveto
+-20.43 36.83014 lineto
+-16.95633 32.13348 lineto
+-10.58197 41.49399 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -13.68103 46.52748 moveto
+-20.43 36.83014 lineto
+-16.95633 32.13348 lineto
+-10.58197 41.49399 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 15.00092 -4.50668 moveto
+15.58952 -13.73215 lineto
+26.4656 -11.5284 lineto
+25.9819 -2.59972 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 15.00092 -4.50668 moveto
+15.58952 -13.73215 lineto
+26.4656 -11.5284 lineto
+25.9819 -2.59972 lineto
+ closepath stroke
+ 0.21841 0.21841 0 setrgbcolor
+newpath 35.96802 36.75308 moveto
+32.85522 30.1094 lineto
+36.47499 33.38127 lineto
+39.34517 39.94217 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 35.96802 36.75308 moveto
+32.85522 30.1094 lineto
+36.47499 33.38127 lineto
+39.34517 39.94217 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 25.6195 -69.99893 moveto
+31.70624 -72.74513 lineto
+36.67564 -69.9112 lineto
+32.23228 -66.53137 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 25.6195 -69.99893 moveto
+31.70624 -72.74513 lineto
+36.67564 -69.9112 lineto
+32.23228 -66.53137 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 32.23228 -66.53137 moveto
+36.67564 -69.9112 lineto
+41.85143 -67.37442 lineto
+39.08234 -63.38844 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 32.23228 -66.53137 moveto
+36.67564 -69.9112 lineto
+41.85143 -67.37442 lineto
+39.08234 -63.38844 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 15.59029 4.65088 moveto
+15.00092 -4.50668 lineto
+25.9819 -2.59972 lineto
+26.46637 6.23016 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 15.59029 4.65088 moveto
+15.00092 -4.50668 lineto
+25.9819 -2.59972 lineto
+26.46637 6.23016 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -24.92905 9.71832 moveto
+-25.98076 -2.59895 lineto
+-14.99939 -4.50592 lineto
+-14.08272 6.66504 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -24.92905 9.71832 moveto
+-25.98076 -2.59895 lineto
+-14.99939 -4.50592 lineto
+-14.08272 6.66504 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 18.87474 -66.04462 moveto
+25.6195 -69.99893 lineto
+32.23228 -66.53137 lineto
+27.09656 -62.18834 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 18.87474 -66.04462 moveto
+25.6195 -69.99893 lineto
+32.23228 -66.53137 lineto
+27.09656 -62.18834 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 27.09656 -62.18834 moveto
+32.23228 -66.53137 lineto
+39.08234 -63.38844 lineto
+35.56175 -58.62961 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 27.09656 -62.18834 moveto
+32.23228 -66.53137 lineto
+39.08234 -63.38844 lineto
+35.56175 -58.62961 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 11.82404 -60.77309 moveto
+18.87474 -66.04462 lineto
+27.09656 -62.18834 lineto
+21.58737 -56.80885 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 11.82404 -60.77309 moveto
+18.87474 -66.04462 lineto
+27.09656 -62.18834 lineto
+21.58737 -56.80885 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 21.58737 -56.80885 moveto
+27.09656 -62.18834 lineto
+35.56175 -58.62961 lineto
+31.57692 -53.05252 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 21.58737 -56.80885 moveto
+27.09656 -62.18834 lineto
+35.56175 -58.62961 lineto
+31.57692 -53.05252 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 4.85992 -54.12903 moveto
+11.82404 -60.77309 lineto
+21.58737 -56.80885 lineto
+16.05682 -50.35324 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 4.85992 -54.12903 moveto
+11.82404 -60.77309 lineto
+21.58737 -56.80885 lineto
+16.05682 -50.35324 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 16.05682 -50.35324 moveto
+21.58737 -56.80885 lineto
+31.57692 -53.05252 lineto
+27.44179 -46.63086 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 16.05682 -50.35324 moveto
+21.58737 -56.80885 lineto
+31.57692 -53.05252 lineto
+27.44179 -46.63086 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 17.30766 13.49869 moveto
+15.59029 4.65088 lineto
+26.46637 6.23016 lineto
+27.87247 14.74304 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 17.30766 13.49869 moveto
+15.59029 4.65088 lineto
+26.46637 6.23016 lineto
+27.87247 14.74304 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -1.59836 -46.13762 moveto
+4.85992 -54.12903 lineto
+16.05682 -50.35324 lineto
+10.87189 -42.84325 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -1.59836 -46.13762 moveto
+4.85992 -54.12903 lineto
+16.05682 -50.35324 lineto
+10.87189 -42.84325 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 10.87189 -42.84325 moveto
+16.05682 -50.35324 lineto
+27.44179 -46.63086 lineto
+23.48137 -39.38446 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 10.87189 -42.84325 moveto
+16.05682 -50.35324 lineto
+27.44179 -46.63086 lineto
+23.48137 -39.38446 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -7.1415 -36.91711 moveto
+-1.59836 -46.13762 lineto
+10.87189 -42.84325 lineto
+6.39076 -34.36775 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -7.1415 -36.91711 moveto
+-1.59836 -46.13762 lineto
+10.87189 -42.84325 lineto
+6.39076 -34.36775 lineto
+ closepath stroke
+ 0.79175 0.79175 0 setrgbcolor
+newpath -5.8136 54.44908 moveto
+-13.68103 46.52748 lineto
+-10.58197 41.49399 lineto
+-3.14102 49.31717 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -5.8136 54.44908 moveto
+-13.68103 46.52748 lineto
+-10.58197 41.49399 lineto
+-3.14102 49.31717 lineto
+ closepath stroke
+ 0.18335 0.18335 0 setrgbcolor
+newpath 39.1182 42.67197 moveto
+35.96802 36.75308 lineto
+39.34517 39.94217 lineto
+42.18636 45.66307 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 39.1182 42.67197 moveto
+35.96802 36.75308 lineto
+39.34517 39.94217 lineto
+42.18636 45.66307 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 6.39076 -34.36775 moveto
+10.87189 -42.84325 lineto
+23.48137 -39.38446 lineto
+20.01 -31.38542 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 6.39076 -34.36775 moveto
+10.87189 -42.84325 lineto
+23.48137 -39.38446 lineto
+20.01 -31.38542 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -21.84868 21.43631 moveto
+-24.92905 9.71832 lineto
+-14.08272 6.66504 lineto
+-11.3987 17.36374 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -21.84868 21.43631 moveto
+-24.92905 9.71832 lineto
+-14.08272 6.66504 lineto
+-11.3987 17.36374 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -11.40175 -26.68762 moveto
+-7.1415 -36.91711 lineto
+6.39076 -34.36775 lineto
+2.93121 -25.09995 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -11.40175 -26.68762 moveto
+-7.1415 -36.91711 lineto
+6.39076 -34.36775 lineto
+2.93121 -25.09995 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 2.93121 -25.09995 moveto
+6.39076 -34.36775 lineto
+20.01 -31.38542 lineto
+17.30614 -22.76993 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 2.93121 -25.09995 moveto
+6.39076 -34.36775 lineto
+20.01 -31.38542 lineto
+17.30614 -22.76993 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -14.08424 -15.75966 moveto
+-11.40175 -26.68762 lineto
+2.93121 -25.09995 lineto
+0.74692 -15.2813 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -14.08424 -15.75966 moveto
+-11.40175 -26.68762 lineto
+2.93121 -25.09995 lineto
+0.74692 -15.2813 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.74692 -15.2813 moveto
+2.93121 -25.09995 lineto
+17.30614 -22.76993 lineto
+15.58952 -13.73215 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.74692 -15.2813 moveto
+2.93121 -25.09995 lineto
+17.30614 -22.76993 lineto
+15.58952 -13.73215 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 20.01305 21.82236 moveto
+17.30766 13.49869 lineto
+27.87247 14.74304 lineto
+30.07011 22.74666 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 20.01305 21.82236 moveto
+17.30766 13.49869 lineto
+27.87247 14.74304 lineto
+30.07011 22.74666 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -14.99939 -4.50592 moveto
+-14.08424 -15.75966 lineto
+0.74692 -15.2813 lineto
+0.00076 -5.20439 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -14.99939 -4.50592 moveto
+-14.08424 -15.75966 lineto
+0.74692 -15.2813 lineto
+0.00076 -5.20439 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.00076 -5.20439 moveto
+0.74692 -15.2813 lineto
+15.58952 -13.73215 lineto
+15.00092 -4.50668 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.00076 -5.20439 moveto
+0.74692 -15.2813 lineto
+15.58952 -13.73215 lineto
+15.00092 -4.50668 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -16.95633 32.13348 moveto
+-21.84868 21.43631 lineto
+-11.3987 17.36374 lineto
+-7.1373 27.24266 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -16.95633 32.13348 moveto
+-21.84868 21.43631 lineto
+-11.3987 17.36374 lineto
+-7.1373 27.24266 lineto
+ closepath stroke
+ 0.1742 0.1742 0 setrgbcolor
+newpath 42.00554 47.90497 moveto
+39.1182 42.67197 lineto
+42.18636 45.66307 lineto
+44.69528 50.58899 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 42.00554 47.90497 moveto
+39.1182 42.67197 lineto
+42.18636 45.66307 lineto
+44.69528 50.58899 lineto
+ closepath stroke
+ 0.87347 0.87347 0 setrgbcolor
+newpath 2.68517 60.51788 moveto
+-5.8136 54.44908 lineto
+-3.14102 49.31717 lineto
+4.90952 55.53703 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 2.68517 60.51788 moveto
+-5.8136 54.44908 lineto
+-3.14102 49.31717 lineto
+4.90952 55.53703 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 23.48557 29.47426 moveto
+20.01305 21.82236 lineto
+30.07011 22.74666 lineto
+32.85522 30.1094 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 23.48557 29.47426 moveto
+20.01305 21.82236 lineto
+30.07011 22.74666 lineto
+32.85522 30.1094 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 0.74844 4.80995 moveto
+0.00076 -5.20439 lineto
+15.00092 -4.50668 lineto
+15.59029 4.65088 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 0.74844 4.80995 moveto
+0.00076 -5.20439 lineto
+15.00092 -4.50668 lineto
+15.59029 4.65088 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -14.08272 6.66504 moveto
+-14.99939 -4.50592 lineto
+0.00076 -5.20439 lineto
+0.74844 4.80995 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -14.08272 6.66504 moveto
+-14.99939 -4.50592 lineto
+0.00076 -5.20439 lineto
+0.74844 4.80995 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -10.58197 41.49399 moveto
+-16.95633 32.13348 lineto
+-7.1373 27.24266 lineto
+-1.59225 36.04736 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -10.58197 41.49399 moveto
+-16.95633 32.13348 lineto
+-7.1373 27.24266 lineto
+-1.59225 36.04736 lineto
+ closepath stroke
+ 0.2044 0.2044 0 setrgbcolor
+newpath 44.3367 52.52724 moveto
+42.00554 47.90497 lineto
+44.69528 50.58899 lineto
+46.58394 54.80461 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 44.3367 52.52724 moveto
+42.00554 47.90497 lineto
+44.69528 50.58899 lineto
+46.58394 54.80461 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 2.93388 14.45808 moveto
+0.74844 4.80995 lineto
+15.59029 4.65088 lineto
+17.30766 13.49869 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 2.93388 14.45808 moveto
+0.74844 4.80995 lineto
+15.59029 4.65088 lineto
+17.30766 13.49869 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 27.44598 36.36246 moveto
+23.48557 29.47426 lineto
+32.85522 30.1094 lineto
+35.96802 36.75308 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 27.44598 36.36246 moveto
+23.48557 29.47426 lineto
+32.85522 30.1094 lineto
+35.96802 36.75308 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -11.3987 17.36374 moveto
+-14.08272 6.66504 lineto
+0.74844 4.80995 lineto
+2.93388 14.45808 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -11.3987 17.36374 moveto
+-14.08272 6.66504 lineto
+0.74844 4.80995 lineto
+2.93388 14.45808 lineto
+ closepath stroke
+ 0.94925 0.94925 0 setrgbcolor
+newpath 11.3285 64.78424 moveto
+2.68517 60.51788 lineto
+4.90952 55.53703 lineto
+13.10806 60.1986 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 11.3285 64.78424 moveto
+2.68517 60.51788 lineto
+4.90952 55.53703 lineto
+13.10806 60.1986 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 6.3942 23.46878 moveto
+2.93388 14.45808 lineto
+17.30766 13.49869 lineto
+20.01305 21.82236 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 6.3942 23.46878 moveto
+2.93388 14.45808 lineto
+17.30766 13.49869 lineto
+20.01305 21.82236 lineto
+ closepath stroke
+ 0.29605 0.29605 0 setrgbcolor
+newpath 45.84808 56.62422 moveto
+44.3367 52.52724 lineto
+46.58394 54.80461 lineto
+47.59216 58.41103 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 45.84808 56.62422 moveto
+44.3367 52.52724 lineto
+46.58394 54.80461 lineto
+47.59216 58.41103 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -3.14102 49.31717 moveto
+-10.58197 41.49399 lineto
+-1.59225 36.04736 lineto
+4.86641 43.61649 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -3.14102 49.31717 moveto
+-10.58197 41.49399 lineto
+-1.59225 36.04736 lineto
+4.86641 43.61649 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 31.58035 42.47284 moveto
+27.44598 36.36246 lineto
+35.96802 36.75308 lineto
+39.1182 42.67197 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 31.58035 42.47284 moveto
+27.44598 36.36246 lineto
+35.96802 36.75308 lineto
+39.1182 42.67197 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -7.1373 27.24266 moveto
+-11.3987 17.36374 lineto
+2.93388 14.45808 lineto
+6.3942 23.46878 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -7.1373 27.24266 moveto
+-11.3987 17.36374 lineto
+2.93388 14.45808 lineto
+6.3942 23.46878 lineto
+ closepath stroke
+ 0.17654 0.17654 0 setrgbcolor
+newpath 46.16089 64.10255 moveto
+47.50633 61.49406 lineto
+46.88301 63.68256 lineto
+45.85762 65.22255 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 46.16089 64.10255 moveto
+47.50633 61.49406 lineto
+46.88301 63.68256 lineto
+45.85762 65.22255 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 19.66438 67.40723 moveto
+11.3285 64.78424 lineto
+13.10806 60.1986 lineto
+21.02356 63.44185 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 19.66438 67.40723 moveto
+11.3285 64.78424 lineto
+13.10806 60.1986 lineto
+21.02356 63.44185 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 10.87646 31.64787 moveto
+6.3942 23.46878 lineto
+20.01305 21.82236 lineto
+23.48557 29.47426 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 10.87646 31.64787 moveto
+6.3942 23.46878 lineto
+20.01305 21.82236 lineto
+23.48557 29.47426 lineto
+ closepath stroke
+ 0.47253 0.47253 0 setrgbcolor
+newpath 46.31462 60.26535 moveto
+45.84808 56.62422 lineto
+47.59216 58.41103 lineto
+47.50633 61.49406 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 46.31462 60.26535 moveto
+45.84808 56.62422 lineto
+47.59216 58.41103 lineto
+47.50633 61.49406 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 35.56519 47.84203 moveto
+31.58035 42.47284 lineto
+39.1182 42.67197 lineto
+42.00554 47.90497 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 35.56519 47.84203 moveto
+31.58035 42.47284 lineto
+39.1182 42.67197 lineto
+42.00554 47.90497 lineto
+ closepath stroke
+ 0.52103 0.52103 0 setrgbcolor
+newpath 43.46123 66.23001 moveto
+45.85762 65.22255 lineto
+44.72656 66.53862 lineto
+43.46237 66.2281 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.46123 66.23001 moveto
+45.85762 65.22255 lineto
+44.72656 66.53862 lineto
+43.46237 66.2281 lineto
+ closepath stroke
+ 0.6713 0.6713 0 setrgbcolor
+newpath 39.98566 68.42194 moveto
+35.14404 69.89136 lineto
+33.95195 68.66264 lineto
+39.38065 67.7967 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 39.98566 68.42194 moveto
+35.14404 69.89136 lineto
+33.95195 68.66264 lineto
+39.38065 67.7967 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath -1.59225 36.04736 moveto
+-7.1373 27.24266 lineto
+6.3942 23.46878 lineto
+10.87646 31.64787 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath -1.59225 36.04736 moveto
+-7.1373 27.24266 lineto
+6.3942 23.46878 lineto
+10.87646 31.64787 lineto
+ closepath stroke
+ 0.63434 0.63434 0 setrgbcolor
+newpath 43.46542 66.22696 moveto
+41.33644 68.38493 lineto
+39.98528 68.42194 lineto
+43.46695 66.22696 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.46542 66.22696 moveto
+41.33644 68.38493 lineto
+39.98528 68.42194 lineto
+43.46695 66.22696 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 4.90952 55.53703 moveto
+-3.14102 49.31717 lineto
+4.86641 43.61649 lineto
+11.83014 49.90044 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 4.90952 55.53703 moveto
+-3.14102 49.31717 lineto
+4.86641 43.61649 lineto
+11.83014 49.90044 lineto
+ closepath stroke
+ 0.64597 0.64597 0 setrgbcolor
+newpath 43.46085 66.23077 moveto
+46.16089 64.10255 lineto
+45.85762 65.22255 lineto
+43.46123 66.23001 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.46085 66.23077 moveto
+46.16089 64.10255 lineto
+45.85762 65.22255 lineto
+43.46123 66.23001 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 27.30637 68.61458 moveto
+19.66438 67.40723 lineto
+21.02356 63.44185 lineto
+28.28026 65.46097 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 27.30637 68.61458 moveto
+19.66438 67.40723 lineto
+21.02356 63.44185 lineto
+28.28026 65.46097 lineto
+ closepath stroke
+ 0.71204 0.71204 0 setrgbcolor
+newpath 45.55626 63.47694 moveto
+46.31462 60.26535 lineto
+47.50633 61.49406 lineto
+46.16089 64.10255 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 45.55626 63.47694 moveto
+46.31462 60.26535 lineto
+47.50633 61.49406 lineto
+46.16089 64.10255 lineto
+ closepath stroke
+ 0.78793 0.78793 0 setrgbcolor
+newpath 43.46695 66.22696 moveto
+39.98566 68.42194 lineto
+39.38065 67.7967 lineto
+43.46771 66.22772 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.46695 66.22696 moveto
+39.98566 68.42194 lineto
+39.38065 67.7967 lineto
+43.46771 66.22772 lineto
+ closepath stroke
+ 0.84009 0.84009 0 setrgbcolor
+newpath 43.46161 66.23154 moveto
+45.55626 63.47694 lineto
+46.16089 64.10255 lineto
+43.46085 66.23077 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.46161 66.23154 moveto
+45.55626 63.47694 lineto
+46.16089 64.10255 lineto
+43.46085 66.23077 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 39.085 52.54898 moveto
+35.56519 47.84203 lineto
+42.00554 47.90497 lineto
+44.3367 52.52724 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 39.085 52.54898 moveto
+35.56519 47.84203 lineto
+42.00554 47.90497 lineto
+44.3367 52.52724 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 16.06178 38.87444 moveto
+10.87646 31.64787 lineto
+23.48557 29.47426 lineto
+27.44598 36.36246 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 16.06178 38.87444 moveto
+10.87646 31.64787 lineto
+23.48557 29.47426 lineto
+27.44598 36.36246 lineto
+ closepath stroke
+ 0.95343 0.95343 0 setrgbcolor
+newpath 43.46771 66.22772 moveto
+39.38065 67.7967 lineto
+39.68391 66.67633 lineto
+43.46695 66.2281 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.46771 66.22772 moveto
+39.38065 67.7967 lineto
+39.68391 66.67633 lineto
+43.46695 66.2281 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 33.95195 68.66264 moveto
+27.30637 68.61458 lineto
+28.28026 65.46097 lineto
+34.57565 66.47415 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 33.95195 68.66264 moveto
+27.30637 68.61458 lineto
+28.28026 65.46097 lineto
+34.57565 66.47415 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 43.46313 66.23154 moveto
+44.20471 63.51433 lineto
+45.55626 63.47694 lineto
+43.46161 66.23154 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.46313 66.23154 moveto
+44.20471 63.51433 lineto
+45.55626 63.47694 lineto
+43.46161 66.23154 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 39.38065 67.7967 moveto
+33.95195 68.66264 lineto
+34.57565 66.47415 lineto
+39.68391 66.67633 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 39.38065 67.7967 moveto
+33.95195 68.66264 lineto
+34.57565 66.47415 lineto
+39.68391 66.67633 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 4.86641 43.61649 moveto
+-1.59225 36.04736 lineto
+10.87646 31.64787 lineto
+16.06178 38.87444 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 4.86641 43.61649 moveto
+-1.59225 36.04736 lineto
+10.87646 31.64787 lineto
+16.06178 38.87444 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 43.46695 66.2281 moveto
+39.68391 66.67633 lineto
+40.81459 65.3614 lineto
+43.46619 66.22963 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.46695 66.2281 moveto
+39.68391 66.67633 lineto
+40.81459 65.3614 lineto
+43.46619 66.22963 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 13.10806 60.1986 moveto
+4.90952 55.53703 lineto
+11.83014 49.90044 lineto
+18.8816 54.94041 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 13.10806 60.1986 moveto
+4.90952 55.53703 lineto
+11.83014 49.90044 lineto
+18.8816 54.94041 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 43.46428 66.23077 moveto
+42.4694 64.20403 lineto
+44.20471 63.51433 lineto
+43.46313 66.23154 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.46428 66.23077 moveto
+42.4694 64.20403 lineto
+44.20471 63.51433 lineto
+43.46313 66.23154 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 41.85333 56.68411 moveto
+39.085 52.54898 lineto
+44.3367 52.52724 lineto
+45.84808 56.62422 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 41.85333 56.68411 moveto
+39.085 52.54898 lineto
+44.3367 52.52724 lineto
+45.84808 56.62422 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 43.46619 66.22963 moveto
+40.81459 65.3614 lineto
+42.4694 64.20403 lineto
+43.46428 66.23077 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.46619 66.22963 moveto
+40.81459 65.3614 lineto
+42.4694 64.20403 lineto
+43.46428 66.23077 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 44.20471 63.51433 moveto
+43.62564 60.32639 lineto
+46.31462 60.26535 lineto
+45.55626 63.47694 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 44.20471 63.51433 moveto
+43.62564 60.32639 lineto
+46.31462 60.26535 lineto
+45.55626 63.47694 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 43.62564 60.32639 moveto
+41.85333 56.68411 lineto
+45.84808 56.62422 lineto
+46.31462 60.26535 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 43.62564 60.32639 moveto
+41.85333 56.68411 lineto
+45.84808 56.62422 lineto
+46.31462 60.26535 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 21.59271 45.11833 moveto
+16.06178 38.87444 lineto
+27.44598 36.36246 lineto
+31.58035 42.47284 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 21.59271 45.11833 moveto
+16.06178 38.87444 lineto
+27.44598 36.36246 lineto
+31.58035 42.47284 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 21.02356 63.44185 moveto
+13.10806 60.1986 lineto
+18.8816 54.94041 lineto
+25.62523 58.85048 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 21.02356 63.44185 moveto
+13.10806 60.1986 lineto
+18.8816 54.94041 lineto
+25.62523 58.85048 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 39.68391 66.67633 moveto
+34.57565 66.47415 lineto
+36.84883 63.91068 lineto
+40.81459 65.3614 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 39.68391 66.67633 moveto
+34.57565 66.47415 lineto
+36.84883 63.91068 lineto
+40.81459 65.3614 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 11.83014 49.90044 moveto
+4.86641 43.61649 lineto
+16.06178 38.87444 lineto
+21.59271 45.11833 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 11.83014 49.90044 moveto
+4.86641 43.61649 lineto
+16.06178 38.87444 lineto
+21.59271 45.11833 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 42.4694 64.20403 moveto
+40.16151 61.66077 lineto
+43.62564 60.32639 lineto
+44.20471 63.51433 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 42.4694 64.20403 moveto
+40.16151 61.66077 lineto
+43.62564 60.32639 lineto
+44.20471 63.51433 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 27.1019 50.41656 moveto
+21.59271 45.11833 lineto
+31.58035 42.47284 lineto
+35.56519 47.84203 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 27.1019 50.41656 moveto
+21.59271 45.11833 lineto
+31.58035 42.47284 lineto
+35.56519 47.84203 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 28.28026 65.46097 moveto
+21.02356 63.44185 lineto
+25.62523 58.85048 lineto
+31.71082 61.78627 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 28.28026 65.46097 moveto
+21.02356 63.44185 lineto
+25.62523 58.85048 lineto
+31.71082 61.78627 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 40.81459 65.3614 moveto
+36.84883 63.91068 lineto
+40.16151 61.66077 lineto
+42.4694 64.20403 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 40.81459 65.3614 moveto
+36.84883 63.91068 lineto
+40.16151 61.66077 lineto
+42.4694 64.20403 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 34.57565 66.47415 moveto
+28.28026 65.46097 lineto
+31.71082 61.78627 lineto
+36.84883 63.91068 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 34.57565 66.47415 moveto
+28.28026 65.46097 lineto
+31.71082 61.78627 lineto
+36.84883 63.91068 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 40.16151 61.66077 moveto
+36.6787 58.57315 lineto
+41.85333 56.68411 lineto
+43.62564 60.32639 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 40.16151 61.66077 moveto
+36.6787 58.57315 lineto
+41.85333 56.68411 lineto
+43.62564 60.32639 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 32.23648 54.86298 moveto
+27.1019 50.41656 lineto
+35.56519 47.84203 lineto
+39.085 52.54898 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 32.23648 54.86298 moveto
+27.1019 50.41656 lineto
+35.56519 47.84203 lineto
+39.085 52.54898 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 18.8816 54.94041 moveto
+11.83014 49.90044 lineto
+21.59271 45.11833 lineto
+27.1019 50.41656 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 18.8816 54.94041 moveto
+11.83014 49.90044 lineto
+21.59271 45.11833 lineto
+27.1019 50.41656 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 36.6787 58.57315 moveto
+32.23648 54.86298 lineto
+39.085 52.54898 lineto
+41.85333 56.68411 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 36.6787 58.57315 moveto
+32.23648 54.86298 lineto
+39.085 52.54898 lineto
+41.85333 56.68411 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 36.84883 63.91068 moveto
+31.71082 61.78627 lineto
+36.6787 58.57315 lineto
+40.16151 61.66077 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 36.84883 63.91068 moveto
+31.71082 61.78627 lineto
+36.6787 58.57315 lineto
+40.16151 61.66077 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 25.62523 58.85048 moveto
+18.8816 54.94041 lineto
+27.1019 50.41656 lineto
+32.23648 54.86298 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 25.62523 58.85048 moveto
+18.8816 54.94041 lineto
+27.1019 50.41656 lineto
+32.23648 54.86298 lineto
+ closepath stroke
+ 1 1 0 setrgbcolor
+newpath 31.71082 61.78627 moveto
+25.62523 58.85048 lineto
+32.23648 54.86298 lineto
+36.6787 58.57315 lineto
+ closepath fill
+ 0 0 0 setrgbcolor
+newpath 31.71082 61.78627 moveto
+25.62523 58.85048 lineto
+32.23648 54.86298 lineto
+36.6787 58.57315 lineto
+ closepath stroke
+grestore
+grestore
+showpage
+%%EOF
--- /dev/null
+input mp-solid
+
+ vardef Transform(expr PT)=
+ save $ ; color $ ;
+ Xpart($)=0.6*Xpart(PT);
+ Ypart($)=0.6*Ypart(PT);
+ Zpart($)=1.75*Zpart(PT);
+ $
+enddef ;
+
+figureespace(-4u,-4u,4u,4u);
+fill feuillet;
+Initialisation(1500,-60,10,25);
+nb:=24;
+subh:=12;
+outcolor:=jaune;
+Objetsphere1("R=2");
+AffichageObjet1;
+finespace;
+
+%2
+
+figureespace(-4u,-4u,4u,4u);
+%traits:=false;
+fill feuillet;
+Initialisation(1500,-60,10,25);
+nb:=24;
+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;
+finespace;
+
+end
--- /dev/null
+input mp-solid
+
+vardef Transform(expr PT)=%pour la torsion.
+ 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);
+outcolor:=blanc;
+subh:=8;TR:=(0,0,-2);
+Objetgrille1("am=-7","an=7","bm=-7","bn=7");
+nb:=24; subh:=36;
+outcolor:=0.5[rouge,blanc];
+TR:=(0,0,0);
+Objettore2("R=4","r=2");
+nbobj:=2;
+DessineFusion;
+TraceAxes;
+finespace;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,50,20,15);
+outcolor:=blanc;
+subh:=8;TR:=(0,0,-1);
+Objetgrille1("am=-5","an=5","bm=-5","bn=5");
+nb:=24; subh:=36;
+TR:=(0,0,0);
+transformation:=true;
+outcolor:=0.5[rouge,blanc];
+Objettore2("R=4","r=2");
+nbobj:=2;
+DessineFusion;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+vardef Transform(expr PT)=%pour la flexion.
+ save $;
+ color $;
+ angy:=2*(Zpart(PT));
+ $=RotXYZ(PT);
+ $
+enddef;
+
+incolor:=0.5[vert,blanc];
+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;
+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(-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;
+color A;
+drawarrow Projette((0,0,Zpart(Image((-0.5,0.5,10)))))--Projette(Image((-0.5,0.5,10)));
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+echelle:=1;
+debut:=0;
+
+fillcolor:=0.5[orange,white];
+Transparence:=true;
+incolor:=0.5[orange,white];
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,55,20,150);
+ObjetOFF1("J67.off");
+AffichageObjet1;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+32 30 60
+
+-0.5915332925724 -0.2450211123788 0.5915332925726
+-0.2450211123787 -0.5915332925726 0.5915332925725
+-0.5915332925724 0.2450211123787 0.5915332925726
+-0.9380454727663 -0.0000000000001 0.3465121801939
+ 0.2450211123789 -0.5915332925725 0.5915332925725
+-0.2450211123787 0.5915332925725 0.5915332925726
+-0.5915332925725 -0.5915332925726 0.2450211123788
+ 0.5915332925726 -0.2450211123788 0.5915332925724
+ 0.2450211123788 0.5915332925725 0.5915332925726
+-0.9380454727663 -0.3465121801939 0.0000000000001
+ 0.5915332925726 0.2450211123787 0.5915332925725
+-0.5915332925726 0.5915332925725 0.2450211123789
+-0.9380454727663 0.3465121801937 0.0000000000002
+ 0.5915332925726 -0.5915332925725 0.2450211123787
+-0.5915332925725 -0.5915332925726 -0.2450211123788
+ 0.9380454727663 0.0000000000000 0.3465121801937
+-0.9380454727663 0.0000000000000 -0.3465121801937
+ 0.5915332925725 0.5915332925726 0.2450211123788
+-0.5915332925726 0.5915332925725 -0.2450211123787
+ 0.9380454727663 -0.3465121801937 -0.0000000000002
+ 0.5915332925726 -0.5915332925725 -0.2450211123789
+-0.5915332925726 -0.2450211123787 -0.5915332925725
+ 0.9380454727663 0.3465121801939 -0.0000000000001
+-0.2450211123788 -0.5915332925725 -0.5915332925726
+-0.5915332925726 0.2450211123788 -0.5915332925724
+ 0.5915332925725 0.5915332925726 -0.2450211123788
+ 0.2450211123787 -0.5915332925725 -0.5915332925726
+-0.2450211123789 0.5915332925725 -0.5915332925725
+ 0.9380454727663 0.0000000000001 -0.3465121801939
+ 0.5915332925724 -0.2450211123787 -0.5915332925726
+ 0.2450211123787 0.5915332925726 -0.5915332925725
+ 0.5915332925724 0.2450211123788 -0.5915332925726
+4 19 15 22 28
+4 25 31 28 22
+3 17 25 22
+4 10 17 22 15
+3 7 10 15
+4 13 7 15 19
+3 20 13 19
+4 29 20 19 28
+3 31 29 28
+4 12 3 9 16
+4 14 21 16 9
+3 6 14 9
+4 0 6 9 3
+3 2 0 3
+4 11 2 3 12
+3 18 11 12
+4 24 18 12 16
+3 21 24 16
+8 20 26 23 14 6 1 4 13
+8 31 30 27 24 21 23 26 29
+8 17 8 5 11 18 27 30 25
+8 7 4 1 0 2 5 8 10
+3 13 4 7
+3 1 6 0
+3 10 8 17
+3 5 2 11
+3 25 30 31
+3 27 18 24
+3 29 26 20
+3 23 21 14
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+echelle:=50;
+
+figureespace(-10u,-10u,10u,20u);
+Initialisation(2500,80,-70,50);
+outcolor:=0.7[rose,white];
+%Creux:=true;
+incolor:=jaune;
+LectureOBJ("../../data/Midpoly_04.obj");
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+echelle:=0.25;
+
+figureespace(-10u,-10u,10u,20u);
+Initialisation(2500,-80,80,50);
+outcolor:=0.7[rose,white];
+incolor:=jaune;
+LectureOBJ("../../data/Y3483.obj");
+finespace;
+end
\ No newline at end of file
--- /dev/null
+%fichier off:http://www.irit.fr/~Loic.Barthe/Enseignements/TPs_OpenGL/L3_IUP_SI/TP7/Maillages/triceratops.off
+
+input mp-solid
+
+echelle:=2;
+debut:=0;
+
+invnormale:=-1;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,-25,10,50);
+outcolor:=0.8*white;
+incolor:=gris;
+LectureOFF("../../data/triceratops.off");
+finespace;
+
+end
\ No newline at end of file
--- /dev/null
+%www-c.inria.fr/gamma/download/download.php
+
+input mp-solid
+
+echelle:=2;
+debut:=1;
+Creux:=true;
+outcolor:=0.5[jaune,white];
+incolor:=0.5[bleu,white];
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,-25,10,50);
+LectureOFF("../../data/10-61.off");
+finespace;
+
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+echelle:=5;
+debut:=1;
+arcenciel:=true;
+invnormale:=-1;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,30,20,50);
+LectureOFF("../../data/5_1.pc.off");
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,30,10);
+outcolor:=ciel;
+subh:=4;
+angx:=10;
+Objetanneau1("R=8","r=6","h=3");
+AffichageObjet1;
+finespace;
+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
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,-30,15,75);
+outcolor:=0.5[red,white];
+incolor:=0.5[jaune,white];
+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);
+finespace;
+end
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(50,-110,10,100);
+outcolor:=0.5[orange,white];
+incolor:=0.25[gris,white];
+draw Sparam("(u,v,u*u-v*v)",-1,1,0.05,-1,1,0.05);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,10,20,100);
+incolor:=0.75[jaune,white];
+outcolor:=0.5[green,white];
+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);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(50,0,-20,100);
+incolor:=0.75[orange,white];
+outcolor:=0.5[blue,white];
+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);
+finespace;
+end
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(100,5,10,25);
+incolor:=0.5[jaune,white];
+outcolor:=0.75[violet,blanc];
+drawarrow Projette((0,0,0))--Projette((0,3,3)) withpen pencircle scaled2bp;
+for l=-1 upto 5:
+ draw Projette((l,-1,0))--Projette((l,5,0)) withcolor gris;
+ draw Projette((-1,l,0))--Projette((5,l,0)) withcolor gris;
+endfor;
+TraceAxes;
+drawarrow Projette((0,0,0))--Projette((0,3,3)) withpen pencircle scaled2bp;
+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);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+prologues:=2;
+
+verbatimtex
+%&latex
+\documentclass[12pt]{article}
+\usepackage{fourier}
+\begin{document}
+etex
+
+input mp-solid
+
+invnormalelum:=-1;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(300,15,35.264,10);
+incolor:=0.5[green,white];
+outcolor:=0.25[orange,white];
+draw SurfZ("4*cos(X++Y)*mexp(-(X++Y)*50)",-15,15,-10,10,60,150);%60,120
+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}
+ x\in[-15,15]\\
+ y\in[-10,10]\\
+ \end{array}
+ \right.$ etex,u*(0,-5));
+finespace;
+end
\ No newline at end of file
--- /dev/null
+verbatimtex
+%&latex
+\documentclass[12pt]{article}
+\usepackage{fourier}
+\usepackage{amsmath}
+\begin{document}
+etex
+
+input mp-solid
+
+invnormalelum:=-1;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(300,70,30,10);
+incolor:=0.5[jaune,white];
+arcenciel:=true;
+draw SurfZ("if (X=0) and (Y=0):10 else:10*sin((X++Y))/(X++Y) fi",-8,8,-8,8,60,150);%60,120
+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}
+ x\in[-8,8]\\
+ y\in[-8,8]\\
+ \end{array}
+ \right.$ etex,u*(0,-4));
+finespace;
+end
\ No newline at end of file
--- /dev/null
+verbatimtex
+%&latex
+\documentclass[12pt]{article}
+\usepackage{fourier}
+\usepackage{amsmath}
+\begin{document}
+etex
+
+input mp-solid
+
+invnormalelum:=-1;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(300,45,35,10);
+incolor:=0.5[jaune,white];
+outcolor:=0.8[violet,white];
+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);
+label(btex $f(z)=10\times\dfrac{\sin x}x\dfrac{\sin y}y\mbox{ avec }\left\{\begin{array}{l}
+ x\in[-10,10]\\
+ y\in[-12,12]\\
+ \end{array}
+ \right.$ etex,u*(0,-4));
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-geo
+input mp-solid;
+
+vardef mappemonde(expr longobs,latobs)=
+ projection:="non";
+ Initialisation(5,longobs,latobs,400);
+ numeric phim,phip,phii;%phi moins -- phi plus - phi intermédiaire
+ phim=Phi+arcsind(rayon/Rho)-90;
+ phip=Phi+90-arcsind(rayon/Rho);
+ color pte[];
+ pte1=rayon*(cosd(phim)*cosd(Theta),cosd(phim)*sind(Theta),sind(phim));
+ pte2=rayon*(cosd(phip)*cosd(Theta),cosd(phip)*sind(Theta),sind(phip));
+ pte3=1/2[pte1,pte2];
+ pte4-pte3=Normal((0,0,0),pte1,pte2);
+ if (Phi>90):
+ phip:=180-phip;
+ phii:=180-phim;
+ phim:=phip;
+ phip:=phii;
+ fi;
+ if (Phi<-90):
+ phip:=-180-phip;
+ phii:=-180-phim;
+ phim:=phip;
+ phip:=phii;
+ fi;
+ fill cercles(pte3,pte1,pte3,pte1,pte4) withcolor ciel;
+ Lecture("Cameriquesud.dat");
+ Lecture("Ccaraibes.dat");
+ Lecture("Cameriquecentrale.dat");
+ Lecture("Cameriquenord.dat");
+ Lecture("Casie.dat");
+ Lecture("Ceurope.dat");
+ Lecture("Cafrique.dat");
+ if volcans=true:
+ Lecturevolcans;
+ fi;
+ if lacs=true:
+ Lecturelacs;
+ Lecturelacssup;
+ fi;
+ Lectureiles;
+ if capitales=true:
+ Lecturecapitales;
+ fi;
+ if fleuves=true:
+ Lecturerivieres;
+ %Lecturerivieressup;
+ fi;
+ if maillage=true:
+ drawoptions(withcolor gris);
+ MaillageSphere;
+ drawoptions();
+ fi;
+ if maille=true:
+ Maille;
+ fi;
+ draw cercles(pte3,pte1,pte3,pte1,pte4);
+enddef;
+
+vardef Transform(expr PT)=RotY(RotX(RotZ(PT)))
+enddef;
+
+transformation:=true;
+%2'
+figureespace(-7u,-7u,8u,7u);
+picture terre;
+fleuves:=false;
+lacs:=false;
+capitales:=false;
+terre=image(
+ mappemonde(80,20);
+ );
+fill feuillet;
+for k=1 upto 100:
+ fill fullcircle scaled (2*uniformdeviate(1)*mm) shifted((uniformdeviate(1))[coinbg,coinbd]+uniformdeviate(1)*(coinhg-coinbg)) withcolor jaune;
+endfor;
+draw terre;
+
+Initialisation(500,160,20,50);
+unit:=0.2;
+traits:=false;
+angy:=-60;
+outcolor:=rouge;
+path rocket[];
+rocket1=(0,4.6)--(-0.8,4.6)--(-0.85,5.6)--(-0.95,6.6)--(-1.05,7.6)--(-1.1,8.6)--(-1.2,9.6);
+rocket2=(-1.2,9.6)--(-1.25,10.6)--(-1.3,11.6)--(-1.35,12.6)--(-1.4,13.6)--(-1.4,14.6)--(-1.375,15.6)--(-1.27,16.6)--(-1.2,17.6)--(-1.05,18.6);
+rocket3=(-1.05,18.6)--(-0.85,19.6)--(-0.65,20.6)--(-0.35,21.6)--(-0.1,22.2)--(-0.1,23.75)--(0,23.75);
+subh:=24;
+perso1:=true;
+Ferme1:=false;
+string couleurperso;
+couleurperso="if ((tapj mod 48)=0) or ((tapj mod 48)=1) or ((tapj mod 48)=2) or ((tapj mod 48)=6) or ((tapj mod 48)=7) or ((tapj mod 48)=8) or ((tapj mod 48)=12) or ((tapj mod 48)=13) or ((tapj mod 48)=14) or ((tapj mod 48)=18) or ((tapj mod 48)=19) or ((tapj mod 48)=20) or ((tapj mod 48)=27) or ((tapj mod 48)=28) or ((tapj mod 48)=29) or ((tapj mod 48)=33) or ((tapj mod 48)=34) or ((tapj mod 48)=35) or ((tapj mod 48)=39) or ((tapj mod 48)=40) or ((tapj mod 48)=41) or ((tapj mod 48)=45) or ((tapj mod 48)=46) or ((tapj mod 48)=47):red else: white fi;";
+TR:=(0,-15,0);
+ObjetAnneau1("nbp=10",rocket2);
+outcolor:=rouge;
+for k=2 upto 6:
+ Ferme[k]:=true;
+endfor;
+ObjetAnneau2("nbp=7",rocket1);
+ObjetAnneau3("nbp=7",rocket3);
+path amortisseur;
+amortisseur=for k=-90 step 10 until 0:(cosd(k),sind(k)+1)--endfor for k=0 step 2 until 22:(cosd(k)*11.78-10.78,11.78*sind(k)+1)-- endfor (0,5.75);
+TR:=(0,-15,0)+(0,-5,0);
+ObjetAnneau4("nbp=22",amortisseur);
+angz:=150;
+TR:=(0,0,0);
+TR:=(0,-15,0)+Image((0,-5,0));
+ObjetAnneau5("nbp=22",amortisseur);
+angz:=-90;
+TR:=(0,0,0);
+TR:=(0,-15,0)+Image((0,-5,0));
+ObjetAnneau6("nbp=22",amortisseur);
+TR:=(0,-15,0)+(0,0,0);
+angz:=0;
+subh:=1;
+ObjetBiface7((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+angz:=150;
+ObjetBiface8((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+angz:=-90;
+ObjetBiface9((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+nbobj:=9;
+DessineFusion;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+vardef Transform(expr PT)=%pour la torsion.
+ save $;
+ color $;
+ angz:=subh*(Zpart(PT));
+ $=RotXYZ(PT);
+ $
+enddef;
+
+incolor:=0.5[vert,blanc];
+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;
+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(-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
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+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
\ No newline at end of file
--- /dev/null
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: -121 -86 209 233
+%%Creator: MetaPost
+%%CreationDate: 2009.03.20:2128
+%%Pages: 1
+%%DocumentFonts: CMR10
+ /cmr10 /CMR10 def
+/fshow {exch findfont exch scalefont setfont show}bind def
+%%EndProlog
+%%Page: 1 1
+gsave newpath -283.46451 -283.46451 moveto
+-283.46451 283.46451 lineto
+283.46451 283.46451 lineto
+283.46451 -283.46451 lineto
+ closepath clip
+ 0.8 setgray 0 0.5 dtransform truncate idtransform setlinewidth pop
+ [] 0 setdash 1 setlinecap 1 setlinejoin 10 setmiterlimit
+newpath 0 231.82251 moveto
+0 0 lineto
+207.84668 -31.05835 lineto stroke
+newpath -120 -53.79639 moveto
+0 0 lineto
+0 231.82251 lineto stroke
+newpath -120 -53.79639 moveto
+0 0 lineto
+207.84668 -31.05835 lineto stroke
+newpath -15 225.09796 moveto
+-15 -6.72455 lineto
+192.84668 -37.7829 lineto stroke
+newpath -94.01917 -57.67868 moveto
+25.98083 -3.8823 lineto
+25.98083 227.94022 lineto stroke
+newpath -120 -24.81857 moveto
+0 28.97781 lineto
+207.84668 -2.08054 lineto stroke
+newpath -30 218.37341 moveto
+-30 -13.4491 lineto
+177.84668 -44.50745 lineto stroke
+newpath -68.03833 -61.56097 moveto
+51.96167 -7.76459 lineto
+51.96167 224.05792 lineto stroke
+newpath -120 4.15924 moveto
+0 57.95563 lineto
+207.84668 26.89728 lineto stroke
+newpath -45 211.64886 moveto
+-45 -20.17365 lineto
+162.84668 -51.232 lineto stroke
+newpath -42.0575 -65.44327 moveto
+77.9425 -11.64688 lineto
+77.9425 220.17563 lineto stroke
+newpath -120 33.13705 moveto
+0 86.93344 lineto
+207.84668 55.87509 lineto stroke
+newpath -60 204.92432 moveto
+-60 -26.8982 lineto
+147.84668 -57.95654 lineto stroke
+newpath -16.07666 -69.32556 moveto
+103.92334 -15.52917 lineto
+103.92334 216.29333 lineto stroke
+newpath -120 62.11487 moveto
+0 115.91125 lineto
+207.84668 84.8529 lineto stroke
+newpath -75 198.19977 moveto
+-75 -33.62274 lineto
+132.84668 -64.68109 lineto stroke
+newpath 9.90417 -73.20786 moveto
+129.90417 -19.41147 lineto
+129.90417 212.41104 lineto stroke
+newpath -120 91.09268 moveto
+0 144.88907 lineto
+207.84668 113.83072 lineto stroke
+newpath -90 191.47522 moveto
+-90 -40.34729 lineto
+117.84668 -71.40564 lineto stroke
+newpath 35.88501 -77.09015 moveto
+155.88501 -23.29376 lineto
+155.88501 208.52875 lineto stroke
+newpath -120 120.0705 moveto
+0 173.86688 lineto
+207.84668 142.80853 lineto stroke
+newpath -105 184.75067 moveto
+-105 -47.07184 lineto
+102.84668 -78.13019 lineto stroke
+newpath 61.86584 -80.97244 moveto
+181.86584 -27.17606 lineto
+181.86584 204.64645 lineto stroke
+newpath -120 149.04831 moveto
+0 202.8447 lineto
+207.84668 171.78635 lineto stroke
+newpath -120 178.02612 moveto
+-120 -53.79639 lineto
+87.84668 -84.85474 lineto stroke
+newpath 87.84668 -84.85474 moveto
+207.84668 -31.05835 lineto
+207.84668 200.76416 lineto stroke
+newpath -120 178.02612 moveto
+0 231.82251 lineto
+207.84668 200.76416 lineto stroke
+ 0 0 1 setrgbcolor [12 6 3 6 ] 0 setdash
+newpath 0 0 moveto
+-75 -33.62274 lineto stroke
+ [] 0 setdash
+newpath -72.25441 -30.71455 moveto
+-75 -33.62274 lineto
+-71.00218 -33.50783 lineto
+ closepath
+gsave fill grestore stroke
+ 0 1 0 setrgbcolor [12 6 3 6 ] 0 setdash
+newpath 0 0 moveto
+129.90417 -19.41147 lineto stroke
+ [] 0 setdash
+newpath 126.02267 -20.37938 moveto
+129.90417 -19.41147 lineto
+126.47516 -17.35118 lineto
+ closepath
+gsave fill grestore stroke
+ 0 setgray 0.5 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [12 6 3 6 ] 0 setdash
+newpath 0 0 moveto
+0 144.88907 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 1.53053 141.19414 moveto
+0 144.88907 lineto
+-1.53053 141.19414 lineto
+ closepath
+gsave fill grestore stroke
+ 0.86667 0.53334 0.86667 setrgbcolor
+newpath 0 28.97781 moveto
+25.98083 25.09552 lineto
+10.98083 18.37097 lineto
+-15 22.25327 lineto
+ closepath fill
+ 0 setgray
+newpath 0 28.97781 moveto
+25.98083 25.09552 lineto
+10.98083 18.37097 lineto
+-15 22.25327 lineto
+ closepath stroke
+ 0.93333 0.26666 0.93333 setrgbcolor
+newpath 10.98083 -10.60684 moveto
+10.98083 18.37097 lineto
+25.98083 25.09552 lineto
+25.98083 -3.8823 lineto
+ closepath fill
+ 0 setgray
+newpath 10.98083 -10.60684 moveto
+10.98083 18.37097 lineto
+25.98083 25.09552 lineto
+25.98083 -3.8823 lineto
+ closepath stroke
+ 1 0 1 setrgbcolor
+newpath -15 -6.72455 moveto
+-15 22.25327 lineto
+10.98083 18.37097 lineto
+10.98083 -10.60684 lineto
+ closepath fill
+ 0 setgray
+newpath -15 -6.72455 moveto
+-15 22.25327 lineto
+10.98083 18.37097 lineto
+10.98083 -10.60684 lineto
+ closepath stroke
+123.96584 121.89262 moveto
+(V) cmr10 9.96265 fshow
+ 0 3 dtransform truncate idtransform setlinewidth pop
+newpath 121.86584 119.79263 moveto 0 0 rlineto stroke
+ 1 0 0 setrgbcolor 0.5
+ 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [3 3 ] 0 setdash
+newpath 121.86584 119.79263 moveto
+121.86584 -54.07425 lineto stroke
+ 0 0.5 dtransform truncate idtransform setlinewidth pop
+newpath 121.86584 119.79263 moveto
+0 173.86688 lineto stroke
+newpath -60 -26.8982 moveto
+121.86584 -54.07425 lineto stroke
+newpath 181.86584 -27.17606 moveto
+121.86584 -54.07425 lineto stroke
+gsave newpath 59.35272 99.4519 moveto
+121.70609 8.9978 lineto
+38.13766 -3.61908 lineto
+-24.21524 86.83502 lineto
+ closepath clip
+ 1 1 0.9 setrgbcolor
+newpath 59.35272 99.4519 moveto
+121.70609 8.9978 lineto
+38.13766 -3.61908 lineto
+-24.21524 86.83502 lineto
+ closepath fill
+ 0.90001 0.90001 0.85 setrgbcolor [] 0 setdash
+newpath 0 231.82251 moveto
+0 0 lineto
+207.84668 -31.05835 lineto stroke
+newpath -120 -53.79639 moveto
+0 0 lineto
+0 231.82251 lineto stroke
+newpath -120 -53.79639 moveto
+0 0 lineto
+207.84668 -31.05835 lineto stroke
+newpath -15 225.09796 moveto
+-15 -6.72455 lineto
+192.84668 -37.7829 lineto stroke
+newpath -94.01917 -57.67868 moveto
+25.98083 -3.8823 lineto
+25.98083 227.94022 lineto stroke
+newpath -120 -24.81857 moveto
+0 28.97781 lineto
+207.84668 -2.08054 lineto stroke
+newpath -30 218.37341 moveto
+-30 -13.4491 lineto
+177.84668 -44.50745 lineto stroke
+newpath -68.03833 -61.56097 moveto
+51.96167 -7.76459 lineto
+51.96167 224.05792 lineto stroke
+newpath -120 4.15924 moveto
+0 57.95563 lineto
+207.84668 26.89728 lineto stroke
+newpath -45 211.64886 moveto
+-45 -20.17365 lineto
+162.84668 -51.232 lineto stroke
+newpath -42.0575 -65.44327 moveto
+77.9425 -11.64688 lineto
+77.9425 220.17563 lineto stroke
+newpath -120 33.13705 moveto
+0 86.93344 lineto
+207.84668 55.87509 lineto stroke
+newpath -60 204.92432 moveto
+-60 -26.8982 lineto
+147.84668 -57.95654 lineto stroke
+newpath -16.07666 -69.32556 moveto
+103.92334 -15.52917 lineto
+103.92334 216.29333 lineto stroke
+newpath -120 62.11487 moveto
+0 115.91125 lineto
+207.84668 84.8529 lineto stroke
+newpath -75 198.19977 moveto
+-75 -33.62274 lineto
+132.84668 -64.68109 lineto stroke
+newpath 9.90417 -73.20786 moveto
+129.90417 -19.41147 lineto
+129.90417 212.41104 lineto stroke
+newpath -120 91.09268 moveto
+0 144.88907 lineto
+207.84668 113.83072 lineto stroke
+newpath -90 191.47522 moveto
+-90 -40.34729 lineto
+117.84668 -71.40564 lineto stroke
+newpath 35.88501 -77.09015 moveto
+155.88501 -23.29376 lineto
+155.88501 208.52875 lineto stroke
+newpath -105 184.75067 moveto
+-105 -47.07184 lineto
+102.84668 -78.13019 lineto stroke
+newpath 61.86584 -80.97244 moveto
+181.86584 -27.17606 lineto
+181.86584 204.64645 lineto stroke
+newpath -120 178.02612 moveto
+-120 -53.79639 lineto
+87.84668 -84.85474 lineto stroke
+newpath 87.84668 -84.85474 moveto
+207.84668 -31.05835 lineto
+207.84668 200.76416 lineto stroke
+ 0.5 0.5 0.95 setrgbcolor [12 6 3 6 ] 0 setdash
+newpath 0 0 moveto
+-75 -33.62274 lineto stroke
+ 0.5 1 0.45 setrgbcolor
+newpath 0 0 moveto
+129.90417 -19.41147 lineto stroke
+ 0.5 0.5 0.45 setrgbcolor 0.5
+ 0 dtransform exch truncate exch idtransform pop setlinewidth
+newpath 0 0 moveto
+0 144.88907 lineto stroke
+ 0.93333 0.76668 0.88333 setrgbcolor
+newpath 0 28.97781 moveto
+25.98083 25.09552 lineto
+10.98083 18.37097 lineto
+-15 22.25327 lineto
+ closepath fill
+ 0.5 0.5 0.45 setrgbcolor 0 0.5
+ dtransform truncate idtransform setlinewidth pop [] 0 setdash
+newpath 0 28.97781 moveto
+25.98083 25.09552 lineto
+10.98083 18.37097 lineto
+-15 22.25327 lineto
+ closepath stroke
+ 0.96667 0.63333 0.91666 setrgbcolor
+newpath 10.98083 -10.60684 moveto
+10.98083 18.37097 lineto
+25.98083 25.09552 lineto
+25.98083 -3.8823 lineto
+ closepath fill
+ 0.5 0.5 0.45 setrgbcolor
+newpath 10.98083 -10.60684 moveto
+10.98083 18.37097 lineto
+25.98083 25.09552 lineto
+25.98083 -3.8823 lineto
+ closepath stroke
+ 1 0.5 0.95 setrgbcolor
+newpath -15 -6.72455 moveto
+-15 22.25327 lineto
+10.98083 18.37097 lineto
+10.98083 -10.60684 lineto
+ closepath fill
+ 0.5 0.5 0.45 setrgbcolor
+newpath -15 -6.72455 moveto
+-15 22.25327 lineto
+10.98083 18.37097 lineto
+10.98083 -10.60684 lineto
+ closepath stroke
+ 1 0.5 0.45 setrgbcolor 0.5
+ 0 dtransform exch truncate exch idtransform pop setlinewidth
+ [3 3 ] 0 setdash
+newpath 121.86584 119.79263 moveto
+121.86584 -54.07425 lineto stroke
+grestore
+ 1 1 0 setrgbcolor 0 0.5 dtransform truncate idtransform setlinewidth pop
+ [] 0 setdash 1 setlinejoin 10 setmiterlimit
+newpath 59.35272 99.4519 moveto
+121.70609 8.9978 lineto
+38.13766 -3.61908 lineto
+-24.21524 86.83502 lineto
+ closepath stroke
+ 0 1 0 setrgbcolor 1 setlinecap
+newpath -15 -6.72455 moveto
+121.86584 119.79263 lineto stroke
+newpath 10.98083 -10.60684 moveto
+121.86584 119.79263 lineto stroke
+newpath 25.98083 -3.8823 moveto
+121.86584 119.79263 lineto stroke
+newpath 0 28.97781 moveto
+121.86584 119.79263 lineto stroke
+newpath -15 22.25327 moveto
+121.86584 119.79263 lineto stroke
+newpath 10.98083 18.37097 moveto
+121.86584 119.79263 lineto stroke
+newpath 25.98083 25.09552 moveto
+121.86584 119.79263 lineto stroke
+ 0 setgray
+newpath 36.36017 40.75195 moveto
+47.20276 31.98944 lineto
+41.86935 46.62369 lineto
+30.72144 54.83734 lineto
+ closepath stroke
+newpath 47.20276 31.98944 moveto
+60.05035 40.06119 lineto
+55.83527 54.58008 lineto
+41.86935 46.62369 lineto stroke
+newpath 55.83527 54.58008 moveto
+44.12842 61.86264 lineto
+30.72144 54.83734 lineto stroke
+grestore
+showpage
+%%EOF
--- /dev/null
+input ../../newjpv02
+
+typerepre:="persp";
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,15,30);
+color A,B,C,D,E,F,G,H;
+drawoptions(withcolor gris);
+TraceGrille(8);
+drawoptions();
+TraceAxes;
+ObjetCube(1);
+DessineObjetNew(gris,violet);
+color V;
+V=(4,7,6);
+dotlabel.urt("V",Projette(V));
+draw Projette(V)--Projette((Xpart(V),Ypart(V),0)) dashed evenly withcolor red;
+draw Projette(V)--Projette((0,0,Zpart(V))) dashed evenly withcolor red;
+draw Projette((Xpart(V),0,0))--Projette((Xpart(V),Ypart(V),0)) dashed evenly withcolor red;
+draw Projette((0,Ypart(V),0))--Projette((Xpart(V),Ypart(V),0)) dashed evenly withcolor red;
+color Pl[],I,U,W;
+I=2/5[(0,0,0),V];
+U=0.2(-Ypart(V),Xpart(V),0);
+W=0.2(0,-Zpart(V),Ypart(V));
+Pl[1]=I+U+W;
+Pl[2]=I+U-W;
+Pl[3]=I-U-W;
+Pl[4]=I-U+W;
+fillcolor:=0.9[jaune,white];
+transparence Projette(Pl1)--Projette(Pl2)--Projette(Pl3)--Projette(Pl4)--cycle;
+draw Projette(Pl1)--Projette(Pl2)--Projette(Pl3)--Projette(Pl4)--cycle withcolor jaune;
+drawoptions(withcolor vert);
+draw Projette(Sommet1)--Projette(V);
+draw Projette(Sommet2)--Projette(V);
+draw Projette(Sommet3)--Projette(V);
+draw Projette(Sommet5)--Projette(V);
+draw Projette(Sommet6)--Projette(V);
+draw Projette(Sommet7)--Projette(V);
+draw Projette(Sommet8)--Projette(V);
+drawoptions();
+color II[];
+II1=IntersectionPlanDroite(Pl1,Pl2,Pl3,Sommet1,V);
+II2=IntersectionPlanDroite(Pl1,Pl2,Pl3,Sommet2,V);
+II3=IntersectionPlanDroite(Pl1,Pl2,Pl3,Sommet3,V);
+II5=IntersectionPlanDroite(Pl1,Pl2,Pl3,Sommet5,V);
+II6=IntersectionPlanDroite(Pl1,Pl2,Pl3,Sommet6,V);
+II7=IntersectionPlanDroite(Pl1,Pl2,Pl3,Sommet7,V);
+II8=IntersectionPlanDroite(Pl1,Pl2,Pl3,Sommet8,V);
+draw Projette(II1)--Projette(II2)--Projette(II7)--Projette(II6)--cycle;
+draw Projette(II2)--Projette(II3)--Projette(II8)--Projette(II7);
+draw Projette(II8)--Projette(II5)--Projette(II6);
+finespace;
+
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+nb:=48;
+subh:=8;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,-10,15,30);
+Lumiere:=Oeil;
+outcolor:=0.5[vert,blanc];
+incolor:=orange;%0.5[orange,blanc];
+r:=1;
+q:=4;
+draw
+Fonction("(r*((q+1)*cos(t)-cos((q+1)*t)),r*((q+1)*sin(t)-sin((q+1)*t)),-2)",-pi,pi,0.0628)
+withpen pencircle scaled1.5bp withcolor bleu;
+Ferme1:=false;
+ObjetCone1("(r*((q+1)*cos(u)-cos((q+1)*u)),r*((q+1)*sin(u)-sin((q+1)*u)),-2)",0,pi,-2,"orig=(0,1,3)");
+AffichageObjet1;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,60,60);
+outcolor:=0.5[red,white];
+incolor:=1.1*gris;
+draw Sparam("(u,v,(u**2+v**2)**2)",-1.25,1.25,0.1,-1.25,1.25,0.1);
+finespace;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,70,-10,75);
+arcenciel:=true;
+incolor:=1.1*gris;
+draw Sparam("(v,u,u*(u**2-3*(v**2)))",-1,1,0.05,-1,1,0.05);
+finespace;
+
+end
\ No newline at end of file
--- /dev/null
+input mp-solid;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(5,30,50,20);
+draw Fonction("(sin(t),t/3,cos(t))",-2,25,0.01);
+finespace;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(5,30,50,50);
+outcolor:=0.5[red,white];
+draw Tube("(sin(t),t/3,cos(t))","(cos(t),1/3,-sin(t))","(-sin(t),0,-cos(t))",0.1,-2,200,0.1);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(5,30,20,20);
+draw Fonction("(cos(t)*(1+abs(t)/5),1.5*sin(t),0.2*t)",-15,15,0.1);
+finespace;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(5,30,20,50);
+outcolor:=0.5[blue,white];
+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,-10,200,0.1);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[rose,white];
+incolor:=0.5[orange,white];
+
+figureespace(-10u,-10u,10u,10u);
+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;
+finespace;
+ end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[rose,white];
+defaultfont:="cmr7";
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,30,30,50);
+numeroteface:=true;%<-
+subh:=5;
+Objetcube1("a=3");
+AffichageObjet1;
+finespace;
+ end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+nb:=48;subh:=12;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,30);
+arcenciel:=true;
+incolor:=orange;
+Ferme1:=false;
+ObjetCylindre1("(3*(cos(u)**3),3*(sin(u)**3),-2+v)",pi,-pi,0,4);
+AffichageObjet1;
+finespace;
+unit:=0.6;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,50);
+drawoptions(withcolor gris);
+for k=-4 upto 4:
+ draw Projette((-4,k,0))--Projette((4,k,0));
+ draw Projette((k,-4,0))--Projette((k,4,0));
+endfor;
+drawoptions();
+Lumiere:=Oeil;
+arcenciel:=true;
+incolor:=orange;
+Ferme1:=false;
+ObjetCylindre1("(3*(cos(u)**3),3*(sin(u)**3)+v,2*v)",pi,-pi,0,2);
+AffichageObjet1;
+drawarrow Projette((0,3,0))--Projette((0,5,4)) withpen pencircle scaled2bp withcolor violet;
+label.rt(btex $\overrightarrow v=(0;2;4)$ etex rotated angle(Projette((0,5,4)) -Projette((0,3,0))),1/2[Projette((0,3,0)),Projette((0,5,4))]);
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,60,30,25);
+outcolor:=blanc;
+creux:=false;
+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;
+
+angx:=0; TR:=(0,0,0);
+
+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;
+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
\ No newline at end of file
--- /dev/null
+% Written by DVItoMP, Version 0.64/color (Web2C 7.5.4)
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmsy10";
+_s(char0,_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,-0.8302)--(7.7487,-0.8302)--
+ (7.7487,5.8115)--(0,5.8115)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n1="cmr10";
+_s("1",_n1,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(4.9813,0.0000)--
+ (4.9813,6.4204)--(0,6.4204)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n2="cmmi10";
+_s("times",_n2,1.00000,0.0000,0.0000,);
+_n1="cmr10";
+_s("10",_n1,1.00000,25.0861,0.0000,);
+setbounds _p to (0,0.0000)--(35.0487,0.0000)--
+ (35.0487,6.5706)--(0,6.5706)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n1="cmr10";
+_s(char34&char34,_n1,1.00000,0.0000,0.0000,);
+_n2="cmmi10";
+_s("sup",_n2,1.00000,9.9627,0.0000,);
+_n0="cmsy10";
+_s(char0,_n0,1.00000,25.3483,0.0000,);
+setbounds _p to (0,-1.9372)--(33.0970,-1.9372)--
+ (33.0970,6.9185)--(0,6.9185)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n1="cmr10";
+_s(char34&char34,_n1,1.00000,0.0000,0.0000,);
+_n2="cmmi10";
+_s("sup",_n2,1.00000,9.9627,0.0000,);
+_s("2",_n1,1.00000,25.3483,0.0000,);
+setbounds _p to (0,-1.9372)--(30.3296,-1.9372)--
+ (30.3296,6.9185)--(0,6.9185)--cycle;
+_p endgroup
+mpxbreak
--- /dev/null
+input mp-solid
+
+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
\ No newline at end of file
--- /dev/null
+input ../../newjpv
+input objets
+
+outcolor:=0.5[rouge,blanc];
+incolor:=0.5[vert,blanc];
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,40,20,100);
+Lumiere:=Oeil;
+nb:=10;
+Ferme1:=true;
+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);
+Ferme2:=true;
+ObjetTube2("(cos(t),sin(t),0.25)","(-sin(t),cos(t),0)",0.15,0,50,0.12566);
+nbobj=2;
+DessineFusion;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[ciel,blanc];
+incolor:=0.5[jaune,blanc];
+
+nb:=24;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,10,50);
+Lumiere:=Oeil;
+angy:=80;
+subh:=24;
+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
\ No newline at end of file
--- /dev/null
+input mp-solid;
+
+vardef Transform(expr PT)=RotX(RotY(RotZ(PT)))
+enddef;
+
+transformation:=true;
+
+%30"
+figureespace(-10u,-10u,10u,10u);
+fill feuillet;
+for k=1 upto 100:
+ fill fullcircle scaled (2*uniformdeviate(1)*mm) shifted((uniformdeviate(1))[coinbg,coinbd]+uniformdeviate(1)*(coinhg-coinbg)) withcolor jaune;
+endfor;
+
+Initialisation(500,-50,20,50);
+unit:=0.2;
+traits:=false;
+angx:=-80;
+angy:=20;
+outcolor:=rouge;
+path rocket[];
+rocket1=(0,4.6)--(-0.8,4.6)--(-0.85,5.6)--(-0.95,6.6)--(-1.05,7.6)--(-1.1,8.6)--(-1.2,9.6);
+rocket2=(-1.2,9.6)--(-1.25,10.6)--(-1.3,11.6)--(-1.35,12.6)--(-1.4,13.6)--(-1.4,14.6)--(-1.375,15.6)--(-1.27,16.6)--(-1.2,17.6)--(-1.05,18.6);
+rocket3=(-1.05,18.6)--(-0.85,19.6)--(-0.65,20.6)--(-0.35,21.6)--(-0.1,22.2)--(-0.1,23.75)--(0,23.75);
+subh:=24;
+path propulsion;
+propulsion=(0,4.6)--(-0.8,4.6)--(0,0);
+perso1:=true;
+Ferme1:=false;
+string couleurperso;
+couleurperso="if ((tapj mod 48)=0) or ((tapj mod 48)=1) or ((tapj mod 48)=2) or ((tapj mod 48)=6) or ((tapj mod 48)=7) or ((tapj mod 48)=8) or ((tapj mod 48)=12) or ((tapj mod 48)=13) or ((tapj mod 48)=14) or ((tapj mod 48)=18) or ((tapj mod 48)=19) or ((tapj mod 48)=20) or ((tapj mod 48)=27) or ((tapj mod 48)=28) or ((tapj mod 48)=29) or ((tapj mod 48)=33) or ((tapj mod 48)=34) or ((tapj mod 48)=35) or ((tapj mod 48)=39) or ((tapj mod 48)=40) or ((tapj mod 48)=41) or ((tapj mod 48)=45) or ((tapj mod 48)=46) or ((tapj mod 48)=47):red else: white fi;";
+ObjetAnneau1("nbp=10",rocket2);
+outcolor:=rouge;
+for k=3 upto 6:
+ Ferme[k]:=true;
+endfor;
+incolor:=0.5[jaune,orange];
+Ferme2:=false;
+ObjetAnneau2("nbp=7",rocket1);
+ObjetAnneau3("nbp=7",rocket3);
+Ferme10:=true;
+outcolor:=0.5[jaune,orange];
+ObjetAnneau10("nbp=3",propulsion);
+outcolor:=rouge;
+path amortisseur;
+amortisseur=for k=-90 step 10 until 0:(cosd(k),sind(k)+1)--endfor for k=0 step 2 until 22:(cosd(k)*11.78-10.78,11.78*sind(k)+1)-- endfor (0,5.75);
+TR:=Image((0,-5,0));
+ObjetAnneau4("nbp=22",amortisseur);
+angz:=120;
+TR:=(0,0,0);
+TR:=Image((0,-5,0));
+ObjetAnneau5("nbp=22",amortisseur);
+angz:=-120;
+TR:=(0,0,0);
+TR:=Image((0,-5,0));
+ObjetAnneau6("nbp=22",amortisseur);
+TR:=(0,0,0);
+angz:=0;
+subh:=1;
+ObjetBiface7((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+angz:=120;
+ObjetBiface8((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+angz:=-120;
+ObjetBiface9((0,-0.8,4.6),(0,-0.85,5.6),(0,-0.95,6.6),(0,-1.05,7.6),(0,-1.1,8.6),(0,-1.2,9.6),(0,-2,9.2),(0,-3,8.3),(0,-4,7.2),(0,-5,5.75),(0,-4.5765,4.6402),(0,-4.35,3.8498),(0,-4.1789,3.0456),(0,-4.0645,2.2313),(0,-4.0072,1.4111),(0,-4,1),(0,-3.2,2.2),(0,-2.5,3),(0,-1.6,4));
+nbobj:=10;
+DessineFusion;
+clip currentpicture to (fullcircle scaled 16cm);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,20u,10u);
+Initialisation(500,30,20,50);
+Ferme1:=true;
+outcolor:=0.5[rouge,white];
+ObjetTube1("(sin(t),t/3,cos(t))","(cos(t),1/3,-sin(t))",0.1,-2,90,0.1);
+Ferme2:=true;
+outcolor:=0.5[jaune,white];
+ObjetTube2("(cos(t)+1,t+2,t)","(-sin(t),1,1)",0.1,-1,30,0.1);
+nbobj:=2;
+DessineFusion;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+%27''
+figureespace(-20u,-20u,20u,20u);
+Initialisation(500,60,20,30);
+creux:=true;
+nb:=16;%16
+subh:=18;%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
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=blanc;
+incolor:=0.5[vert,blanc];
+
+%30''
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,60,40,50);
+nb:=18; subh:=24;
+angy:=90; TR:=(-1,0,0);
+Objetcylindre1("r=0.5","h=7");
+TR:=(0,0,0);
+nb:=12;
+Ferme2:=false;
+ObjetTube2("(sin(t),cos(t),t/5)","(cos(t),-sin(t),1/5)",0.25,-5,165,0.2);
+nbobj:=2;
+DessineFusion;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[jaune,white];
+incolor:=0.5[vert,white];
+
+nb:=12; subh:=36;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,20,20,50);
+creux:=true;
+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
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+%23''
+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
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+satu:=1;
+luminosite:=1;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(300,10,30,30);
+arcenciel:=true;
+nb:=8;subh:=6;
+Objetgrille1("am=-3","an=5","bm=-3","bn=3");
+AffichageObjet1;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(300,10,30,30);
+arcenciel:=true;
+nb:=8;subh:=6;
+Objetgrille1("am=-3","an=5","bm=-3","bn=3");
+AffichageObjet1;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(300,10,30,30);
+perso1:=true;
+couleurperso:="(tapj/48)[rouge,vert];";
+nb:=8;subh:=6;
+Objetgrille1("am=-3","an=5","bm=-3","bn=3");
+AffichageObjet1;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+%1'9"
+figureespace(-10u,-10u,10u,10u);
+Initialisation(200,20,20,15);
+arcenciel:=true;
+incolor:=gris;
+draw Tuben("(0.5*t*sin(0.707)*cos(t),0.5*sin(0.707)*t*sin(t),-0.5*t*cos(0.707))","(0.5*sin(0.707)*(cos(t)-t*sin(t)),0.5*sin(0.707)*(sin(t)+t*cos(t)),-0.5*cos(0.707))",0.4,-25.4,508,0.1);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+satu:=1;
+
+%1'9"
+figureespace(-10u,-10u,10u,10u);
+Initialisation(5000,30,30,40);
+arcenciel:=true;
+incolor:=0.9[gris,blanc];
+draw SurfZ("sin((X**2+Y**2)/3)",-5,5,-5,5,90,120);
+TraceAxesD(4,3,3);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+%1"
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,50,60,40);
+arcenciel:=true;
+incolor:=0.9[gris,blanc];
+draw SurfZ("X*Y*(X**2-Y**2)*0.1",-3,3,-3,3,30,60);
+TraceAxesD(3,3,5);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+%2"
+figureespace(-10u,-10u,10u,10u);
+Initialisation(2000,20,-10,25);
+arcenciel:=true;
+incolor:=0.5[gris,white];
+draw Sparam("(1.21**v*(sin(u)*cos(u)),1.21**v*(sin(u)**2*sin(v)),1.21**v*(sin(u)**2*cos(v)))",pi/24,11*pi/12,pi/24,0,10*pi/4,pi/24);
+TraceAxesD(8,5,5);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+%5"
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,20,10,10);
+
+vardef Pp(expr R,h)=(0,0)--
+for k=-33 step 10 until 43:
+ (cosd(k)*0.5*h-0.2*h,0.3*h+0.5*h*sind(k))--
+endfor
+for l=0 step 15 until 90:
+ (0.8*R*cosd(l)+0.2*R,0.8*R*sind(l)+0.6*h)--
+endfor
+(0,h)
+enddef;
+
+outcolor:=blanc;
+nb:=30;subh:=15;
+h=10;R=5;
+Ferme1:=true;
+ObjetAnneau1("nbp=18",Pp(R,h));
+angx:=-20;
+outcolor:=0.5[rouge,blanc];
+TR:=(-4,2.5,0);
+h:=5;R:=2.5;
+Ferme2:=true;
+ObjetAnneau2("nbp=18",Pp(R,h));
+angx:=30;
+TR:=(-4,-4,0);
+h:=4;R:=2;
+outcolor:=0.5[jaune,white];
+Ferme3:=true;
+ObjetAnneau3("nbp=18",Pp(R,h));
+nbobj:=3;
+DessineFusion;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+vardef grillexy(expr aa,bb,cc,dd)=
+ save _grillexy;
+ picture _grillexy;
+ color Fc[][];color G[][];
+ for l=aa upto bb:
+ for k=cc upto dd:
+ G[l][k]=(k,l,0);
+ endfor;
+ endfor;
+ apj:=0;
+ for l=aa upto (bb-1):
+ for k=cc upto (dd-1):
+ apj:=apj+1;
+ cpt[apj]:=apj;
+ Fc[apj][1]:=G[l][k];
+ Fc[apj][2]:=G[l][k+1];
+ Fc[apj][3]:=G[l+1][k+1];
+ Fc[apj][4]:=G[l+1][k];
+ Fc[apj][5]:=(Fc[apj][1]+Fc[apj][2]+Fc[apj][3]+Fc[apj][4])/4;
+ ALT[apj]:=-Zpart(GCoord(Fc[apj][1]));
+ endfor;
+ endfor;
+ QS(1,apj);
+ _grillexy=image(
+ for k=1 upto apj:
+ fill for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if arcenciel: Hsvtorgb(((k/apj)[0*360,1*360],0.5,0.5))
+ else: couleur fi;
+ draw for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withpen pencircle scaled0.25bp;
+ endfor;
+ );
+ _grillexy
+enddef;
+
+vardef grillexz(expr aa,bb,cc,dd)=
+ save _grillexz;
+ picture _grillexz;
+ color Fc[][];color G[][];
+ for l=aa upto bb:
+ for k=cc upto dd:
+ G[l][k]=(k/10,0,l/10);
+ endfor;
+ endfor;
+ apj:=0;
+ for l=aa upto (bb-1):
+ for k=cc upto (dd-1):
+ apj:=apj+1;
+ cpt[apj]:=apj;
+ Fc[apj][1]:=G[l][k];
+ Fc[apj][2]:=G[l][k+1];
+ Fc[apj][3]:=G[l+1][k+1];
+ Fc[apj][4]:=G[l+1][k];
+ Fc[apj][5]:=(Fc[apj][1]+Fc[apj][2]+Fc[apj][3]+Fc[apj][4])/4;
+ ALT[apj]:=-Zpart(GCoord(Fc[apj][1]));
+ endfor;
+ endfor;
+ QS(1,apj);
+ _grillexz=image(
+ for k=1 upto apj:
+ fill for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if arcenciel: Hsvtorgb((180,(cpt[k]/apj)[0,1],(cpt[k]/apj)[0,1]))
+ else: couleur fi;
+ endfor;
+ );
+ _grillexz
+enddef;
+
+vardef grilleyz(expr aa,bb,cc,dd)=
+ save _grilleyz;
+ picture _grilleyz;
+ color Fc[][];color G[][];
+ for l=aa upto bb:
+ for k=cc upto dd:
+ G[l][k]=(0,k/10,l/10);
+ endfor;
+ endfor;
+ apj:=0;
+ for l=aa upto (bb-1):
+ for k=cc upto (dd-1):
+ apj:=apj+1;
+ cpt[apj]:=apj;
+ Fc[apj][1]:=G[l][k];
+ Fc[apj][2]:=G[l][k+1];
+ Fc[apj][3]:=G[l+1][k+1];
+ Fc[apj][4]:=G[l+1][k];
+ Fc[apj][5]:=(Fc[apj][1]+Fc[apj][2]+Fc[apj][3]+Fc[apj][4])/4;
+ ALT[apj]:=-Zpart(GCoord(Fc[apj][1]));
+ endfor;
+ endfor;
+ QS(1,apj);
+ _grilleyz=image(
+ for k=1 upto apj:
+ fill for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if arcenciel: Hsvtorgb((120,(cpt[k]/apj)[0,1],(cpt[k]/apj)[0,1]))
+ else: couleur fi;
+ endfor;
+ );
+ _grilleyz
+enddef;
+
+vardef grillecirc(expr aa,bb)=
+ save _grillecirc;
+ picture _grillecirc;
+ color Fc[][];color G[][];
+ for l=aa step 5 until bb:%upto bb:
+ for k=0 upto 10:
+ G[l][k]=((k/10)*3*cosd(l),(k/10)*3*sind(-l),2);
+ endfor;
+ endfor;
+ apj:=0;
+ for l=aa step 5 until (bb-5):
+ for k=0 upto 9:
+ apj:=apj+1;
+ cpt[apj]:=apj;
+ Fc[apj][1]:=G[l][k];
+ Fc[apj][2]:=G[l][k+1];
+ Fc[apj][3]:=G[l+5][k+1];
+ Fc[apj][4]:=G[l+5][k];
+ Fc[apj][5]:=(Fc[apj][1]+Fc[apj][2]+Fc[apj][3]+Fc[apj][4])/4;
+ ALT[apj]:=-Zpart(GCoord(Fc[apj][1]));
+ endfor;
+ endfor;
+ QS(1,apj);
+ _grillecirc=image(
+ for k=1 upto apj:
+ fill for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if arcenciel: Hsvtorgb((aa+180,(cpt[k]/apj)[0,1],1))
+ else: couleur fi;
+ endfor;
+ );
+ _grillecirc
+enddef;
+
+vardef tranche(expr aa,bb)=
+ save _tranche;
+ picture _tranche;
+ color Fc[][];color G[][];
+ for l=aa step 5 until bb:
+ for k=0 upto 10:
+ G[l][k]=(3*cosd(l),3*sind(-l),2*k/10);
+ endfor;
+ endfor;
+ apj:=0;
+ for l=aa step 5 until (bb-5):
+ for k=0 upto 9:
+ apj:=apj+1;
+ cpt[apj]:=apj;
+ Fc[apj][1]:=G[l][k];
+ Fc[apj][2]:=G[l][k+1];
+ Fc[apj][3]:=G[l+5][k+1];
+ Fc[apj][4]:=G[l+5][k];
+ Fc[apj][5]:=(Fc[apj][1]+Fc[apj][2]+Fc[apj][3]+Fc[apj][4])/4;
+ ALT[apj]:=-Zpart(GCoord(Fc[apj][1]));
+ endfor;
+ endfor;
+ QS(1,apj);
+ _tranche=image(
+ for k=1 upto apj:
+ fill for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if arcenciel: Hsvtorgb((aa+180,1,(cpt[k]/apj)[0,1]))
+ else: couleur fi;
+ endfor;
+ );
+ _tranche
+enddef;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,45,20,50);
+arcenciel:=true;
+for k=90 step 5 until 265:
+ draw tranche(k,k+5);
+endfor;
+for k=0 step 5 until 40:
+ draw tranche(k,k+5);
+endfor;
+draw grillexz(0,20,0,30);
+draw grilleyz(0,20,0,30);
+for k=0 step 5 until 265:
+ draw grillecirc(k,k+5);
+endfor;
+drawarrow Projette((0,0,1))--Projette((0,3,1)) withpen pencircle scaled 2bp;
+label.top(btex Saturation etex rotated(angle(Projette((0,3,1))-Projette((0,0,1)))),Projette((0,1.5,1)));
+drawarrow Projette((3.2*cosd(240),3.2*sind(-240),0))--Projette((3.2*cosd(240),3.2*sind(-240),2)) withpen pencircle scaled 2bp;
+label.rt(btex Valeur etex rotated(angle(Projette((3.2*cosd(240),3.2*sind(-240),0))-Projette((3.2*cosd(240),3.2*sind(-240),2)))),Projette((3.2*cosd(240),3.2*sind(-240),1)));
+drawarrow Projette((3.2*cosd(-30),3.2*sind(30),1.8))..Projette(((3.2*cosd(10),3.2*sind(-10),1.8)))..Projette(((3.2*cosd(20),3.2*sind(-20),1.8)))..Projette(((3.2*cosd(30),3.2*sind(-30),1.8))) withpen pencircle scaled 2bp;
+label.bot(btex Teinte etex rotated angle(Projette(((3.2*cosd(-30),3.2*sind(30),1.8)))-Projette((3.2*cosd(30),3.2*sind(-30),1.8))),Projette(((3.2*cosd(0),3.2*sind(0),1.8))));
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[jaune,white];
+incolor:=0.5[vert,white];
+
+figureespace(-10u,-10u,10u,10u);
+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:%if k=a:b-1 else:b fi downto 0:
+ ,(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
+ );
+Ferme1:=false;
+AffichageObjet1;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+
+nb:=16;
+unit:=0.8;
+Initialisation(1000,20,45,37.5);
+for k=-5 upto 5:
+ draw Projette((k,-5,0))--Projette((k,5,0));
+ draw Projette((-5,k,0))--Projette((5,k,0));
+endfor;
+eclairage:=false;
+outcolor:=blanc;
+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);
+
+finespace;
+end
\ No newline at end of file
--- /dev/null
+% Written by metapost version 1.208
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("x",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(5.6939,0.0000)--
+ (5.6939,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("y",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,-1.9372)--(5.2419,-1.9372)--
+ (5.2419,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("z",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(5.0713,0.0000)--
+ (5.0713,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("x",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(5.6939,0.0000)--
+ (5.6939,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("y",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,-1.9372)--(5.2419,-1.9372)--
+ (5.2419,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("z",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(5.0713,0.0000)--
+ (5.0713,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
--- /dev/null
+input mp-solid
+
+echelle:=10;
+debut:=1;
+outcolor:=0.5[bleu,white];
+incolor:=1.1gris;
+Creux:=true;
+
+%1 sans eclairage, sans arcenciel
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,150);
+eclairage:=false;
+LectureOFF("../../data/10-61.off");
+finespace;
+%2 avec eclairage, sans arcenciel
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,150);
+eclairage:=true;
+LectureOFF("../../data/10-61.off");
+finespace;
+%3 sans eclairage, avec arcenciel
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,150);
+eclairage:=false;
+arcenciel:=true;
+LectureOFF("../../data/10-61.off");
+finespace;
+%4 avec eclairage, avec arcenciel
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,150);
+eclairage:=true;
+arcenciel:=true;
+LectureOFF("../../data/10-61.off");
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid;
+
+figureespace(-10u,-20u,10u,10u);
+Initialisation(1000,15,70,50);
+outcolor:=0.5[green,white];
+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);
+finespace;
+
+figureespace(-10u,-20u,10u,10u);
+Initialisation(1000,15,20,50);
+outcolor:=0.5[jaune,white];
+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);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[orange,blanc];
+incolor:=0.5[jaune,blanc];
+angy:=90; subh:=24;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,-20,20);
+Objetanneau1("R=4","r=3","h=1.5");
+AffichageObjet1;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid;
+
+%-1"
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,-20,40,20);
+eclairage:=false;
+outcolor:=blanc;
+Objetgrille0("am=-6","an=6","bm=-6","bn=6");
+AffichageObjet0;
+outcolor:=jaune;
+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);
+angz:=90;
+outcolor:=violet;
+ObjetBiface2((5,0,0) for t=pi+0.06544 step 0.06544 until 2*pi:,(5*(cos(t)**2),(3*sin(t)*((cos(t))**3)),0) endfor);
+angz:=180;
+outcolor:=bleu;
+ObjetBiface3((5,0,0) for t=0.06544 step 0.06544 until pi:,(5*(cos(t)**2),(3*sin(t)*((cos(t))**3)),0) endfor);
+angz:=-90;
+outcolor:=rouge;
+ObjetBiface4((5,0,0) for t=0.06544 step 0.06544 until pi:,(5*(cos(t)**2),(3*sin(t)*((cos(t))**3)),0) endfor);
+nbobj:=4;
+DessineFusion;
+TraceAxesD(6,6,6);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[rouge,blanc];
+incolor:=0.5[vert,blanc];
+angy:=40; nb:=24;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,-20,25,50);
+subh:=24;
+Objetcalotte1("R=4","phib=-pi/3","phih=pi/4");%ok
+AffichageObjet1;
+TraceAxes;
+finespace;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,20,25,50);
+subh:=24;
+creux:=true;
+Objetcalotte1("R=4","phib=-pi/3","phih=pi/4");%ok
+AffichageObjet1;
+TraceAxesD(5,5,5);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[ciel,blanc];
+incolor:=0.5[jaune,blanc];
+
+nb:=24;subh:=9;
+arcenciel:=true;
+creux:=true;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,-20,20);
+Objetcone1("r=2","h=5");%ok
+AffichageObjet1;
+TraceAxes;
+finespace;
+creux:=false;
+arcenciel:=false;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,-10,-40,20);
+Objetcone1("r=2","h=5");%ok
+AffichageObjet1;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[rouge,blanc];
+incolor:=0.5[jaune,blanc];
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,10,50);
+subh:=9;
+Objetcube1("a=4");
+AffichageObjet1;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[ciel,blanc];
+incolor:=0.5[jaune,blanc];
+
+nb:=24;subh:=9;
+creux:=true;
+arcenciel:=true;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,40,20);
+Objetcylindre1("r=2","h=4");%ok
+AffichageObjet1;
+TraceAxes;
+finespace;
+
+creux:=false;
+arcenciel:=false;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,40,20);
+Objetcylindre1("r=2","h=4");%ok
+AffichageObjet1;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,70,20,150);
+outcolor:=jaune;
+incolor:=0.5[vert,blanc];
+Objetdodecaedre1("a=1");
+AffichageObjet1;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+%PDF-1.3
+%Çì\8f¢
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x\9cµRKNÄ0\fÝç\14>\81ñ/vr\ 2Ö\ 3G@\9a\ 1Ô.\80\ 5×Çi\a\81¦eGÕ\85ÓøùÙïÅo@È@ã»Æ§¹Ü=\ 4\>
+!\99PÓ\80_'x¿\14\86\97\12ÔQ*\88qÇn0\17V%¬yÓÝG\9c
+Sæ\98A"3ÚóF¨¢
+\bi`´\ 1Q\8c®ÀÍ*f\9cʹ\b|f\83×Bp\7fT\93çò\98âL\99«ÀÏaH\13Í*³\ 4»bê\9d\8b¸5\94\80\9eÕÆ\83O\9aöd\ 4æÄff\1a\98@\ 5áеeÒ8¶\1cÂE°öUØQÔ«\1cWi<ä|\1f\96\97jjh\r¤
+6âá IB:\84 \86ûâ\97cV@K³×)*{æ\ 4Ô\13J2,¬¢¹\ 3\90 7òEÏqÜC\10\ 3_%¨2Öü\rm\98ºæ\8d\91{\9el\17åf\97\16\ 5GQ/\ 2nÌ\987ív
+7«º5ð|\18ó\1fSß<ó´·¶\eÛ¶\13íÎýOÜcòSù\ 2\82'ð\8eendstream
+endobj
+6 0 obj
+313
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 286 298]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ExtGState 8 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+>>
+endobj
+7 0 obj
+<</Type/ExtGState
+/OPM 1>>endobj
+8 0 obj
+<</R7
+7 0 R>>
+endobj
+2 0 obj
+<</Producer(ESP Ghostscript 815.03)
+/CreationDate(D:20080821165045)
+/ModDate(D:20080821165045)>>endobj
+xref
+0 9
+0000000000 65535 f
+0000000607 00000 n
+0000000725 00000 n
+0000000548 00000 n
+0000000417 00000 n
+0000000015 00000 n
+0000000398 00000 n
+0000000655 00000 n
+0000000696 00000 n
+trailer
+<< /Size 9 /Root 1 0 R /Info 2 0 R
+/ID [(¶\bÒ\ 1±Û\f¥É\8b\18\ e®T=-)(¶\bÒ\ 1±Û\f¥É\8b\18\ e®T=-)]
+>>
+startxref
+836
+%%EOF
--- /dev/null
+input mp-solid
+
+figureespace(-15u,-15u,15u,15u);
+Initialisation(500,30,25,20);
+eclairage:=false;
+nb:=10; subh:=6;
+outcolor:=blanc;
+Objetgrille1("am=-2.5","an=2.5","bm=-1.5","bn=1.5");
+AffichageObjet1;
+TraceAxesD(3,2,2);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,70,20,150);
+outcolor:=jaune;
+incolor:=0.5[vert,blanc];
+Objeticosaedre1("a=1");
+AffichageObjet1;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+%PDF-1.3
+%Çì\8f¢
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x\9c\9d\92An\ 3!\fE÷\9cÂ'p±1`NÐuÚ#TJÚ*³h»èõk\98\99F TJÑ,°\18¾ÿó\87\ fðHàë·/\8b{xÊpúr\1eC( ö\ 5>O\8eàÍQJ \99\81\83&Ì\ 1\16GE\14\85\80S*(pvb'\ 2Ù\11QAUÛ9:\86o\93¿;\ f\8fs-^ݳ!I\8e\1aàwP\922²Ï@¡i¬[/V\f\12r\ 4òd%7¢9Ý\8a\11=\95X9ö¢¥s=ÄÒÍyv¬)"\vØ\1fsH\8dcJ¶bdæ\14ë\15íEŸe^\á\88\94\93M\8aY#·x¯g¯\1csº\15¤x\ e"p)¶<
+Ú-i,\18\1d\8b7µ\89\8bõ÷åï8þÚ TY .Å\b¢\9f©7è!îQU\b\ 2Ú\1fåõSZ\ 6Ñõ÷|\9cÔ5ëÛܺ\94F~3ª\91[OÙGֻݣ\1a¹õL£\a=£ªn\a÷\ 3x=\ 1\86endstream
+endobj
+6 0 obj
+300
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 288 268]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ExtGState 8 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+>>
+endobj
+7 0 obj
+<</Type/ExtGState
+/OPM 1>>endobj
+8 0 obj
+<</R7
+7 0 R>>
+endobj
+2 0 obj
+<</Producer(ESP Ghostscript 815.03)
+/CreationDate(D:20080821165037)
+/ModDate(D:20080821165037)>>endobj
+xref
+0 9
+0000000000 65535 f
+0000000594 00000 n
+0000000712 00000 n
+0000000535 00000 n
+0000000404 00000 n
+0000000015 00000 n
+0000000385 00000 n
+0000000642 00000 n
+0000000683 00000 n
+trailer
+<< /Size 9 /Root 1 0 R /Info 2 0 R
+/ID [(ÿ\8b©\12m ckO'â%ïC&E)(ÿ\8b©\12m ckO'â%ïC&E)]
+>>
+startxref
+823
+%%EOF
--- /dev/null
+%Hexaedre tetrakis
+%http://www.lassine.be/polyedres/catalan/hexaedre_tetrakis.html
+input mp-solid
+
+outcolor:=1/2[rouge,white];
+incolor:=1/2[bleu,white];
+
+intensite:=1.5;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(2500,30,40,50);
+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%
+);
+Ferme1:=true;
+AffichageObjet1;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[jaune,white];
+incolor:=O.5[vert,white];
+
+echelle:=200;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,80,30,25);
+angx:=90;
+ObjetOBJ1("Midpoly_03-1.obj");
+Ferme1:=true;
+AffichageObjet1;
+finespace;
+end
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,70,20,150);
+outcolor:=jaune;
+incolor:=0.5[vert,blanc];
+Objetoctaedre1("a=1");
+nb:=24;subh:=36;
+creux:=true;
+Objetsphere2("R=1");
+string toto;
+toto=""&for k=0 upto apj2-2:if ((k div 18) mod 2)=1:decimal(k)&","& fi endfor decimal(863)&"";
+ObjetEnleve2(scantokens toto);
+nbobj:=2;
+DessineFusion;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[jaune,white];
+incolor:=0.5[vert,white];
+
+debut:=0;
+echelle:=15000;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,170,30,10);
+angx:=90;
+ObjetOFF1("Kangaroo.off");
+Ferme1:=true;
+AffichageObjet1;
+finespace;
+end
--- /dev/null
+input mp-solid
+
+arcenciel:=true;
+incolor:=0.5[jaune,blanc];
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,60,10,50);
+subh:=9;
+Objetpave1("L=2","H=6","P=4");
+AffichageObjet1;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[rouge,blanc];
+incolor:=0.5[jaune,blanc];
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,10,20,50);
+subh:=9;
+ObjetPrisme1("axe=(0,0.5,1)","h=3")((1,0,0),(2,3,0),(-1,4,0));%ok
+AffichageObjet1;
+TraceAxes;
+finespace;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,10,20,50);
+subh:=9;
+creux:=true;
+ObjetPrisme1("axe=(0,0.5,1)","h=3")((1,0,0),(2,3,0),(-1,4,0));%ok
+AffichageObjet1;
+TraceAxes;
+finespace;
+
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,-30,20,30);
+nb:=14; subh:=12;
+eclairage:=false;
+outcolor:=blanc;
+Objetgrille1("am=-1","an=6","bm=-1","bn=5");
+AffichageObjet1;
+eclairage:=true;
+outcolor:=0.5[rouge,blanc];
+incolor:=0.5[vert,blanc];
+subh:=3;
+ObjetRuban2("h=2")((0,0,0),(2,2,0),(4,0,0),(6,2,0));
+AffichageObjet2;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+% Written by metapost version 1.208
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("y",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,-1.9372)--(5.2419,-1.9372)--
+ (5.2419,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("z",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(5.0713,0.0000)--
+ (5.0713,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("x",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(5.6939,0.0000)--
+ (5.6939,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("y",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,-1.9372)--(5.2419,-1.9372)--
+ (5.2419,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("x",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(5.6939,0.0000)--
+ (5.6939,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("y",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,-1.9372)--(5.2419,-1.9372)--
+ (5.2419,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("z",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(5.0713,0.0000)--
+ (5.0713,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("x",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(5.6939,0.0000)--
+ (5.6939,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("y",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,-1.9372)--(5.2419,-1.9372)--
+ (5.2419,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmmi10";
+_s("x",_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(5.6939,0.0000)--
+ (5.6939,4.2895)--(0,4.2895)--cycle;
+_p endgroup
+mpxbreak
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[rouge,blanc];
+incolor:=0.5[jaune,blanc];
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,10,50);
+nb:=24; subh:=18;
+Objetsphere1("R=4");%ok
+AffichageObjet1;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,70,20,150);
+outcolor:=jaune;
+incolor:=0.5[vert,blanc];
+Objettetraedre1("a=1");
+nb:=24;subh:=36;
+numeroteface:=true;
+creux:=true;
+Objetsphere2("R=1");
+string toto;
+toto=""&for k=0 upto apj2-2:if ((k div 18) mod 2)=1:decimal(k)&","& fi endfor decimal(863)&"";
+ObjetEnleve2(scantokens toto);
+nbobj:=2;
+DessineFusion;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[ciel,blanc];
+incolor:=0.5[jaune,blanc];
+
+nb:=24;subh:=36;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,40,20);
+Objettore1("R=2.5","r=1.5");%ok
+AffichageObjet1;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+outcolor:=0.5[ciel,blanc];
+incolor:=0.5[jaune,blanc];
+
+nb:=24;subh:=5;
+arcenciel:=true;
+creux:=true;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,10,20);
+Objettronccone1("r=3.5","h=4","H=5");%ok
+AffichageObjet1;
+TraceAxes;
+finespace;
+creux:=false;
+arcenciel:=false;
+angx:=90;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,50,40,20);
+Objettronccone1("r=2","h=5","H=7");%ok
+AffichageObjet1;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+%27''
+figureespace(-20u,-20u,20u,20u);
+Initialisation(1500,60,20,30);
+nb:=16;%16
+subh:=18;%18
+outcolor:=0.5[jaune,blanc];
+incolor:=0.5[violet,blanc];
+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;
+finespace;
+
+figureespace(-20u,-20u,20u,20u);
+Initialisation(1500,60,20,30);
+nb:=16;%16
+subh:=18;%18
+outcolor:=0.5[jaune,blanc];
+incolor:=0.5[violet,blanc];
+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;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,-25,30,30);
+outcolor:=blanc;
+eclairage:=false;
+nb:=6;subh:=6;
+Objetgrille0("am=-3","an=3","bm=-3","bn=3");
+AffichageObjet0;
+eclairage:=true;
+nb:=1;
+outcolor:=0.5[orange,blanc];
+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(4,4,8);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,60,30,25);
+Lumiere:=Oeil;
+outcolor:=blanc;
+creux:=false;
+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
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+%ok ressort-siège
+nb:=6;
+%ok nb=6 10''
+invnormale:=-1;
+Initialisation(1000,20,20,25);
+arcenciel:=true;
+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);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+r=2; R=8; h=3;
+
+path pp;
+pp=(R,-h/2)--((R+r)/2,h/2)--(r,-h/2)--cycle;
+
+incolor:=0.5[jaune,white];
+outcolor:=0.8[bleu,white];
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,40,25);
+draw Revolution("pp",0,length pp,0.1,0,2*pi,pi/12);
+finespace;
+
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+r=3;R=8;h=6;
+
+path pp;
+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;
+
+incolor:=0.5[jaune,white];
+outcolor:=0.8[bleu,white];
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,25);
+draw Revolution("pp",0,length pp,0.25,0,2*pi,pi/12);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+path pp;
+pp=(3,-7)..(1,-6)..(5,0.5)..(5,3)..(1,3)..(1,4)..(2,5);
+
+incolor:=0.5[jaune,white];
+outcolor:=0.8[bleu,white];
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,25);
+draw Revolution("pp",0,length pp,0.2,0,2*pi,pi/12);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+subh:=1;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,50);
+Lumiere:=Oeil;
+arcenciel:=true;
+Objetpave1("L=3","H=2","P=1");
+AffichageObjet1;
+TraceAxes;
+finespace;
+angx:=90;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,50);
+Lumiere:=Oeil;
+arcenciel:=true;
+Objetpave1("L=3","H=2","P=1");
+AffichageObjet1;
+TraceAxes;
+finespace;
+angx:=0;
+angy:=-45;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,50);
+Lumiere:=Oeil;
+arcenciel:=true;
+Objetpave1("L=3","H=2","P=1");
+AffichageObjet1;
+TraceAxes;
+finespace;
+angy:=0;
+angz:=57;
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,50);
+Lumiere:=Oeil;
+arcenciel:=true;
+Objetpave1("L=3","H=2","P=1");
+AffichageObjet1;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+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
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,60,20,25);
+nb:=10; subh:=26;
+eclairage:=false;
+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
\ No newline at end of file
--- /dev/null
+prologues:=2;
+
+input geometriesyr16
+
+R=3; r=2; h=1;
+
+figure(0,0,10u,10u);
+pair O,A[];
+O=u*(3,3);
+A1-O=u*(R,-h/2);
+A2-O=u*(R,h/2);
+A3-O=u*(r,h/2);
+A4-O=u*(r,-h/2);
+trace hachurage(polygone(A1,A2,A3,A4),120,0.2,0);
+trace polygone(A1,A2,A3,A4);
+trace hachurage(symetrie(polygone(A1,A2,A3,A4),O),120,0.2,0);
+trace symetrie(polygone(A1,A2,A3,A4),O);
+drawarrow (O+u*(0,-1))--(O+u*(0,2)) dashed dashpattern(on12bp off6bp on3bp off6bp);
+drawarrow (O+u*(-3,0))--(O+u*(3,0)) dashed dashpattern(on12bp off6bp on 3bp off6bp);
+trace cotation(A1,A2,-4mm,-2mm,btex $h$ etex);
+trace cotation(O+u*(0,h/2),A3,2mm,2mm,btex $r$ etex);
+trace cotation(O+u*(0,h/2),A2,10mm,2mm,btex $R$ etex);
+label.llft(btex O etex,O);
+label.top(btex $z$ etex,O+u*(0,2));
+label.rt(btex $y$ etex,O+u*(3,0));
+fin;
+
+figure(0,0,10u,10u);
+path section;
+section=for k=0 step 10 until 90:0.5*u*(1+cosd(k),1+sind(k))-- endfor for k=90 step 10 until 180:0.5*u*(cosd(k)-1,1+sind(k))-- endfor for k=180 step 10 until 270:0.5*u*(cosd(k)-1,sind(k)-1)-- endfor for k=270 step 10 until 350:0.5*u*(cosd(k)+1,sind(k)-1)-- endfor 0.5*u*(2,1)--cycle;
+pair O,A[];
+R:=3;
+O=u*(5,3);
+trace hachurage(section shifted(O+u*R*(1,0)),120,0.2,0);
+trace section shifted(O+u*R*(1,0));
+trace hachurage(symetrie(section shifted(O+u*R*(1,0)),O),120,0.2,0);
+trace symetrie(section shifted(O+u*R*(1,0)),O);
+drawarrow (O+u*(0,-1))--(O+u*(0,2)) dashed dashpattern(on12bp off6bp on3bp off6bp);
+drawarrow (O+u*(-4,0))--(O+u*(4,0)) dashed dashpattern(on12bp off6bp on 3bp off6bp);
+trace cotation(O+u*(0,0),O+u*(R,0),15mm,2mm,btex $R$ etex);
+label.llft(btex O etex,O);
+label.top(btex $z$ etex,O+u*(0,2));
+label.rt(btex $y$ etex,O+u*(4,0));
+fin;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+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;
+TraceAxesDD(0,0,0)(2,2,2);
+finespace;
+
+figureespace(-100u,-100u,100u,100u);
+Initialisation(2500,90,0,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;
+TraceAxesDD(0,0,0)(2,2,2);
+finespace;
+
+figureespace(-100u,-100u,100u,100u);
+Initialisation(2500,60,90,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;
+TraceAxesDD(0,0,0)(2,2,2);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+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;
+TraceAxesDD(0,0,0)(1.5,1.5,1.5);
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+figureespace(-100u,-100u,100u,100u);
+Initialisation(2500,60,30,75);
+creux:=true;
+outcolor:=jaune;
+incolor:=0.5[vert,white];
+nb:=30;subh:=21;
+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
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+nb:=8;
+unit:=0.8;
+xm:=6;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1000,20,45,37.5);
+for k=-xm upto xm:
+ draw Projette((k,-xm,0))--Projette((k,xm,0));
+ draw Projette((-xm,k,0))--Projette((xm,k,0));
+endfor;
+r:=1; q:=4;
+arcenciel:=true;
+draw Tuben("(r*((q+1)*cos(t)-cos((q+1)*t)),r*((q+1)*sin(t)-sin((q+1)*t)),0.5)","(r*(-(q+1)*sin(t)+(q+1)*sin((q+1)*t)),r*((q+1)*cos(t)-(q+1)*cos((q+1)*t)),0)",0.5,0,102,0.06283);
+finespace;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1000,20,45,37.5);
+for k=-xm upto xm:
+ draw Projette((k,-xm,0))--Projette((k,xm,0));
+ draw Projette((-xm,k,0))--Projette((xm,k,0));
+endfor;
+r:=1; q:=4;
+Lumiere:=(0,0,3);
+arcenciel:=true;
+draw Tuben("(r*((q+1)*cos(t)-cos((q+1)*t)),r*((q+1)*sin(t)-sin((q+1)*t)),0.5)","(r*(-(q+1)*sin(t)+(q+1)*sin((q+1)*t)),r*((q+1)*cos(t)-(q+1)*cos((q+1)*t)),0)",0.5,0,102,0.06283);
+finespace;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1000,20,45,37.5);
+for k=-xm upto xm:
+ draw Projette((k,-xm,0))--Projette((k,xm,0));
+ draw Projette((-xm,k,0))--Projette((xm,k,0));
+endfor;
+r:=1; q:=4;
+Lumiere:=(0,0,10);
+arcenciel:=true;
+draw Tuben("(r*((q+1)*cos(t)-cos((q+1)*t)),r*((q+1)*sin(t)-sin((q+1)*t)),0.5)","(r*(-(q+1)*sin(t)+(q+1)*sin((q+1)*t)),r*((q+1)*cos(t)-(q+1)*cos((q+1)*t)),0)",0.5,0,102,0.06283);
+finespace;
+
+end
--- /dev/null
+% Written by DVItoMP, Version 0.64/color (Web2C 7.5.4)
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmsy10";
+_s(char0,_n0,1.00000,0.0000,0.0000,);
+setbounds _p to (0,-0.8302)--(7.7487,-0.8302)--
+ (7.7487,5.8115)--(0,5.8115)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n1="cmr10";
+_s("1",_n1,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(4.9813,0.0000)--
+ (4.9813,6.4204)--(0,6.4204)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n0="cmsy10";
+_s(char2,_n0,1.00000,0.0000,0.0000,);
+_n1="cmr10";
+_s("10",_n1,1.00000,7.7487,0.0000,);
+setbounds _p to (0,-0.8302)--(17.7114,-0.8302)--
+ (17.7114,6.4204)--(0,6.4204)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n2="cmsy7";
+_s(char0,_n2,1.00000,0.0000,3.6154,);
+setbounds _p to (0,0.0000)--(6.7248,0.0000)--
+ (6.7248,7.9325)--(0,7.9325)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n3="cmr7";
+_s("2",_n3,1.00000,0.0000,3.6154,);
+setbounds _p to (0,0.0000)--(4.4694,0.0000)--
+ (4.4694,8.1096)--(0,8.1096)--cycle;
+_p endgroup
+mpxbreak
+begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;
+string _n[];
+vardef _s(expr _t,_f,_m,_x,_y)(text _c)=
+ addto _p also _t infont _f scaled _m shifted (_x,_y) _c; enddef;
+_n1="cmr10";
+_s("10",_n1,1.00000,0.0000,0.0000,);
+setbounds _p to (0,0.0000)--(9.9627,0.0000)--
+ (9.9627,6.4204)--(0,6.4204)--cycle;
+_p endgroup
+mpxbreak
--- /dev/null
+input mp-solid
+
+perso1:=true;
+couleurperso:="if ((tapj div subh) mod 3)=0:if (tapj mod 3)=0: rouge elseif (tapj mod 3)=1: noir else: bleu fi elseif ((tapj div subh) mod 3)=1:if (tapj mod 3)=1: rouge elseif (tapj mod 3)=2: noir else: bleu fi elseif ((tapj div subh) mod 3)=2:if (tapj mod 3)=2: rouge elseif (tapj mod 3)=0: noir else: bleu fi fi;";
+
+nb:=12;
+subh:=18;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1500,30,20,50);
+angy:=25;angz:=-20;
+Objettore1("R=3","r=1");
+AffichageObjet1;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+nb:=16; subh:=18;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1000,30,20,30);
+numeroteface:=true;
+arcenciel:=true;
+%outcolor:=0.5[vert,white];
+incolor:=0.5[gris,white];
+Objettore1("R=2","r=1");
+AffichageObjet1;
+finespace;
+
+numeroteface:=false;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(1000,30,20,30);
+creux:=true;
+arcenciel:=true;
+%outcolor:=0.5[vert,white];
+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
\ No newline at end of file
--- /dev/null
+input mp-solid
+
+subh:=1;
+
+figureespace(-10u,-10u,10u,10u);
+Initialisation(500,30,20,50);
+arcenciel:=true;
+Objetcube1("a=0.5");
+TR:=(2,0,0);
+Objetcube2("a=0.5");
+TR:=(0,-2,0);
+Objetcube3("a=0.5");
+TR:=(1,2,4);
+Objetcube4("a=0.5");
+nbobj:=4;
+DessineFusion;
+TraceAxes;
+finespace;
+end
\ No newline at end of file
--- /dev/null
+%% =============================================================================
+%% Fichier : mp-solid.mp
+%% =============================================================================
+%% Le fichier spatial d'Anthony Phan m'a permis de mettre certaines choses au
+%% clair. ;-)
+%% 14/08/2008
+
+prologues:=2;
+
+%% Constantes ------------------------------------------------------------------
+u := 1cm;
+pi := 3.141592654;
+c := 57.29578; % conversion d'un radian en degrés
+
+color rouge, vert, bleu, jaune, noir, blanc, orange, rose, violet, ciel,
+ cielfonce, orangevif, gris, marron;
+rouge = (1,0,0);
+bleu = (0,0,1);
+noir = (0,0,0);
+blanc = (1,1,1);
+orange = (1,0.5,0);
+violet = blanc-vert;
+rose = (1,0.7,0.7);
+cielfonce = 0.9*(0.25,1,1);
+ciel = bleu+vert;
+orangevif = (1,0.25,0.1);
+vert = (0,1,0);
+jaune = blanc-bleu;
+gris = 0.8*white;
+
+input format;
+input marith;
+input sarith;
+%input donymodule;
+
+input objets;
+
+color Sommet[];
+
+%% Anthony Phan
+vardef Norm primary z =
+ abs (abs(Xpart z, Ypart z), Zpart z)
+enddef;
+
+let Xpart = redpart;
+let Ypart = greenpart;
+let Zpart = bluepart;
+%
+
+string typerepre,pointilles;
+typerepre := "persp";
+
+vardef Initialisation(expr r,t,p,d)=
+ Rho:=r;
+ Theta:=t;
+ Phi:=p;
+ DE:=d;
+ Aux1:=sind(Theta);
+ Aux2:=sind(Phi);
+ Aux3:=cosd(Theta);
+ Aux4:=cosd(Phi);
+ Aux5:=Aux3*Aux2;
+ Aux6:=Aux1*Aux2;
+ Aux7:=Aux3*Aux4;
+ Aux8:=Aux1*Aux4;
+ pointilles:="oui";
+ Lumiere:=Oeil;
+enddef;
+
+vardef Oeil=(Rho*Aux7,Rho*Aux8,Rho*Aux2)
+enddef;
+
+vardef sin(expr t) = sind(c*t) enddef;
+
+vardef cos(expr t) = cosd(c*t) enddef;
+
+vardef tan(expr t) = sin(t)/cos(t) enddef;
+
+vardef exp(expr x) = mexp(256)**x enddef;
+
+vardef Exp primary x = mexp(256)**x enddef;
+
+vardef ln(expr t) = mlog(t)/256 enddef;
+
+vardef log(expr t) = ln(t)/ln(10) enddef;
+
+vardef ch(expr x)=(exp(x)+exp (-x))/2 enddef;
+
+vardef sh(expr x)=(exp(x)-exp(-x))/2 enddef;
+
+vardef th(expr x)=sh(x)/ch(x) enddef;
+
+vardef arcsin(expr x)=%Définition mathématique en radian
+ pi*angle((sqrt(1-x**2),x))/180
+enddef;
+
+vardef arccos(expr x)=%Définition mathématique en radian
+ pi*angle((x,sqrt(1-x**2)))/180
+enddef;
+
+vardef arctan(expr x)=arcsin(x/(1++x))
+enddef;
+
+numeric satu,lum;
+satu:=0.45;
+lum:=1;
+
+%Coordonnées dans le repère Oeil
+vardef GCoord(expr N)=
+ (-Xpart(N)*Aux1+Ypart(N)*Aux3,-Xpart(N)*Aux5-Ypart(N)*Aux6+Zpart(N)*Aux4,-Xpart(N)*Aux7-Ypart(N)*Aux8-Zpart(N)*Aux2+Rho)
+enddef;
+
+unit:=1;%pour les mises à l'échelle :) Merci pst-solides3d
+
+vardef Projette(expr M)=
+ %if typerepre="proj":
+ % unit*(DE*(Xpart(GCoord(M)/Zpart(GCoord(M))),(Ypart(GCoord(M))/Zpart(GCoord(M)))))
+ %elseif typerepre="persp":
+ unit*(DE*(Xpart(GCoord(M)),Ypart(GCoord(M))))
+ %fi
+enddef;
+
+vardef TraceAxes=
+ color Origine,Unitex,Unitey,Unitez;
+ Origine=(0,0,0);
+ Unitex=(5,0,0);
+ Unitey=(0,5,0);
+ Unitez=(0,0,5);
+ drawoptions(dashed dashpattern(on 12bp off 6bp on 3bp off 6bp));
+ drawarrow Projette(Origine)--Projette(Unitex) withcolor blue;
+ drawarrow Projette(Origine)--Projette(Unitey) withcolor vert;
+ drawarrow Projette(Origine)--Projette(Unitez);
+ drawoptions();
+enddef;
+
+vardef TraceAxesD(expr xd,yd,zd)=
+ drawoptions(dashed dashpattern(on12bp off6bp on3bp off6bp));;
+ drawarrow Projette((0,0,0))--Projette((xd,0,0));
+ drawarrow Projette((0,0,0))--Projette((0,yd,0));
+ drawarrow Projette((0,0,0))--Projette((0,0,zd));
+ drawoptions();
+ label(btex $x$ etex,Projette((xd+0.3,0,0)));
+ label(btex $y$ etex,Projette((0,yd+0.3,0)));
+ label(btex $z$ etex,Projette((0,0,zd+0.3)));
+enddef;
+
+vardef TraceAxesDD(expr xd,yd,zd,xf,yf,zf)=
+ drawoptions(dashed evenly);
+ draw Projette((0,0,0))--Projette((xd,0,0));
+ draw Projette((0,0,0))--Projette((0,yd,0));
+ draw Projette((0,0,0))--Projette((0,0,zd));
+ drawoptions();
+ drawarrow Projette((xd,0,0))--Projette((xf,0,0));
+ drawarrow Projette((0,yd,0))--Projette((0,yf,0));
+ drawarrow Projette((0,0,zd))--Projette((0,0,zf));
+ label(btex $x$ etex,Projette((xf+0.3,0,0)));
+ label(btex $y$ etex,Projette((0,yf+0.3,0)));
+ label(btex $z$ etex,Projette((0,0,zf+0.3)));
+enddef;
+
+primarydef u Vectprod v =
+ (Ypart u * Zpart v - Zpart u * Ypart v,
+ Zpart u * Xpart v - Xpart u * Zpart v,
+ Xpart u * Ypart v - Ypart u * Xpart v)
+enddef;
+
+vardef Normal(expr vecun,vecde,vectr)=
+ save aa;
+ color aa;
+ P1:=redpart(vecde-vecun);
+ P2:=greenpart(vecde-vecun);
+ P3:=bluepart(vecde-vecun);
+ Q1:=redpart(vectr-vecun);
+ Q2:=greenpart(vectr-vecun);
+ Q3:=bluepart(vectr-vecun);
+ aa=(P2*Q3-Q2*P3,P3*Q1-Q3*P1,P1*Q2-Q1*P2);
+ aa
+enddef;
+
+vardef ProduitScalaire(expr wec,mor)=
+ %Mexp(Mlog redpart(wec) Mmul Mlog redpart(mor))+Mexp(Mlog greenpart(wec) Mmul Mlog greenpart(mor))+Mexp(Mlog bluepart(wec) Mmul Mlog bluepart(mor))
+ Xpart(wec)*Xpart(mor)+Ypart(wec)*Ypart(mor)+Zpart(wec)*Zpart(mor)
+enddef;
+%pour les rotations et translations
+
+vardef RotX(expr ptx)=
+ (Xpart(ptx),Ypart(ptx)*cosd(angx)-Zpart(ptx)*sind(angx),Ypart(ptx)*sind(angx)+Zpart(ptx)*cosd(angx))
+enddef;
+
+vardef RotY(expr ptx)=
+ (Xpart(ptx)*cosd(angy)+Zpart(ptx)*sind(angy),Ypart(ptx),-Xpart(ptx)*sind(angy)+Zpart(ptx)*cosd(angy))
+enddef;
+
+vardef RotZ(expr ptx)=
+ (Xpart(ptx)*cosd(angz)-Ypart(ptx)*sind(angz),Xpart(ptx)*sind(angz)+Ypart(ptx)*cosd(angz),Zpart(ptx))
+enddef;
+
+vardef RotXYZ(expr ptx)=
+ RotZ(RotY(RotX(ptx)))
+enddef;
+
+angx:=0;
+angy:=0;
+angz:=0;
+color TR;
+TR:=(0,0,0);
+%pour les tubes
+vardef VT(expr t)=Fp(t)/Norm(Fp(t))
+enddef;
+
+vardef VN(expr t)=Fd(t)/Norm(Fd(t))
+enddef;
+
+vardef VBN(expr t)=VT(t) Vectprod VN(t)
+enddef;
+
+path feuillet;
+numeric _tfig,_nfig;
+pair coinbg,coinbd,coinhd,coinhg;
+_nfig:=0;
+
+def feuille(expr xa,ya,xb,yb) =
+ feuillet := (xa,ya)--(xa,yb)--(xb,yb)--(xb,ya)--cycle;
+ coinbg := (xa,ya);
+ coinbd := (xb,ya);
+ coinhd := (xb,yb);
+ coinhg := (xa,yb);
+ %modifié le 29.09.04
+ z.so=(xpart(coinbg/1cm),ypart(coinbg/1cm));
+ z.ne=(xpart(coinhd/1cm),ypart(coinhd/1cm));
+ %fin modification
+ extra_endfig := "clip currentpicture to feuillet;" & extra_endfig;
+enddef;
+
+def figureespace(expr xa,ya,xb,yb) =
+ _nfig:=_nfig+1;
+ beginfig(_nfig);
+ feuille(xa,ya,xb,yb);
+ _tfig:= if (xb-xa)>(yb-ya): xb-xa else: yb-ya fi;
+ _tfig:=2*_tfig;
+enddef;
+
+def finespace=
+endfig;
+enddef;
+
+def QS(expr ndeb,nfin)=
+ begingroup
+ save v,m,x;
+ if ndeb<nfin:
+ v:=ALT[cpt[ndeb]];
+ m:=ndeb;
+ for i=(ndeb+1) upto nfin:
+ if ALT[cpt[i]]<v:
+ m:=m+1;
+ x:=cpt[m];cpt[m]:=cpt[i];cpt[i]:=x;
+ fi
+ endfor;
+ x:=cpt[m];cpt[m]:=cpt[ndeb];cpt[ndeb]:=x;
+ QS(ndeb,m-1);
+ QS(m+1,nfin);
+ fi
+ endgroup
+enddef;
+
+boolean Pointilles;
+Pointilles:=false;
+
+boolean Vue[];
+color Fc[].iso;
+boolean Creux;
+Creux:=false;
+
+vardef DessineObjetNew=
+ numeric ALT[];
+ %on détermine les zmax dans le repère spatial de l'écran
+ for k=1 upto apj:
+ Fc[k].iso:=(0,0,0) for l=1 upto ns[k][0]:
+ +Fc[k][l]
+ endfor;
+ Fc[k].iso:=Fc[k].iso/ns[k][0];
+ endfor;
+ for k=1 upto apj:
+ %ALT[k]=-Zpart(GCoord(Fc[k].iso));
+ zmax:=infinity;
+ for l=1 upto ns[k][0]:
+ t:=-Zpart(GCoord(Fc[k][l]));
+ if t<zmax:
+ zmax:=t;
+ fi;
+ endfor;
+ ALT[k]=zmax;
+ cpt[k]:=k;
+ endfor;
+ %On trie suivant les zmax
+ QS(1,apj);
+ %On dessine
+ if Pointilles:
+ for k=1 upto apj:
+ draw for l=1 upto ns[cpt[k]][0]:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle if Vue[cpt[k]]=false: dashed evenly fi;
+ endfor;
+ else:
+ for k=1 upto apj:
+ if Creux=false:
+ if Vue[cpt[k]]:
+ fill for l=1 upto ns[cpt[k]][0]:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor
+ if arcenciel:
+ lumin(cpt[k])*Hsvtorgb(((cpt[k]/apj)*360,satu,lum))
+ else:
+ lumin(cpt[k])*outcolor
+ fi;
+ if traits:
+ draw for l=1 upto ns[cpt[k]][0]:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle;
+ fi;
+ fi;
+ else:
+ fill for l=1 upto ns[cpt[k]][0]:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor
+ if Vue[cpt[k]]:
+ if arcenciel:
+ lumin(cpt[k])*Hsvtorgb(((cpt[k]/apj)*360,satu,lum))
+ else:
+ lumin(cpt[k])*outcolor
+ fi
+ else:
+ lumin(cpt[k])*incolor
+ fi;
+ if traits:
+ draw for l=1 upto ns[cpt[k]][0]:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle;
+ fi;
+ fi;
+ endfor;
+ fi;
+enddef;
+
+color Fc[][];%représente les sommets des différentes faces;
+
+invnormale=1;%Parfois dans la lecture des fichiers OFF, il est nécessaire d'opposer la normale pour obtenir un bon intérieur-extérieur
+boolean OFF,OBJ;%pour utiliser la lumière "correctement"
+OFF:=false;
+OBJ:=false;
+
+vardef LectureOFF(expr nomsolide)=
+ OFF:=true;
+ %Détermination du nombre de sommets et de faces.
+ string s_;
+ s_=readfrom nomsolide;
+ string ss[];
+ if s_<>EOF:
+ ss1 := loptok s_;
+ t_ := if ss1="%": 0 else: 1 fi;
+ forever:
+ ss[incr t_] := loptok s_;
+ exitif ss[t_]="";
+ endfor
+ else: false
+ fi;
+ NbS:=round(Mexp Mlog_str ss1);
+ NF:=round(Mexp Mlog_str ss2);
+ message("Il y a "&decimal(NbS)&" sommets.");
+ message("Il y a "&decimal(NF)&" faces au total.");
+ %Détermination des coordonnées des sommets
+ message("Création des sommets.");
+ s_:=readfrom nomsolide;
+ if debut=0:
+ for k=0 upto NbS-1:
+ s_:=readfrom nomsolide;
+ if s_<>EOF:
+ ss1 := loptok s_;
+ n_ := if ss1="%": 0 else: 1 fi;
+ forever:
+ ss[incr n_] := loptok s_;
+ exitif ss[n_]="";
+ endfor
+ else: false
+ fi;
+ Sommet[k]:=(Mexp ((Mlog_str ss1) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss3) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss2) Mdiv (Mlog echelle)));
+ %Sommet[k]:=(Mexp (Mlog_str ss1),Mexp (Mlog_str ss3),Mexp (Mlog_str ss2))/echelle;
+ %Sommet[k]:=(Mexp (Mlog_str ss1)/echelle,Mexp (Mlog_str ss3)/echelle,Mexp (Mlog_str ss2)/echelle);
+ endfor;
+ else:
+ for k=1 upto NbS:
+ s_:=readfrom nomsolide;
+ if s_<>EOF:
+ ss1 := loptok s_;
+ n_ := if ss1="%": 0 else: 1 fi;
+ forever:
+ ss[incr n_] := loptok s_;
+ exitif ss[n_]="";
+ endfor
+ else: false
+ fi;
+ Sommet[k]:=(Mexp ((Mlog_str ss1) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss3) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss2) Mdiv (Mlog echelle)));
+ %Sommet[k]:=(Mexp (Mlog_str ss1),Mexp (Mlog_str ss3),Mexp (Mlog_str ss2))/echelle;
+ %Sommet[k]:=(Mexp (Mlog_str ss1)/echelle,Mexp (Mlog_str ss3)/echelle,Mexp (Mlog_str ss2)/echelle);
+ endfor;
+ fi;
+ message("Création des faces.");
+ %Détermination des faces
+ apj:=0;color cc,dd;
+ nbfvues:=0;
+ for nf=-4000 upto (-4000+NF)-1:
+ s_:=readfrom nomsolide;
+ if s_<>EOF:
+ ss1 := loptok s_;
+ n_ := if ss1="%": 0 else: 1 fi;
+ forever:
+ ss[incr n_] := loptok s_;
+ exitif ss[n_]="";
+ endfor
+ else: false
+ fi;
+ apj:=apj+1;
+ ns[apj][0]:=Mexp Mlog_str ss1;%pour savoir le nb de sommets par face
+ for nl=1 upto ns[apj][0]:
+ Fc[apj][nl]:=Sommet[round(Mexp Mlog_str ss[nl+1])];
+ endfor;
+ dd:=Oeil-Fc[apj][1];
+ cc:=invnormale*Normal(Fc[apj][1],Fc[apj][2],Fc[apj][3]);
+ if (ProduitScalaire(dd,cc)>=0):
+ Vue[apj]:=true;
+ nbfvues:=nbfvues+1;
+ else:
+ if Creux=true:
+ Vue[apj]:=false;
+ else:
+ apj:=apj-1;
+ fi;
+ fi;
+ endfor;
+ message("Faces vues déterminees : il y en a "&decimal(nbfvues)&".");
+ closefrom nomsolide;
+ DessineObjetNew;
+enddef;
+
+vardef LectureOBJ(expr nomfichier)=
+ OBJ:=true;
+ string s_;
+ string ss[];
+ nbss:=1;
+ apj:=0;
+ forever:
+ s_:=readfrom nomfichier;
+ if s_<>EOF:
+ ss0 := loptok s_;
+ if ss0="v":
+ n_:=0;
+ forever:
+ ss[incr n_] := loptok s_;
+ exitif ss[n_]="";
+ endfor
+ Sommet[nbss]:=(Mexp((Mlog_str ss1) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss3) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss2) Mdiv (Mlog echelle)));
+ nbss:=incr nbss;
+ elseif ss0="f":
+ n_:=0;
+ forever:
+ ss[incr n_] := loptok s_;
+ exitif ss[n_]="";
+ endfor;
+ ns[apj][0]:=n_-1;
+ for k=1 upto ns[apj][0]:
+ if invnormale=1:
+ Fc[apj][ns[apj][0]-k+1] := Sommet[round(Mexp(Mlog_str ss[k]))]
+ %if unknown OTFc.@[apj][OTFc.@[apj].nb-k+1]:
+ % show OTFc.@[apj][OTFc.@[apj].nb-k+1];
+ %fi;
+ else:
+ Fc[apj][k] := Sommet[round(Mexp(Mlog_str ss[k]))]
+ %if unknown OTFc.@[apj][k]:
+ % show OTFc.@[apj][k];
+ %fi;
+ fi;
+ endfor;
+ if ProduitScalaire(Oeil-Fc[apj][1],Normal(Fc[apj][1],Fc[apj][2],Fc[apj][3]))>=0:
+ Vue[apj]:=true;
+ apj:=apj+1;
+ else:
+ if Creux=true:
+ Vue[apj]:=false;
+ apj:=apj+1;
+ fi;
+ fi;
+ fi;
+ fi;
+ exitif s_=EOF;
+ endfor;
+ apj:=apj-1;
+ closefrom nomfichier;
+ DessineObjetNew
+enddef;
+
+nb:=8;
+
+%tube
+vardef Tube(expr Fn,dp,ds,rayon,tmin,nbp,pas)=%f,f',f'',rayon du tube,paramètre départ,nb points, pas
+ save _tube;
+ picture _tube;
+ scantokens("vardef F(expr t)="&Fn&" enddef;");
+ scantokens("vardef Fp(expr t)="&dp&" enddef;");
+ scantokens("vardef Fd(expr t)="&ds&" enddef;");
+ color G[][];
+%nb point sur le cercle
+ NB:=nbp;%nb de pas
+ for l=0 upto NB:
+ for k=0 upto nb:
+ G[l][k]=F(tmin+l*pas)+rayon*(cosd(k*(360/nb))*VN(tmin+l*pas)+sind(k*(360/nb))*VBN(tmin+l*pas));
+ endfor;
+ endfor;
+ apj:=0;
+ for l=0 upto (NB-1):
+ for k=0 upto nb-1:
+ apj:=apj+1;
+ cpt[apj]:=apj;
+ Fc[apj][1]:=G[l][k];
+ Fc[apj][2]:=G[l][k+1];
+ Fc[apj][3]:=G[l+1][k+1];
+ Fc[apj][4]:=G[l+1][k];
+ Fc[apj].iso:=(Fc[apj][1]+Fc[apj][2]+Fc[apj][3]+Fc[apj][4])/4;
+ ALT[apj]:=-Zpart(GCoord(Fc[apj][1]));
+ endfor;
+ endfor;
+ QS(1,apj);
+ _tube=image(
+ for k=1 upto apj:
+ fill for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if arcenciel: lumin(cpt[k])*Hsvtorgb((floor((cpt[k]/apj)*360),satu,lum))
+ else: lumin(cpt[k])*outcolor fi;
+ draw for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withpen pencircle scaled0.25bp;
+ endfor;
+ );
+ _tube
+enddef;
+
+%Tube new :)
+%pour les tubes new :)
+vardef T(expr t)=Fp(t)
+enddef;
+
+vardef VTn(expr t)=if Norm(T(t))=0:
+ T(t)
+ else:
+ T(t)/Norm(T(t))
+ fi
+enddef;
+
+vardef VNn(expr t)=
+ save _VNBis,__VN;
+ color _VNBis,__VN;
+ __VN=T(t) Vectprod ((T(t+nn)-T(t-nn))/2);
+ if __VN=(0,0,0):
+ _VNBis=(0,0,1);
+ else:
+ __VN:=__VN/Norm(__VN);
+ if ProduitScalaire(VNbisprec[t-nn],__VN)>0:
+ _VNBis=__VN/Norm(__VN)
+ else:
+ _VNBis=-(__VN/Norm(__VN))
+ fi;
+ fi;
+ VNbisprec[t]=_VNBis;
+ _VNBis
+enddef;
+
+vardef VBNn(expr t)=VTn(t) Vectprod VNn(t)
+enddef;
+
+vardef Tuben(expr Fn,dp,rayon,tmin,nbp,pas)=%f,f',f'',rayon du tube,paramètre départ,nb points, pas
+ save _tuben;
+ picture _tuben;
+ scantokens("vardef F(expr t)="&Fn&" enddef;");
+ scantokens("vardef Fp(expr t)="&dp&" enddef;");
+ color G[][];
+%nb point sur le cercle
+ NB:=nbp;%nb de pas
+ nn:=pas;
+ %pour gérer le "flip" aux points d'inflexion
+ color VNbisprec[];
+ VNbisprec[tmin-nn]=T(tmin-nn) Vectprod ((T(tmin)-T(tmin-2*nn))/2);
+ %
+ ang:=360/nb;
+ for l=0 upto NB:
+ for k=0 upto nb:
+ G[l][k]=F(tmin+l*pas)+rayon*(cosd(k*ang)*VNn(tmin+l*pas)+sind(k*ang)*VBNn(tmin+l*pas));
+ endfor;
+ endfor;
+ apj:=0;
+ for l=0 upto (NB-1):
+ for k=0 upto nb-1:
+ apj:=apj+1;
+ cpt[apj]:=apj;
+ Fc[apj][1]:=G[l][k];
+ Fc[apj][2]:=G[l][k+1];
+ Fc[apj][3]:=G[l+1][k+1];
+ Fc[apj][4]:=G[l+1][k];
+ Fc[apj].iso:=(Fc[apj][1]+Fc[apj][2]+Fc[apj][3]+Fc[apj][4])/4;
+ ALT[apj]:=-Zpart(GCoord(Fc[apj].iso));
+ endfor;
+ endfor;
+ QS(1,apj);
+ _tuben=image(
+ for k=1 upto apj:
+ fill for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if arcenciel: lumin(cpt[k])*Hsvtorgb((floor((cpt[k]/apj)*360),satu,lum))
+ else: lumin(cpt[k])*outcolor fi;
+ draw for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withpen pencircle scaled0.25bp;
+ endfor;
+ );
+ _tuben
+enddef;
+
+
+vardef Fonction(expr fn,tmin,tmax,pas)=%fonction
+ scantokens("vardef F(expr t)="&fn&" enddef;");
+ save _f;
+ path _f;
+ _f=Projette(F(tmin))
+ for k=tmin+pas step pas until tmax:
+ --Projette(F(k))
+ endfor;
+ _f
+enddef;
+
+color outcolor,incolor,outcolorbis;
+
+boolean Spar;
+Spar:=false;
+
+vardef Sparam(expr fn,umin,umax,upas,vmin,vmax,vpas)=%fonction
+ Spar:=true;
+ save _Sparam;
+ scantokens("vardef Famille(expr u,v)="&fn&" enddef;");
+ apj:=0;
+ picture _Sparam;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=umin step upas until umax:
+ for l=vmin step vpas until vmax:
+ apj:=apj+1;
+ cpt[apj]:=apj;
+ Fc[apj][1]:=Image(Famille(k+upas,l));
+ Fc[apj][2]:=Image(Famille(k,l));
+ Fc[apj][3]:=Image(Famille(k,l+vpas));
+ Fc[apj][4]:=Image(Famille(k+upas,l+vpas));
+ Fc[apj].iso:=(Fc[apj][1]+Fc[apj][3])/2;%(Fc[apj][1]+Fc[apj][2]+Fc[apj][3]+Fc[apj][4])/4;
+ ALT[apj]:=-Zpart(GCoord(Fc[apj].iso));
+ if ProduitScalaire(Oeil-Fc[apj].iso,invnormale*Normal(Fc[apj].iso,Fc[apj][1],Fc[apj][2]))>=0:
+ Vue[apj]:=true
+ else:
+ Vue[apj]:=false
+ fi;
+ endfor;
+ endfor;
+ %On range les faces par un QS en fonction de leur profondeur
+ QS(1,apj);
+ %On affiche toutes les faces par ordre décroissant de profondeur.
+ _Sparam=image(
+ for k=1 upto apj:
+ fill for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if Vue[cpt[k]]:
+ if arcenciel: lumin(cpt[k])*Hsvtorgb((floor((cpt[k]/apj)*360),satu,lum))
+ else: lumin(cpt[k])*outcolor fi
+ else:lumin(cpt[k])*incolor fi;
+ draw for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle;
+ endfor;
+ );
+ Spar:=false;
+ _Sparam
+enddef;
+
+vardef Revolution(expr fn,umin,umax,upas,vmin,vmax,vpas)=
+ Sparam("(xpart(point(u) of "&fn&")*cos(v),xpart(point(u) of "&fn&")*sin(v),ypart(point(u) of "&fn&"))",umin,umax,upas,vmin,vmax,vpas)
+enddef;
+
+boolean traits;%sur une idée d'Herbert Voss à propos de pst-solides :)
+%sert à désactiver le tracer des traits
+%15/07/08:pour l'instant implanter uniquement pour les surfaces en z
+traits=true;
+
+boolean arcenciel;%pour essayer d'obtenir des dégradés tels que pst-solides :)
+arcenciel=false;
+
+boolean surfz;
+surfz:=false;
+
+vardef SurfZ(expr fn,xmin,xmax,ymin,ymax,nblignes,nbpoints)=
+ surfz:=true;
+ save _SurfZ;
+ picture _SurfZ;
+ %boolean Vue[];
+ color alt[];
+ scantokens("vardef Fz(expr X,Y)="&fn&" enddef;");
+ apj:=0;sign:=0;
+ IncX:=(xmax-xmin)/nbpoints;
+ IncY:=(ymax-ymin)/nblignes;
+ color Yc[][],Xc[][],Fc[][];
+ for ligne=0 upto nblignes:
+ y:=ymax-ligne*IncY;
+ x:=xmin;
+ Yc[ligne][0]=(x,y,Fz(x,y));
+ for k=1 upto nbpoints:
+ Yc[ligne][k]=((xmin+k*IncX,y,Fz(xmin+k*IncX,y)));
+ endfor;
+ endfor;
+ %for ligne=0 step 3 until nbpoints:
+ % x:=xmax-ligne*IncX;
+ % for k=0 step 3 until nblignes:
+ % Xc[ligne div 3][k div 3]=(x,ymin+k*IncY,Fz(x,ymin+k*IncY));
+ % endfor;
+ %endfor;
+ for k=0 upto (nblignes-1):
+ for l=0 step 3 until (nbpoints-3):
+ apj:=apj+1;
+ cpt[apj]:=apj;
+ Fc[apj][1]:=Yc[k][l];
+ Fc[apj][2]:=Yc[k][l+3];
+ Fc[apj][3]:=Yc[k+1][l+3];
+ Fc[apj][4]:=Yc[k+1][l];
+ Fc[apj].iso:=(Fc[apj][1]+Fc[apj][2]+Fc[apj][3]+Fc[apj][4])/4;
+ ALT[apj]:=-Zpart(GCoord(Fc[apj].iso));
+ if ProduitScalaire(Oeil-Fc[apj].iso,Normal(Fc[apj].iso,Fc[apj][2],Fc[apj][1]))>=0:
+ Vue[apj]:=true;
+ else:
+ Vue[apj]:=false
+ fi;
+ endfor;
+ endfor;
+ %On range les faces par un QS en fonction de leur profondeur
+ QS(1,apj);
+ %On affiche toutes les faces par ordre décroissant de profondeur.
+ _SurfZ=image(
+ pickup pencircle scaled 0.25bp;
+ for k=1 upto apj:
+ fill for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if Vue[cpt[k]]:
+ if arcenciel: lumin(cpt[k])*Hsvtorgb((floor((cpt[k]/apj)*360),satu,lum))
+ else:lumin(cpt[k])*outcolor fi
+ else: lumin(cpt[k])*incolor fi;
+ if traits=true:
+ draw for l=1 upto 4:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle;
+ fi;
+ endfor;
+ );
+ surfz:=false;
+ _SurfZ
+enddef;
+
+%Objet prédéfinis
+vardef ObjetCube(expr ar)=
+ NbS:=8;
+ Sommet1:=(ar,0,0);
+ Sommet2:=(ar,ar,0);
+ Sommet3:=(0,ar,0);
+ Sommet4:=(0,0,0);
+ Sommet5:=(0,0,ar);
+ Sommet6:=(ar,0,ar);
+ Sommet7:=(ar,ar,ar);
+ Sommet8:=(0,ar,ar);
+%%Faces
+ NF:=6;
+ ns[1][0]:=4;Fc[1][1]:=Sommet1;Fc[1][2]:=Sommet2;Fc[1][3]:=Sommet3;Fc[1][4]:=Sommet4;
+ ns[2][0]:=4;Fc[2][1]:=Sommet4;Fc[2][2]:=Sommet3;Fc[2][3]:=Sommet8;Fc[2][4]:=Sommet5;
+ ns[3][0]:=4;Fc[3][1]:=Sommet1;Fc[3][2]:=Sommet4;Fc[3][3]:=Sommet5;Fc[3][4]:=Sommet6;
+ ns[4][0]:=4;Fc[4][1]:=Sommet5;Fc[4][2]:=Sommet8;Fc[4][3]:=Sommet7;Fc[4][4]:=Sommet6;
+ ns[5][0]:=4;Fc[5][1]:=Sommet2;Fc[5][2]:=Sommet7;Fc[5][3]:=Sommet8;Fc[5][4]:=Sommet3;
+ ns[6][0]:=4;Fc[6][1]:=Sommet1;Fc[6][2]:=Sommet6;Fc[6][3]:=Sommet7;Fc[6][4]:=Sommet2;
+ %
+ %Détermination des faces
+ apj:=0;color cc,dd;
+ for nf=1 upto NF:
+ apj:=apj+1;
+ dd:=Oeil-Fc[nf][1];
+ cc:=invnormale*Normal(Fc[nf][1],Fc[nf][2],Fc[nf][3]);
+ if (ProduitScalaire(dd,cc)>=0):
+ Vue[apj]=true
+ else:
+ Vue[apj]=false;
+ fi;
+ endfor;
+enddef;
+
+%coloriage et lumière
+vardef Hsvtorgb(expr CC)=%CC couleur donnée en hsv d'après http://en.wikipedia.org/wiki/HSL_color_space
+ save $;
+ color $;
+ SSw:=floor(Xpart(CC)/60);
+ SSh:=SSw mod 6;
+ SSf:=(Xpart(CC)/60)-floor(SSw);
+ SSs:=Ypart((CC));
+ SSv:=Zpart((CC));
+ SSp:=SSv*(1-SSs);
+ SSq:=SSv*(1-SSf*SSs);
+ SSt:=SSv*(1-(1-SSf)*SSs);
+ if SSh=0: $=(SSv,SSt,SSp) elseif SSh=1:$=(SSq,SSv,SSp) elseif SSh=2:$=(SSp,SSv,SSt) elseif SSh=3:$=(SSp,SSq,SSv) elseif SSh=4:$=(SSt,SSp,SSv) elseif SSh=5:$=(SSv,SSp,SSq) fi;
+ $
+enddef;
+
+marron=Hsvtorgb((60,1,0.3));
+
+intensite:=2;
+boolean eclairage;
+eclairage:=true;
+
+color Lumiere;
+
+invnormalelum:=1;
+
+vardef lumin(expr nbt)=
+ save $;
+ numeric $;
+ if eclairage=false:
+ $=1;
+ else:
+ color uu,vv;
+ uu=Lumiere-Fc[nbt].iso;
+ uu:=uu/Norm(uu);
+ vv=invnormalelum*Normal(Fc[nbt].iso,Fc[nbt][1],Fc[nbt][2]);
+ if Norm(vv)<>0:
+ vv:=vv/Norm(vv)
+ fi;
+ if (surfz) or (Spar) or (OFF) or (OBJ):
+ $=intensite*abs(ProduitScalaire(vv,uu))
+ else:
+ $=intensite*(ProduitScalaire(vv,uu));
+ fi;
+ if $>1:
+ $:=1;
+ fi;
+ fi;
+ $
+enddef;
+
+
+%%sucre
+
+%%Transparence fait par Anthony Phan
+picture alphapict_; alphapict_=nullpicture;
+color fillcolor; fillcolor=gris;
+fgalpha := 0.5; % usual alpha parameter
+bgalpha:= 1; % alpha parameter with respect to the background
+
+vardef transparence expr c =
+ alphapict_ := nullpicture;
+ alphafill_(currentpicture, c);
+ addto currentpicture also alphapict_;
+enddef;
+
+def alphafill_(expr p, c) =
+ begingroup
+ save p_, xmax_, xmin_, ymax_, ymin_; picture p_;
+ p_ = nullpicture;
+ (xmin_, ymin_) = llcorner c; (xmax_, ymax_) = urcorner c;
+ addto p_ contour c withcolor bgalpha[background, fillcolor];
+ for p__ within p:
+ numeric xmin__, xmax__, ymin__, ymax__;
+ (xmin__, ymin__) = llcorner p__; (xmax__, ymax__) = urcorner p__;
+ if (xmax__<= xmin_) or (xmin__ >= xmax_):
+ else:
+ if (ymax__<= ymin_) or (ymin__ >= ymax_):
+ else:
+ if (not clipped p__) and (not bounded p__):
+ addto p_ also p__ withcolor
+ fgalpha[(redpart p__, greenpart p__, bluepart p__),
+ fillcolor];
+ else:
+ begingroup save alphapict_;
+ picture alphapict_; alphapict_ = nullpicture;
+ alphafill_(p__, pathpart p__);
+ addto p_ also alphapict_;
+ endgroup;
+ fi
+ fi
+ fi
+ endfor
+ clip p_ to c;
+ addto alphapict_ also p_;
+ endgroup;
+enddef;
+
+endinput;
\ No newline at end of file
--- /dev/null
+%24/01/2011
+%Gestion des couleurs dans l'objet Deplacement.
+
+%27/11/2010
+%Manque plusieurs : dans la définition de ObjetNew
+
+%07/02/2009
+color OTFc[][][];%pour mémoriser les différents sommets de chaque objet;
+color OTFc[][].iso;
+color coul[][];%pour memoriser la couleur de chacune des faces de l'objet;
+color Outcolor[],Incolor[];%Permet de gérer la gestion des couleurs d'un objet lors d'un déplacement de cet objet
+boolean Vue[][];
+
+boolean creux; creux=false;%pour gérer les solides creux
+boolean transformation; transformation=false;%pour gérer les transformations
+boolean Ferme[];%pour gérer les faces : si le solide est fermé, toutes les faces non vues ne sont pas intégrées aux calculs
+boolean perso[];%pour gérer les gestions personnelles des couleurs
+for k=0 upto 100:
+ perso[k]=false;
+endfor;
+boolean numeroteface;
+numeroteface:=false;
+
+string couleurperso;
+
+defaultfont:="cmr5";
+
+vardef Image(expr dep)=
+ if transformation:
+ Transform(dep)
+ else:
+ RotXYZ(dep)
+ fi
+ +TR
+enddef;
+
+boolean Transparence;
+Transparence:=false;
+
+vardef AffichageObjet[]=
+ save _affi;
+ picture _affi;
+ color Fc[][];color cou[];
+ tapj:=0;
+ for k=0 upto apj.@:
+ cpt[tapj]:=tapj;
+ Fc[tapj].nb:=OTFc.@[k].nb;
+ for l=1 upto Fc[tapj].nb:
+ Fc[tapj][l]:=OTFc.@[k][l];
+ endfor;
+ Fc[tapj].iso:=OTFc.@[k].iso;
+ cou[tapj]:=if perso.@:scantokens(couleurperso) else: coul.@[k] fi;
+ ALT[tapj]:=ALT.@[k];
+ Vue[tapj]:=Vue.@[k];
+ tapj:=tapj+1;
+ endfor;
+ tapj:=tapj-1;
+ QS(0,tapj);
+ if Transparence :
+ for k=0 upto tapj:
+ if Vue[cpt[k]]=false:
+ fill for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor abs(lumin(cpt[k]))*cou[cpt[k]];
+ if traits=true:
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle dashed evenly withpen pencircle scaled0.25bp;
+ fi;
+ fi;
+ endfor;
+ for k=0 upto tapj:
+ if Vue[cpt[k]]:
+ transparence for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle;
+ if traits=true:
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withpen pencircle scaled0.25bp;
+ fi;
+ fi;
+ endfor;
+ else:
+ if Ferme.@:
+ for k=0 upto tapj:
+ if Vue[cpt[k]]=true:
+ fill for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor
+ if arcenciel=true:
+ lumin(cpt[k])*Hsvtorgb(((cpt[k]/tapj)*360,satu,lum))
+ else:
+ lumin(cpt[k])*cou[cpt[k]]
+ fi;
+ if traits:
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withpen pencircle scaled0.25bp;
+ %add by cp 01/08/11
+ else:
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor
+ if arcenciel=true:
+ lumin(cpt[k])*Hsvtorgb(((cpt[k]/tapj)*360,satu,lum))
+ else:
+ lumin(cpt[k])*cou[cpt[k]]
+ fi;
+ %fin add
+ fi;
+ fi;
+ endfor;
+ else:
+ for k=0 upto tapj:%apj downto 1:
+ fill for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if Vue[cpt[k]]:
+ if arcenciel: lumin(cpt[k])*Hsvtorgb(((cpt[k]/tapj)*360,satu,lum))
+ else:lumin(cpt[k])*cou[cpt[k]] fi
+ else: abs(lumin(cpt[k]))*cou[cpt[k]] fi;
+ if traits:
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withpen pencircle scaled0.25bp;
+ %add by cp 01/08/2011
+ else:
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if Vue[cpt[k]]:
+ if arcenciel: lumin(cpt[k])*Hsvtorgb(((cpt[k]/tapj)*360,satu,lum))
+ else:lumin(cpt[k])*cou[cpt[k]] fi
+ else: abs(lumin(cpt[k]))*cou[cpt[k]] fi;
+ %fin add
+ fi;
+ endfor;
+ fi;
+ fi;
+ if numeroteface=true:
+ for k=0 upto tapj:
+ if Vue[k]:
+ label(""&decimal(k)&"",Projette(Fc[k].iso));
+ fi;
+ endfor;
+ fi;
+enddef;
+
+
+vardef AffichageObjetold[]=
+ save _affi;
+ picture _affi;
+ color Fc[][];color cou[];
+ tapj:=0;
+ for k=0 upto apj.@:
+ cpt[tapj]:=tapj;
+ Fc[tapj].nb:=OTFc.@[k].nb;
+ for l=1 upto Fc[tapj].nb:
+ Fc[tapj][l]:=OTFc.@[k][l];
+ endfor;
+ Fc[tapj].iso:=OTFc.@[k].iso;
+ cou[tapj]:=if perso.@:scantokens(couleurperso) else: coul.@[k] fi;
+ ALT[tapj]:=ALT.@[k];
+ Vue[tapj]:=Vue.@[k];
+ tapj:=tapj+1;
+ endfor;
+ tapj:=tapj-1;
+ QS(0,tapj);
+ if Ferme.@:
+ for k=0 upto tapj:
+ if Vue[cpt[k]]=true:
+ fill for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor
+ if arcenciel=true:
+ lumin(cpt[k])*Hsvtorgb(((cpt[k]/tapj)*360,satu,lum))
+ else:
+ lumin(cpt[k])*cou[cpt[k]]
+ fi;
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withpen pencircle scaled0.25bp;
+ fi;
+ endfor;
+ else:
+ for k=0 upto tapj:%apj downto 1:
+ fill for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if Vue[cpt[k]]:
+ if arcenciel: lumin(cpt[k])*Hsvtorgb(((cpt[k]/tapj)*360,satu,lum))
+ else:lumin(cpt[k])*cou[cpt[k]] fi
+ else: abs(lumin(cpt[k]))*cou[cpt[k]] fi;
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withpen pencircle scaled0.25bp;
+ endfor;
+ fi;
+ if numeroteface=true:
+ for k=0 upto tapj:
+ if Vue[k]:
+ label(""&decimal(k)&"",Projette(Fc[k].iso));
+ fi;
+ endfor;
+ fi;
+enddef;
+
+vardef DessineFusion=
+ save _fusion;
+ picture _fusion;
+ tapj:=0;
+ color Fc[][];color cou[];
+ for l=1 upto nbobj:
+ for k=0 upto apj[l]:
+ cpt[tapj]:=tapj;
+ cou[tapj]:=if perso[l]:scantokens(couleurperso) else: coul[l][k] fi;
+ Fc[tapj].nb:=OTFc[l][k].nb;
+ for p=1 upto Fc[tapj].nb:
+ Fc[tapj][p]:=OTFc[l][k][p];
+ endfor;
+ Fc[tapj].iso:=OTFc[l][k].iso;
+ ALT[tapj]:=ALT[l][k];
+ Vue[tapj]:=Vue[l][k];
+ if Ferme[l]:
+ if Vue[tapj]=false:
+ tapj:=tapj-1;
+ fi;
+ fi;
+ tapj:=tapj+1;
+ endfor;
+ endfor;
+ tapj:=tapj-1;
+ QS(0,tapj);
+ for k=0 upto tapj:
+ fill for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withcolor if Vue[cpt[k]]:
+ if arcenciel: lumin(cpt[k])*Hsvtorgb(((cpt[k]/tapj)*360,satu,lum))
+ else:lumin(cpt[k])*cou[cpt[k]] fi
+ else: abs(lumin(cpt[k]))*cou[cpt[k]] fi;
+ if traits:
+ draw for l=1 upto Fc[cpt[k]].nb:
+ Projette(Fc[cpt[k]][l])--
+ endfor
+ cycle withpen pencircle scaled0.25bp;
+ fi;
+ endfor;
+enddef;
+
+vardef Objettore[](expr Rn,rn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux:
+ Ferme.@:=false
+ else:
+ Ferme.@:=true;
+ fi;
+ scantokens("numeric "&substring(0,1) of rn&"; "&rn&";");
+ scantokens("numeric "&substring(0,1) of Rn&"; "&Rn&";");
+ vardef Famille(expr u,v)=((R+r*cos(u))*cos(v),(R+r*cos(u))*sin(v),r*sin(u)) enddef;
+ umin:=-pi; umax:=pi; upas:=2*pi/nb;
+ vmin:=-pi; vpas:=2*pi/subh; vmax:=pi;
+ apj:=0;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=0 upto (nb-1):
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef ObjetTube[](expr Fn,dp,rayon,tmin,nbp,pas)=%f,f',f'',rayon du tube,paramètre départ,nb points, pas
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ scantokens("vardef F(expr t)="&Fn&" enddef;");
+ scantokens("vardef Fp(expr t)="&dp&" enddef;");
+ color G[][];
+ NB:=nbp;%nb de pas
+ nn:=pas;
+ %pour gérer le "flip" aux points d'inflexion
+ color VNbisprec[];
+ VNbisprec[tmin-nn]=T(tmin-nn) Vectprod ((T(tmin)-T(tmin-2*nn))/2);
+ %
+ ang:=360/nb;
+ for l=0 upto NB:
+ for k=0 upto nb:
+ G[l][k]=F(tmin+l*pas)+rayon*(cosd(k*ang)*VNn(tmin+l*pas)+sind(k*ang)*VBNn(tmin+l*pas));
+ endfor;
+ endfor;
+ apj:=0;
+ if creux=false:
+ Ferme.@:=true;
+ nbsp:=nb;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nbsp;
+ for k=1 upto nbsp:
+ OTFc.@[apj][k]:=Image(G[0][nbsp+1-k]);
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nbsp:+OTFc.@[apj][k] endfor)/nbsp;
+ apj:=apj+1;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nbsp;
+ for k=nbsp downto 1:
+ OTFc.@[apj][k]:=Image(G[NB][k]);
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nbsp:+OTFc.@[apj][k] endfor)/nbsp;
+ apj:=apj+1;
+ else:
+ Ferme.@:=false;
+ fi;
+ for l=0 upto (NB-1):
+ for k=0 upto nb-1:
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(G[l][k]);
+ OTFc.@[apj][2]:=Image(G[l][k+1]);
+ OTFc.@[apj][3]:=Image(G[l+1][k+1]);
+ OTFc.@[apj][4]:=Image(G[l+1][k]);
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj:=apj-1;
+ for k=0 upto apj:
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+enddef;
+
+vardef ObjetCylindre[](expr fn,umin,umax,vmin,vmax)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ scantokens("vardef Famille(expr u,v)="&fn&" enddef;");
+ apj:=0;
+ upas:=(umax-umin)/nb;vpas:=(vmax-vmin)/subh;
+ %On crée les facettes et on calcule la profondeur en Z.
+ %for k=umin step upas until umax:
+ % for l=vmin step vpas until vmax:
+ for k=0 upto (nb-1):
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef Objetcylindre[](expr rn,hn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ scantokens("numeric "&substring(0,1) of rn&"; "&rn&";");
+ scantokens("numeric "&substring(0,1) of hn&"; "&hn&";");
+ vardef Famille(expr u,v)=(r*cos(u),r*sin(u),v) enddef;
+ umin:=pi; umax:=-pi; upas:=-2*pi/nb;
+ vmin:=0; vmax:=h; vpas:=h/subh;
+ nbsp:=nb;
+ apj:=0;
+ if creux=false:
+ Ferme.@:=true;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nbsp;
+ for k=1 upto nb:
+ OTFc.@[apj][k]:=Image(Famille(umin+k*upas,vmin));
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nbsp:+OTFc.@[apj][k] endfor)/nbsp;
+ apj:=apj+1;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nbsp;
+ for k=1 upto nbsp:
+ OTFc.@[apj][k]:=Image(Famille(umin+(nbsp-k)*upas,vmax));
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nbsp:+OTFc.@[apj][k] endfor)/nbsp;
+ apj:=apj+1;
+ else:
+ Ferme.@:=false;
+ fi;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=0 upto (nb-1):
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image((Famille(umin+k*upas,vmin+l*vpas)));
+ OTFc.@[apj][3]:=Image((Famille(umin+k*upas,vmin+(l+1)*vpas)));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj:=apj-1;
+ for k=0 upto apj:
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+enddef;
+
+vardef ObjetCone[](expr fn,umin,umax,zbas,orign)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ scantokens("vardef Famille(expr u)="&fn&" enddef;");
+ scantokens("color "&substring(0,4) of orign&"; "&orign&";");
+ apj:=0;
+ upas:=(umax-umin)/nb;vpas:=2*abs(zbas)/subh;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=0 upto (nb-1):
+ for l=0 upto (2*subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas)+(l/subh)[Famille(umin+(k+1)*upas),orig]-Famille(umin+(k+1)*upas));
+ OTFc.@[apj][4]:=Image(Famille(umin+k*upas)+(l/subh)[Famille(umin+k*upas),orig]-Famille(umin+k*upas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas)+((l+1)/subh)[Famille(umin+k*upas),orig]-Famille(umin+k*upas));
+ OTFc.@[apj][2]:=Image(Famille(umin+(k+1)*upas)+((l+1)/subh)[Famille(umin+(k+1)*upas),orig]-Famille(umin+(k+1)*upas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+subh:=12;
+
+vardef Objetcone[](expr rn,hn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ scantokens("numeric "&substring(0,1) of rn&"; "&rn&";");
+ scantokens("numeric "&substring(0,1) of hn&"; "&hn&";");
+ vardef Famille(expr u,v)=(r*(1-(v/h))*cos(u),r*(1-(v/h))*sin(u),v) enddef;
+ umin:=pi; umax:=-pi; upas:=-2*pi/nb;
+ vmin:=0; vpas:=h/subh; vmax:=h-vpas;
+ apj:=0;
+ if creux=false:
+ Ferme.@:=true;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nb;
+ for k=0 upto nb:
+ OTFc.@[apj][k]:=Image(Famille(umin+k*upas,vmin));
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nb:+OTFc.@[apj][k] endfor)/nb;
+ apj:=apj+1;
+ else:
+ Ferme.@:=false;
+ fi;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=0 upto (nb-1):
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj:=apj-1;
+ for k=0 upto apj:
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+enddef;
+
+vardef Objettronccone[](expr rn,hn,Hn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ scantokens("numeric "&substring(0,1) of rn&"; "&rn&";");
+ scantokens("numeric "&substring(0,1) of hn&"; "&hn&";");
+ scantokens("numeric "&substring(0,1) of Hn&"; "&Hn&";");
+ vardef Famille(expr u,v)=(r*(1-v/H)*cos(u),r*(1-v/H)*sin(u),v) enddef;
+ umin:=pi; umax:=-pi; upas:=-2*pi/nb;
+ vmin:=0; vpas:=h/subh; vmax:=h;
+ apj:=0;
+ if creux=false:
+ Ferme.@:=true;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nb;
+ for k=0 upto nb:
+ OTFc.@[apj][k]:=Image(Famille(umin+k*upas,vmin));
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nb:+OTFc.@[apj][k] endfor)/nb;
+ apj:=apj+1;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nb;
+ for k=0 upto nb:
+ OTFc.@[apj][nb-k]:=Image(Famille(umin+k*upas,vmax));
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nb:+OTFc.@[apj][k] endfor)/nb;
+ apj:=apj+1;
+ else:
+ Ferme.@:=false;
+ fi;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=0 upto (nb-1):%umin step upas until umax-upas:
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj:=apj-1;
+ for k=0 upto apj:
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+enddef;
+
+vardef Objetsphere[](expr Rn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux:Ferme.@:=false else: Ferme.@:=true fi;
+ scantokens("numeric "&substring(0,1) of Rn&"; "&Rn&";");
+ vardef Famille(expr u,v)=(R*(cos(u)*cos(v),cos(u)*sin(v),sin(u))) enddef;
+ umin:=-pi/2; umax:=pi/2; upas:=pi/nb;
+ vmin:=-pi; vpas:=2*pi/subh; vmax:=pi;
+ apj:=0;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=0 upto (nb-1):
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef Objetcalotte[](expr Rn,Phib,Phih)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ scantokens("numeric "&substring(0,1) of Rn&"; "&Rn&";");
+ scantokens("numeric "&substring(0,4) of Phib&"; "&Phib&";");
+ scantokens("numeric "&substring(0,4) of Phih&"; "&Phih&";");
+ vardef Famille(expr u,v)=(R*(cos(u)*cos(v),cos(u)*sin(v),sin(u))) enddef;
+ umin:=phib; umax:=phih; upas:=(phih-phib)/nb;
+ vmin:=-pi; vpas:=2*pi/subh; vmax:=pi;
+ apj:=0;
+ nbsp:=subh;
+ if creux=false:
+ Ferme.@:=true;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nbsp;
+ for l=1 upto nbsp:
+ OTFc.@[apj][l]:=Image(Famille(umin,vmax-l*vpas));
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nbsp:+OTFc.@[apj][k] endfor)/nbsp;
+ apj:=apj+1;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=subh;
+ for l=1 upto nbsp:
+ OTFc.@[apj][l]:=Image(Famille(umax,vmin+l*vpas));
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nbsp:+OTFc.@[apj][k] endfor)/nbsp;
+ apj:=apj+1;
+ else:
+ Ferme.@:=false;
+ fi;
+ %On crée les facettes et on calcule la profondeur en Z.
+ %for k=umin step upas until umax-upas:
+ for k=0 upto (nb-1):
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj:=apj-1;
+ for k=0 upto apj:
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+enddef;
+
+vardef Objetanneau[](expr Rn,rn,hn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux:Ferme.@:=false else:Ferme.@:=true fi;
+ scantokens("numeric "&substring(0,1) of Rn&"; "&Rn&";");
+ scantokens("numeric "&substring(0,1) of rn&"; "&rn&";");
+ scantokens("numeric "&substring(0,1) of hn&"; "&hn&";");
+ path sectionanneau;
+ sectionanneau=(R,0)--(R,h)--(r,h)--(r,0)--cycle;
+ vardef Famille(expr u,v)=((xpart(point(u) of sectionanneau)*cos(v),xpart(point(u) of sectionanneau)*sin(v),ypart(point(u) of sectionanneau))) enddef;
+ umin:=0; umax:=4; upas:=4/nb;
+ vmin:=-pi; vpas:=2*pi/subh; vmax:=2*pi;
+ apj:=0;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=0 upto (nb-1):
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef ObjetAnneau[](expr nbpn,sectionanneau)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ scantokens("numeric "&substring(0,3) of nbpn&"; "&nbpn&";");
+ vardef Famille(expr u,v)=((xpart(point(u) of sectionanneau)*cos(v),xpart(point(u) of sectionanneau)*sin(v),ypart(point(u) of sectionanneau))) enddef;
+ umin:=0; umax:=nbp; upas:=1;
+ vmin:=-pi; vpas:=2*pi/subh; vmax:=pi;
+ apj:=0;
+ %On crée les facettes et on calcule la profondeur en Z.
+ for k=0 upto (nbp-1):
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Famille(umin+(k+1)*upas,vmin+l*vpas));
+ OTFc.@[apj][2]:=Image(Famille(umin+k*upas,vmin+l*vpas));
+ OTFc.@[apj][3]:=Image(Famille(umin+k*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj][4]:=Image(Famille(umin+(k+1)*upas,vmin+(l+1)*vpas));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef ObjetPrisme[](expr axen,hn)(text tn)=%pb avec certaines positions de l'observateur.->maillage vertical
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ scantokens("numeric "&substring(0,1) of hn&"; "&hn&";");
+ scantokens("color "&substring(0,3) of axen&"; "&axen&";");
+ nbsn:=0;%nb sommets total pour la base
+ for _p=tn:
+ Sommet[nbsn]:=_p;
+ nbsn:=nbsn+1;
+ endfor;
+ apj:=0;
+ if creux=false:
+ Ferme.@:=true;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nbsn;
+ for k=1 upto nbsn:
+ OTFc.@[apj][k]:=Image(Sommet[nbsn-k]);
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nbsn:+OTFc.@[apj][k] endfor)/nbsn;
+ apj:=apj+1;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nbsn;
+ for k=1 upto nbsn:
+ OTFc.@[apj][k]:=Image(Sommet[k-1]+h*axe);
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nbsn:+OTFc.@[apj][k] endfor)/nbsn;
+ apj:=apj+1;
+ else:
+ Ferme.@:=false;
+ fi;
+ for k=1 upto nbsn:
+ for l=0 upto (subh-1):
+ for p=0 upto (nb-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image((p/nb)[Sommet[(k-1) mod nbsn],Sommet[k mod nbsn]]+(l/subh)*(h*axe));
+ OTFc.@[apj][2]:=Image(((p+1)/nb)[Sommet[(k-1) mod nbsn],Sommet[k mod nbsn]]+(l/subh)*(h*axe));
+ OTFc.@[apj][3]:=Image(((p+1)/nb)[Sommet[(k-1) mod nbsn],Sommet[k mod nbsn]]+((l+1)/subh)*(h*axe));
+ OTFc.@[apj][4]:=Image((p/nb)[Sommet[(k-1) mod nbsn],Sommet[k mod nbsn]]+((l+1)/subh)*(h*axe));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ endfor;
+ apj:=apj-1;
+ for k=0 upto apj:
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+enddef;
+
+vardef Objetcube[](expr ar)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux=true:Ferme.@:=false else: Ferme.@:=true fi;
+ scantokens("numeric "&substring(0,1) of ar&"; "&ar&";");
+ Sommet1:=(a/2,-a/2,-a/2);
+ Sommet2:=(a/2,a/2,-a/2);
+ Sommet3:=(-a/2,a/2,-a/2);
+ Sommet4:=(-a/2,-a/2,-a/2);
+ Sommet5:=(-a/2,-a/2,a/2);
+ Sommet6:=(a/2,-a/2,a/2);
+ Sommet7:=(a/2,a/2,a/2);
+ Sommet8:=(-a/2,a/2,a/2);
+%%Faces
+ apj:=0;
+ for p=1 upto 4:
+ for l=0 upto (subh-1):
+ for k=0 upto (subh-1):
+ OTFc.@[apj][1]:=Image((l/subh)[Sommet[p],Sommet[(p mod 4)+1]]+(k/subh)*(Sommet[(p mod 4)+5]-Sommet[p]));
+ OTFc.@[apj][2]:=Image(((l+1)/subh)[Sommet[p],Sommet[(p mod 4)+1]]+(k/subh)*(Sommet[(p mod 4)+5]-Sommet[p]));
+ OTFc.@[apj][3]:=Image(((l+1)/subh)[Sommet[p],Sommet[(p mod 4)+1]]+((k+1)/subh)*(Sommet[(p mod 4)+5]-Sommet[p]));
+ OTFc.@[apj][4]:=Image((l/subh)[Sommet[p],Sommet[(p mod 4)+1]]+((k+1)/subh)*(Sommet[(p mod 4)+5]-Sommet[p]));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ endfor;
+ %face du dessous
+ for l=0 upto (subh-1):
+ for k=0 upto (subh-1):
+ OTFc.@[apj][1]:=Image((l/subh)[Sommet1,Sommet4]+(k/subh)*(Sommet2-Sommet1));
+ OTFc.@[apj][2]:=Image(((l+1)/subh)[Sommet1,Sommet4]+(k/subh)*(Sommet2-Sommet1));
+ OTFc.@[apj][3]:=Image(((l+1)/subh)[Sommet1,Sommet4]+((k+1)/subh)*(Sommet2-Sommet1));
+ OTFc.@[apj][4]:=Image((l/subh)[Sommet1,Sommet4]+((k+1)/subh)*(Sommet2-Sommet1));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ %face du dessus
+ for l=0 upto (subh-1):
+ for k=0 upto (subh-1):
+ OTFc.@[apj][1]:=Image((l/subh)[Sommet6,Sommet7]+(k/subh)*(Sommet5-Sommet6));
+ OTFc.@[apj][2]:=Image(((l+1)/subh)[Sommet6,Sommet7]+(k/subh)*(Sommet5-Sommet6));
+ OTFc.@[apj][3]:=Image(((l+1)/subh)[Sommet6,Sommet7]+((k+1)/subh)*(Sommet5-Sommet6));
+ OTFc.@[apj][4]:=Image((l/subh)[Sommet6,Sommet7]+((k+1)/subh)*(Sommet5-Sommet6));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj:=apj-1;
+ for k=0 upto apj:
+ OTFc.@[k].nb:=4;
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+enddef;
+
+vardef Objetpave[](expr Lln,Hhn,Ppn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux=true: Ferme.@:=true else: Ferme.@:=false fi;
+ scantokens("numeric "&substring(0,1) of Lln&"; "&Lln&";");
+ scantokens("numeric "&substring(0,1) of Hhn&"; "&Hhn&";");
+ scantokens("numeric "&substring(0,1) of Ppn&"; "&Ppn&";");
+ NbS:=8;
+ Sommet1:=(P/2,-L/2,-H/2);
+ Sommet2:=(P/2,L/2,-H/2);
+ Sommet3:=(-P/2,L/2,-H/2);
+ Sommet4:=(-P/2,-L/2,-H/2);
+ Sommet5:=(-P/2,-L/2,H/2);
+ Sommet6:=(P/2,-L/2,H/2);
+ Sommet7:=(P/2,L/2,H/2);
+ Sommet8:=(-P/2,L/2,H/2);
+%%Faces
+ apj:=0;
+ for p=1 upto 4:
+ for l=0 upto (subh-1):
+ for k=0 upto (subh-1):
+ OTFc.@[apj][1]:=Image((l/subh)[Sommet[p],Sommet[(p mod 4)+1]]+(k/subh)*(Sommet[(p mod 4)+5]-Sommet[p]));
+ OTFc.@[apj][2]:=Image(((l+1)/subh)[Sommet[p],Sommet[(p mod 4)+1]]+(k/subh)*(Sommet[(p mod 4)+5]-Sommet[p]));
+ OTFc.@[apj][3]:=Image(((l+1)/subh)[Sommet[p],Sommet[(p mod 4)+1]]+((k+1)/subh)*(Sommet[(p mod 4)+5]-Sommet[p]));
+ OTFc.@[apj][4]:=Image((l/subh)[Sommet[p],Sommet[(p mod 4)+1]]+((k+1)/subh)*(Sommet[(p mod 4)+5]-Sommet[p]));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ endfor;
+ %face du dessous
+ for l=0 upto (subh-1):
+ for k=0 upto (subh-1):
+ OTFc.@[apj][1]:=Image((l/subh)[Sommet1,Sommet4]+(k/subh)*(Sommet2-Sommet1));
+ OTFc.@[apj][2]:=Image(((l+1)/subh)[Sommet1,Sommet4]+(k/subh)*(Sommet2-Sommet1));
+ OTFc.@[apj][3]:=Image(((l+1)/subh)[Sommet1,Sommet4]+((k+1)/subh)*(Sommet2-Sommet1));
+ OTFc.@[apj][4]:=Image((l/subh)[Sommet1,Sommet4]+((k+1)/subh)*(Sommet2-Sommet1));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ %face du dessus
+ for l=0 upto (subh-1):
+ for k=0 upto (subh-1):
+ OTFc.@[apj][1]:=Image((l/subh)[Sommet6,Sommet7]+(k/subh)*(Sommet5-Sommet6));
+ OTFc.@[apj][2]:=Image(((l+1)/subh)[Sommet6,Sommet7]+(k/subh)*(Sommet5-Sommet6));
+ OTFc.@[apj][3]:=Image(((l+1)/subh)[Sommet6,Sommet7]+((k+1)/subh)*(Sommet5-Sommet6));
+ OTFc.@[apj][4]:=Image((l/subh)[Sommet6,Sommet7]+((k+1)/subh)*(Sommet5-Sommet6));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj:=apj-1;
+ for k=0 upto apj:
+ OTFc.@[k].nb:=4;
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+enddef;
+
+vardef Objetgrille[](expr amn,ann,bmn,bnn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ Ferme.@:=false;
+ scantokens("numeric "&substring(0,2) of amn&"; "&amn&";");
+ scantokens("numeric "&substring(0,2) of ann&"; "&ann&";");
+ scantokens("numeric "&substring(0,2) of bmn&"; "&bmn&";");
+ scantokens("numeric "&substring(0,2) of bnn&"; "&bnn&";");
+ apj:=0;
+ upas:=(an-am)/nb;
+ vpas:=(bn-bm)/subh;
+ for k=0 upto (nb-1):
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image((am+k*upas,bm+l*vpas,0));
+ OTFc.@[apj][2]:=Image((am+(k+1)*upas,bm+l*vpas,0));
+ OTFc.@[apj][3]:=Image((am+(k+1)*upas,bm+(l+1)*vpas,0));
+ OTFc.@[apj][4]:=Image((am+k*upas,bm+(l+1)*vpas,0));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef ObjetRuban[](expr hn)(text tn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ scantokens("numeric "&substring(0,1) of hn&"; "&hn&";");
+ nbsn:=0;%nb sommets total pour la base
+ for _p=tn:
+ Sommet[nbsn]:=_p;
+ nbsn:=nbsn+1;
+ endfor;
+ Ferme.@:=false;
+ apj:=0;
+ for k=1 upto (nbsn-1):
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image(Sommet[k-1]+(l/subh)*(h*(0,0,1)));
+ OTFc.@[apj][2]:=Image(Sommet[k]+(l/subh)*(h*(0,0,1)));
+ OTFc.@[apj][3]:=Image(Sommet[k]+((l+1)/subh)*(h*(0,0,1)));
+ OTFc.@[apj][4]:=Image(Sommet[k-1]+((l+1)/subh)*(h*(0,0,1)));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj:=apj-1;
+ for k=0 upto apj:
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+enddef;
+
+vardef ObjetBiface[](text tn)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ nbsn:=0;%nb sommets total pour la base
+ for _p=tn:
+ nbsn:=nbsn+1;
+ Sommet[nbsn]:=_p;
+ endfor;
+ Ferme.@:=true;
+ apj:=0;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nbsn;
+ for k=1 upto nbsn:
+ OTFc.@[apj][k]:=Image(Sommet[nbsn+1-k]);
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nbsn:+OTFc.@[apj][k] endfor)/nbsn;
+ apj:=apj+1;
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=nbsn;
+ for k=1 upto nbsn:
+ OTFc.@[apj][k]:=Image(Sommet[k]);
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for k=2 upto nbsn:+OTFc.@[apj][k] endfor)/nbsn;
+ for k=0 upto apj:
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+enddef;
+
+lambda:=3;
+mu:=2;
+
+vardef Objetplan[](expr Ann,Bnn,Cnn)=%à modifier mais pour l'instant ça marche pour les intersections;
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ Ferme.@:=false;
+ color PPP[];
+ scantokens("color "&substring(0,2) of Ann&"; "&Ann&";");
+ scantokens("color "&substring(0,2) of Bnn&"; "&Bnn&";");
+ scantokens("color "&substring(0,2) of Cnn&"; "&Cnn&";");
+ apj:=0;
+ PPP[0]=Image(An-lambda*(Bn-An)-mu*(Cn-An));
+ PPP[1]=Image(An+lambda*(Bn-An)-mu*(Cn-An));
+ PPP[2]=Image(An+lambda*(Bn-An)+mu*(Cn-An));
+ PPP[3]=Image(An-lambda*(Bn-An)+mu*(Cn-An));
+ for k=0 upto (nb-1):
+ for l=0 upto (subh-1):
+ tcpt.@[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Image((k/subh)[PPP0,PPP1]+(l/subh)*(PPP3-PPP0));
+ OTFc.@[apj][2]:=Image(((k+1)/subh)[PPP0,PPP1]+(l/subh)*(PPP3-PPP0));
+ OTFc.@[apj][3]:=Image(((k+1)/subh)[PPP0,PPP1]+((l+1)/subh)*(PPP3-PPP0));
+ OTFc.@[apj][4]:=Image((k/subh)[PPP0,PPP1]+((l+1)/subh)*(PPP3-PPP0));
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef Objettetraedre[](expr ar)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux=true:Ferme.@:=false else: Ferme.@:=true fi;
+ scantokens("numeric "&substring(0,1) of ar&"; "&ar&";");
+ Sommet0:=a*(-0.81650,-0.47140,-1/3);
+ Sommet1:=a*(0.81650,-0.471402,-1/3);
+ Sommet2:=a*(0,0.94281,-1/3);
+ Sommet3:=a*(0,0,1);
+ tcpt.@[0]:=0;
+ OTFc.@[0].nb:=3;
+ OTFc.@[0][1]:=Image(Sommet0);
+ OTFc.@[0][2]:=Image(Sommet2);
+ OTFc.@[0][3]:=Image(Sommet1);
+ OTFc.@[0].iso:=(OTFc.@[0][1]+OTFc.@[0][2]+OTFc.@[0][3])/3;
+ tcpt.@[1]:=1;
+ OTFc.@[1].nb:=3;
+ OTFc.@[1][1]:=Image(Sommet0);
+ OTFc.@[1][2]:=Image(Sommet1);
+ OTFc.@[1][3]:=Image(Sommet3);
+ OTFc.@[1].iso:=(OTFc.@[1][1]+OTFc.@[1][2]+OTFc.@[1][3])/3;
+ tcpt.@[2]:=2;
+ OTFc.@[2].nb:=3;
+ OTFc.@[2][1]:=Image(Sommet1);
+ OTFc.@[2][2]:=Image(Sommet2);
+ OTFc.@[2][3]:=Image(Sommet3);
+ OTFc.@[2].iso:=(OTFc.@[2][1]+OTFc.@[2][2]+OTFc.@[2][3])/3;
+ tcpt.@[3]:=3;
+ OTFc.@[3].nb:=3;
+ OTFc.@[3][1]:=Image(Sommet2);
+ OTFc.@[3][2]:=Image(Sommet0);
+ OTFc.@[3][3]:=Image(Sommet3);
+ OTFc.@[3].iso:=(OTFc.@[3][1]+OTFc.@[3][2]+OTFc.@[3][3])/3;
+ for k=0 upto 3:
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=3;
+enddef;
+
+vardef Objetoctaedre[](expr ar)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux=true:Ferme.@:=false else: Ferme.@:=true fi;
+ scantokens("numeric "&substring(0,1) of ar&"; "&ar&";");
+ AA=a*sqrt(2)/2;
+ ObjetNew.@((0,0,-a),(-AA,-AA,0),(AA,-AA,0),(AA,AA,0),(-AA,AA,0),(0,0,a))(%
+ 3,0,2,1,%
+ 3,0,3,2,%
+ 3,0,4,3,%
+ 3,0,1,4,%
+ 3,5,1,2,%
+ 3,5,2,3,%
+ 3,5,3,4,%
+ 3,5,4,1%
+ );
+enddef;
+
+vardef Objeticosaedre[](expr ar)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux=true:Ferme.@:=false else: Ferme.@:=true fi;
+ scantokens("numeric "&substring(0,1) of ar&"; "&ar&";");
+ aplus=sqrt((5+sqrt(5))/10);
+ amoins=sqrt((5-sqrt(5))/10);
+ bplus=(5+sqrt(5))/10;
+ bmoins=(5-sqrt(5))/10;
+ Cmp=sqrt(5)/5;
+ ObjetNew.@(a*(0,1,0),a*(amoins,Cmp,-bplus),a*(-amoins,Cmp,-bplus),a*(-aplus,Cmp,bmoins),a*(0,Cmp,2*Cmp),a*(aplus,Cmp,bmoins),a*(amoins,-Cmp,bplus),a*(-amoins,-Cmp,bplus),a*(-aplus,-Cmp,-bmoins),a*(0,-Cmp,-2*Cmp),a*(aplus,-Cmp,-bmoins),a*(0,-1,0))(%
+ 3,1,5,6,%
+ 3,1,4,5,%
+ 3,1,3,4,%
+ 3,1,2,3,%
+ 3,1,6,2,%
+ 3,7,6,5,%
+ 3,8,5,4,%
+ 3,9,4,3,%
+ 3,10,3,2,%
+ 3,11,2,6,%
+ 3,6,7,11,%
+ 3,5,8,7,%
+ 3,4,9,8,%
+ 3,3,10,9,%
+ 3,2,11,10,%
+ 3,12,10,11,%
+ 3,12,9,10,%
+ 3,12,8,9,%
+ 3,12,7,8,%
+ 3,12,11,7);
+enddef;
+
+vardef Objetdodecaedre[](expr ar)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ if creux=true:Ferme.@:=false else: Ferme.@:=true fi;
+ scantokens("numeric "&substring(0,1) of ar&"; "&ar&";");
+ Ap=a*sqrt((5+2*sqrt(5))/15);
+ Bp=a*sqrt((10+2*sqrt(5))/15);
+ Cp=a*sqrt((5+sqrt(5))/30);
+ Dp=a*(sqrt(15)+sqrt(3))/6;
+ Am=a*sqrt((5-2*sqrt(5))/15);
+ Bm=a*sqrt((10-2*sqrt(5))/15);
+ Cm=a*sqrt((5-sqrt(5))/30);
+ Dm=a*(sqrt(15)-sqrt(3))/6;
+ Ee:=a*sqrt(3)/3;
+ ObjetNew.@((0,Ap,-Bm),(-Ee,Ap,-Am),(-Dm,Ap,Cp),(Dm,Ap,Cp),(Ee,Ap,-Am),(0,Am,-Bp),(-Dp,Am,-Cm),(-Ee,Am,Ap),(Ee,Am,Ap),(Dp,Am,-Cm),(0,-Am,Bp),(Dp,-Am,Cm),(Ee,-Am,-Ap),(-Ee,-Am,-Ap),(-Dp,-Am,Cm),(0,-Ap,Bm),(Ee,-Ap,Am),(Dm,-Ap,-Cp),(-Dm,-Ap,-Cp),(-Ee,-Ap,Am))(%
+ 5,5,1,2,3,4,%
+ 5,1,5,10,13,6,%
+ 5,2,1,6,14,7,%
+ 5,3,2,7,15,8,%
+ 5,4,3,8,11,9,%
+ 5,5,4,9,12,10,%
+ 5,6,13,18,19,14,%
+ 5,7,14,19,20,15,%
+ 5,8,15,20,16,11,%
+ 5,9,11,16,17,12,%
+ 5,10,12,17,18,13,%
+ 5,16,20,19,18,17%
+ );
+enddef;
+
+vardef ObjetNew[](text listesommets)(text listefaces)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ color Sommet[];
+ nbs:=0;
+ mini:=min(listefaces);
+ if mini=0:
+ for _p=listesommets:
+ Sommet[nbs]:=_p;
+ nbs:=nbs+1;
+ endfor;
+ elseif mini=1:
+ for _p=listesommets:
+ nbs:=nbs+1;
+ Sommet[nbs]:=_p;
+ endfor;
+ fi;
+ apj:=0;
+ j:=0;%pour compter le nombre de sommets à conserver
+ for p_=listefaces:
+ if j=0:
+ OTFc.@[apj].nb:=p_;
+ j:=1;
+ k:=0;
+ else:
+ k:=k+1;
+ if k<>OTFc.@[apj].nb:
+ OTFc.@[apj][k]:=Image(Sommet[p_]);
+ else:
+ OTFc.@[apj][k]:=Image(Sommet[p_]);
+ j:=0;
+ apj:=apj+1;
+ fi;
+ fi;
+ endfor;
+ apj:=apj-1;
+ for k=0 upto apj:
+ OTFc.@[k].iso:=(OTFc.@[k][1] for l=2 upto OTFc.@[k].nb:+OTFc.@[k][l] endfor)/OTFc.@[k].nb;
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+enddef;
+
+%Objet lecture externe
+
+vardef ObjetOFF[](expr nomfichier)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ OFF:=true;
+ string s_;
+ s_=readfrom nomfichier;
+ string ss[];
+ if s_<>EOF:
+ ss1 := loptok s_;
+ t_ := if ss1="%": 0 else: 1 fi;
+ forever:
+ ss[incr t_] := loptok s_;
+ exitif ss[t_]="";
+ endfor
+ else: false
+ fi;
+ NbS:=round(Mexp Mlog_str ss1);
+ NF:=round(Mexp Mlog_str ss2);
+ s_:=readfrom nomfichier;
+ if debut=0:
+ for k=0 upto NbS-1:
+ s_:=readfrom nomfichier;
+ if s_<>EOF:
+ ss1 := loptok s_;
+ n_ := if ss1="%": 0 else: 1 fi;
+ forever:
+ ss[incr n_] := loptok s_;
+ exitif ss[n_]="";
+ endfor
+ else: false
+ fi;
+ Sommet[k]:=(Mexp ((Mlog_str ss1) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss3) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss2) Mdiv (Mlog echelle)));
+ endfor;
+ else:
+ for k=1 upto NbS:
+ s_:=readfrom nomfichier;
+ if s_<>EOF:
+ ss1 := loptok s_;
+ n_ := if ss1="%": 0 else: 1 fi;
+ forever:
+ ss[incr n_] := loptok s_;
+ exitif ss[n_]="";
+ endfor
+ else: false
+ fi;
+ Sommet[k]:=(Mexp ((Mlog_str ss1) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss3) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss2) Mdiv (Mlog echelle)));
+ endfor;
+ fi;
+ apj:=0;
+ for nf=-4000 upto (-4000+NF)-1:
+ s_:=readfrom nomfichier;
+ if s_<>EOF:
+ ss1 := loptok s_;
+ n_ := if ss1="%": 0 else: 1 fi;
+ forever:
+ ss[incr n_] := loptok s_;
+ exitif ss[n_]="";
+ endfor
+ else: false
+ fi;
+ OTFc.@[apj].nb:=Mexp Mlog_str ss1;%pour savoir le nb de sommets par face
+ for nl=1 upto OTFc.@[apj].nb:
+ if invnormale=1:
+ OTFc.@[apj][nl]:=Image(Sommet[round(Mexp Mlog_str ss[nl+1])]);
+ else:
+ OTFc.@[apj][OTFc.@[apj].nb+1-nl]:=Image(Sommet[round(Mexp Mlog_str ss[nl+1])]);
+ fi;
+ endfor;
+ OTFc.@[apj].iso:=(OTFc.@[apj][1] for l=2 upto OTFc.@[apj].nb:+OTFc.@[apj][l] endfor)/OTFc.@[apj].nb;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ apj.@:=apj-1;
+ closefrom nomfichier;
+enddef;
+
+vardef ObjetOBJ[](expr nomfichier)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ string s_;
+ string ss[];
+ nbss:=1;
+ apj:=0;
+ forever:
+ s_:=readfrom nomfichier;
+ if s_<>EOF:
+ ss0 := loptok s_;
+ if ss0="v":
+ n_:=0;
+ forever:
+ ss[incr n_] := loptok s_;
+ exitif ss[n_]="";
+ endfor
+ Sommet[nbss]:=(Mexp((Mlog_str ss1) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss3) Mdiv (Mlog echelle)),Mexp ((Mlog_str ss2) Mdiv (Mlog echelle)));
+ nbss:=incr nbss;
+ elseif ss0="f":
+ n_:=0;
+ forever:
+ ss[incr n_] := loptok s_;
+ exitif ss[n_]="";
+ endfor;
+ OTFc.@[apj].nb:=n_-1;
+ for k=1 upto OTFc.@[apj].nb:
+ if invnormale=1:
+ OTFc.@[apj][OTFc.@[apj].nb-k+1] := Image(Sommet[round(Mexp(Mlog_str ss[k]))])
+ %if unknown OTFc.@[apj][OTFc.@[apj].nb-k+1]:
+ % show OTFc.@[apj][OTFc.@[apj].nb-k+1];
+ %fi;
+ else:
+ OTFc.@[apj][k] := Image(Sommet[round(Mexp(Mlog_str ss[k]))])
+ %if unknown OTFc.@[apj][k]:
+ % show OTFc.@[apj][k];
+ %fi;
+ fi;
+
+ endfor;
+ apj:=apj+1;
+ fi;
+ fi;
+ exitif s_=EOF;
+ endfor;
+ apj:=apj-1;
+ for k=0 upto apj:
+ OTFc.@[k].iso:=(OTFc.@[k][1] for l=2 upto OTFc.@[k].nb:+OTFc.@[k][l] endfor)/OTFc.@[k].nb;
+ ALT.@[k]:=-Zpart(GCoord(OTFc.@[k].iso));
+ if ProduitScalaire(Oeil-OTFc.@[k].iso,Normal(OTFc.@[k].iso,OTFc.@[k][1],OTFc.@[k][2]))>=0:
+ Vue.@[k]:=true;coul.@[k]:=outcolor;
+ else:
+ Vue.@[k]:=false;coul.@[k]:=incolor;
+ fi;
+ endfor;
+ apj.@:=apj;
+ closefrom nomfichier;
+enddef;
+
+
+%%%%%%%Objets travaillés
+
+vardef ObjetEnleve[](text t)=%les numéros des faces sont données par ordre croissant.
+ numeric numface[];
+ nface:=0;
+ numface[0]:=0;
+ %récupérer les numéros des faces.
+ forsuffixes _p=t:
+ nface:=nface+1;
+ numface[nface]=_p-(nface-1);%marchait :)
+ endfor;
+ numface[nface+1]:=apj.@-nface+1;
+ %Mettre dans l'ordre ces numéros.<-déjà fait par l'utilisateur
+ %enlever les numéros des faces
+ apj:=0;
+ for k=0 upto nface:
+ for l=numface[k] upto (numface[k+1]-1):
+ tcpt.@[apj]:=tcpt.@[apj+k];
+ OTFc.@[apj].nb:=OTFc.@[apj+k].nb;
+ for p=1 upto OTFc.@[apj].nb:
+ OTFc.@[apj][p]:=OTFc.@[apj+k][p];
+ endfor;
+ OTFc.@[apj].iso:=OTFc.@[apj+k].iso;
+ ALT.@[apj]:=ALT.@[apj+k];
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef ObjetDeplacement[](text t)=
+ %permet de déplacer un objet en donnant au préalable les angles de rotations et la translation. On peut également appliquer une transformation.
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ apj:=0;
+ forsuffixes p_=t:
+ Ferme.@:=Ferme[p_];
+ for k=0 upto apj[p_]:
+ cpt.@[apj]:=cpt[p_][k];
+ OTFc.@[apj].nb:=OTFc[p_][k].nb;
+ for l=1 upto OTFc.@[apj].nb:
+ OTFc.@[apj][l]:=Image(OTFc[p_][k][l]);
+ endfor;
+ OTFc.@[apj].iso:=Image(OTFc[p_][k].iso);
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=Outcolor[p_];
+ else:
+ if Ferme.@=false:
+ Vue.@[apj]:=false;coul.@[apj]:=Incolor[p_];
+ else:
+ apj:=apj-1;
+ fi;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef ObjetFusion[](text t)=
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ tapj:=0;
+ Nbobj:=0;
+ forsuffixes p_=t:
+ for k=0 upto apj[p_]:
+ cpt.@[tapj]:=tapj;
+ OTFc.@[tapj].nb:=OTFc[p_][k].nb;
+ for p=1 upto OTFc.@[tapj].nb:
+ OTFc.@[tapj][p]:=OTFc[p_][k][p];
+ endfor;
+ OTFc.@[tapj].iso:=OTFc[p_][k].iso;
+ ALT.@[tapj]:=-Zpart(GCoord(OTFc.@[tapj].iso));
+ Vue.@[tapj]:=Vue[p_][k];
+ coul.@[tapj]:=coul[p_][k];
+ tapj:=tapj+1;
+ endfor;
+ endfor;
+ apj.@:=tapj-1;
+enddef;
+
+%les intersections d'objets
+
+vardef ProjectionsurPlan(expr aa,bb,cc,dd)=%Projection du point aa sur le plan (bbccdd)
+ save di,vc;
+ color va,vb,vc,vd;
+ vd=Normal(bb,cc,dd);
+ va=vd/Norm(vd);
+ vb=aa-bb;
+ di=-ProduitScalaire(vb,va);
+ va:=di*va;
+ vb:=vb+va;
+ vc=bb+vb;
+ vc
+enddef;
+
+%%denis Roegel----------
+vardef IntersectionPlandroite(expr aa,bb,cc,dd,ee)=%pour les aretes :)
+ save Int;
+ boolean Int;
+ color gg,caaa[],Caaa[];
+ caaa3=Normal(aa,bb,cc)/Norm(Normal(aa,bb,cc));
+ caaa1=aa-dd;if Norm(caaa1)<>0:Caaa1=caaa1/Norm(caaa1) else:Caaa1=caaa1 fi;
+ caaa2=ee-dd;if Norm(caaa2)<>0:Caaa2=caaa2/Norm(caaa2) else:Caaa2=caaa2 fi;
+ ww:=ProduitScalaire(caaa2,caaa3);
+ if ww<>0:
+ %if (ProduitScalaire(caaa1,caaa3)*ww>0) and (ProduitScalaire(caaa1,caaa3)/ww<1):
+ caaa4=caaa2*(ProduitScalaire(caaa1,caaa3)/ww);
+ Int:=true;
+ %else:
+ % Int:=false;
+ %fi;
+ else: % the line is parallel to the plane
+ Int:=false;
+ fi;
+ Int
+enddef;
+
+vardef Intersectionplandroite(expr aa,bb,cc,dd,ee)=%pour les aretes :)
+ save Int;
+ boolean Int;
+ color gg,caaa[],Caaa[];
+ caaa3=Normal(aa,bb,cc)/Norm(Normal(aa,bb,cc));
+ caaa1=aa-dd;if Norm(caaa1)<>0:Caaa1=caaa1/Norm(caaa1) else:Caaa1=caaa1 fi;
+ caaa2=ee-dd;if Norm(caaa2)<>0:Caaa2=caaa2/Norm(caaa2) else:Caaa2=caaa2 fi;
+ ww:=ProduitScalaire(caaa2,caaa3);
+ if ww<>0:
+ if (ProduitScalaire(caaa1,caaa3)*ww>0) and (ProduitScalaire(caaa1,caaa3)/ww<1):
+ %message("ww"&decimal(ww)&" PS"&decimal(ProduitScalaire(caaa1,caaa3))&"");
+ caaa4=caaa2*(ProduitScalaire(caaa1,caaa3)/ww);
+ Int:=true;
+ else:
+ Int:=false;
+ fi;
+ else: % the line is parallel to the plane
+ Int:=false;
+ fi;
+ Int
+enddef;
+
+vardef IntersectionPlanDroite(expr aa,bb,cc,dd,ee)=%plan (aa,bb,cc) droite(dd,ee)
+ if Intersectionplandroite(aa,bb,cc,dd,ee):
+ gg=dd+caaa4;
+ fi;
+ gg
+enddef;
+
+vardef IPP(expr aa,bb,cc,dd,ee,ff)=
+ %a vérifier
+ %save da,db,dc;
+ boolean int;
+ da:=Norm(aa-ProjectionsurPlan(aa,dd,ee,ff));
+ db:=Norm(bb-ProjectionsurPlan(bb,dd,ee,ff));
+ dc:=Norm(cc-ProjectionsurPlan(cc,dd,ee,ff));
+ if (da=db) and (db=dc): % the two planes are parallel
+ int:=false;
+ else:
+ int:=true;
+ nbi:=nbi+1;
+ fi;
+enddef;
+%%---------------------
+
+vardef ObjetIntersection[](text t)=%plan n°1 solide n°2
+ color INTER[][][];%pour avoir les points d'intersection
+ nbsol:=1;
+ forsuffixes p_=t:
+ pp_[nbsol]:=p_;
+ nbsol:=nbsol+1;
+ endfor;
+ nbi:=0;
+ for k=0 upto apj[pp_[2]]:
+ IPP(OTFc[pp_[2]][k][1],OTFc[pp_[2]][k][2],OTFc[pp_[2]][k][3],PPP0,PPP1,PPP2);
+ if int=true:
+ nbint:=0;
+ OTFc[pp_[2]][k][OTFc[pp_[2]][k].nb+1]=OTFc[pp_[2]][k][1];
+ for l=1 upto (OTFc[pp_[2]][k].nb):
+ if Intersectionplandroite(PPP0,PPP1,PPP2,OTFc[pp_[2]][k][l],OTFc[pp_[2]][k][l+1]):
+ nbint:=nbint+1;
+ INTER[pp_2][k][nbint]=IntersectionPlanDroite(PPP0,PPP1,PPP2,OTFc[pp_[2]][k][l],OTFc[pp_[2]][k][l+1]);
+ fi;
+ endfor;
+ %%%Pas satisfaisant -> à travailler
+ %show nbint;
+ if nbint=2:
+ draw Projette(INTER[pp_2][k][1])--Projette(INTER[pp_2][k][2]) withpen pencircle scaled2bp withcolor violet;
+ fi;
+ fi;
+ endfor;
+enddef;
+
+vardef ObjetSepare[](expr nbd,nbD)=%nbd pour l'objet du dessous, nbD pour l'objet du dessus.
+ Ferme[nbd]:=Ferme.@;
+ Ferme[nbD]:=Ferme.@;
+ Outcolor[nbd]:=outcolor;
+ Incolor[nbd]:=incolor;
+ Outcolor[nbD]:=outcolor;
+ Incolor[nbD]:=incolor;
+ color INTER[][][];
+ color Nn;color PPP.iso;
+ Nn=Normal(PPP0,PPP1,PPP3);
+ PPP.iso=(PPP0+PPP1+PPP2)/3;
+ apj:=0;bpj:=0;%bpj pour le 2eme solide
+ for k=0 upto apj.@:
+ if ProduitScalaire(Nn,OTFc.@[k].iso-PPP.iso)<=0:
+ nbint:=0;
+ OTFc.@[k][OTFc.@[k].nb+1]:=OTFc.@[k][1];
+ for l=1 upto OTFc.@[k].nb:
+ if Intersectionplandroite(PPP0,PPP1,PPP3,OTFc.@[k][l],OTFc.@[k][l+1]):
+ nbint:=nbint+1;
+ INTER.@[k][nbint]=IntersectionPlanDroite(PPP0,PPP1,PPP3,OTFc.@[k][l],OTFc.@[k][l+1]);
+ prec.@[k][nbint]:=l;
+ suiv.@[k][nbint]:=l+1;
+ fi;
+ endfor;
+ if nbint=0:
+ tcpt[nbd][apj]:=apj; OTFc[nbd][apj].nb:=OTFc.@[k].nb;
+ for l=1 upto OTFc[nbd][apj].nb:
+ OTFc[nbd][apj][l]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbd][apj].iso:=(OTFc[nbd][apj][1]+for l=2 upto OTFc[nbd][apj].nb:+OTFc[nbd][apj][l] endfor)/OTFc[nbd][apj].nb;
+ ALT[nbd][apj]:=-Zpart(GCoord(OTFc[nbd][apj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbd][apj].iso,Normal(OTFc[nbd][apj].iso,OTFc[nbd][apj][1],OTFc[nbd][apj][2]))>=0:
+ Vue[nbd][apj]:=true;coul[nbd][apj]:=outcolor;
+ else:
+ Vue[nbd][apj]:=false;coul[nbd][apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ fi;
+ if nbint=2:
+ tcpt[nbd][apj]:=apj;
+ if ProduitScalaire(Nn,OTFc.@[k][prec.@[k][1]]-PPP.iso)<=0:
+ compt:=0;
+ for l=1 upto prec.@[k][1]:
+ compt:=compt+1;
+ OTFc[nbd][apj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbd][apj][compt+1]:=Image(INTER.@[k][1]);
+ OTFc[nbd][apj][compt+2]:=Image(INTER.@[k][2]);
+ compt:=compt+2;
+ for l=suiv.@[k][2] upto OTFc.@[k].nb:
+ compt:=compt+1;
+ OTFc[nbd][apj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbd][apj].nb:=compt;
+ OTFc[nbd][apj].iso:=(OTFc[nbd][apj][1]+for l=2 upto OTFc[nbd][apj].nb:+OTFc[nbd][apj][l] endfor)/OTFc[nbd][apj].nb;
+ ALT[nbd][apj]:=-Zpart(GCoord(OTFc[nbd][apj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbd][apj].iso,Normal(OTFc[nbd][apj].iso,OTFc[nbd][apj][1],OTFc[nbd][apj][2]))>=0:
+ Vue[nbd][apj]:=true;coul[nbd][apj]:=outcolor;
+ else:
+ Vue[nbd][apj]:=false;coul[nbd][apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ %2eme solide
+ compt:=1;
+ OTFc[nbD][bpj][1]:=Image(INTER.@[k][1]);
+ for l=suiv.@[k][1] upto prec.@[k][2]:
+ compt:=compt+1;
+ OTFc[nbD][bpj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ compt:=compt+1;
+ OTFc[nbD][bpj][compt]:=Image(INTER.@[k][2]);
+ OTFc[nbD][bpj].nb:=compt;
+ OTFc[nbD][bpj].iso:=(OTFc[nbD][bpj][1]+for l=2 upto OTFc[nbD][bpj].nb:+OTFc[nbD][bpj][l] endfor)/OTFc[nbD][bpj].nb;
+ ALT[nbD][bpj]:=-Zpart(GCoord(OTFc[nbD][bpj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbD][bpj].iso,Normal(OTFc[nbD][bpj].iso,OTFc[nbD][bpj][1],OTFc[nbD][bpj][2]))>=0:
+ Vue[nbD][bpj]:=true;coul[nbD][bpj]:=outcolor;
+ else:
+ Vue[nbD][bpj]:=false;coul[nbD][bpj]:=incolor;
+ fi;
+ bpj:=bpj+1;
+ %fin 2eme solide
+ else:
+ compt:=1;
+ OTFc[nbd][apj][1]:=Image(INTER.@[k][1]);
+ for l=suiv.@[k][1] upto prec.@[k][2]:
+ compt:=compt+1;
+ OTFc[nbd][apj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ compt:=compt+1;
+ OTFc[nbd][apj][compt]:=Image(INTER.@[k][2]);
+ OTFc[nbd][apj].nb:=compt;
+ OTFc[nbd][apj].iso:=(OTFc[nbd][apj][1]+for l=2 upto OTFc[nbd][apj].nb:+OTFc[nbd][apj][l] endfor)/OTFc[nbd][apj].nb;
+ ALT[nbd][apj]:=-Zpart(GCoord(OTFc[nbd][apj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbd][apj].iso,Normal(OTFc[nbd][apj].iso,OTFc[nbd][apj][1],OTFc[nbd][apj][2]))>=0:
+ Vue[nbd][apj]:=true;coul[nbd][apj]:=outcolor;
+ else:
+ Vue[nbd][apj]:=false;coul[nbd][apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ %2eme solide
+ compt:=0;
+ for l=1 upto prec.@[k][1]:
+ compt:=compt+1;
+ OTFc[nbD][bpj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbD][bpj][compt+1]:=Image(INTER.@[k][1]);
+ OTFc[nbD][bpj][compt+2]:=Image(INTER.@[k][2]);
+ compt:=compt+2;
+ for l=suiv.@[k][2] upto OTFc.@[k].nb:
+ compt:=compt+1;
+ OTFc[nbD][bpj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbD][bpj].nb:=compt;
+ OTFc[nbD][bpj].iso:=(OTFc[nbD][bpj][1]+for l=2 upto OTFc[nbD][bpj].nb:+OTFc[nbD][bpj][l] endfor)/OTFc[nbD][bpj].nb;
+ ALT[nbD][bpj]:=-Zpart(GCoord(OTFc[nbD][bpj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbD][bpj].iso,Normal(OTFc[nbD][bpj].iso,OTFc[nbD][bpj][1],OTFc[nbD][bpj][2]))>=0:
+ Vue[nbD][bpj]:=true;coul[nbD][bpj]:=outcolor;
+ else:
+ Vue[nbD][bpj]:=false;coul[nbD][bpj]:=incolor;
+ fi;
+ bpj:=bpj+1;
+ %fin 2eme solide
+ fi;
+ fi;
+ if nbint=1:
+ compt:=0;%compteur pour le nb de sommets
+ comp:=0;%pour savoir où se situe le point à enlever
+ for l=1 upto OTFc.@[k].nb:
+ if ProduitScalaire(Nn,OTFc.@[k][l]-PPP.iso)>0:
+ comp:=comp+1;
+ fi;
+ endfor;
+ if comp=1:
+ tcpt[nbd][apj]:=apj;
+ for l=1 upto prec.@[k][1]-1:
+ compt:=compt+1;
+ OTFc[nbd][apj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ compt:=compt+1;
+ OTFc[nbd][apj][compt]:=Image(INTER.@[k][1]);
+ for l=suiv.@[k][1] upto OTFc.@[k].nb:
+ compt:=compt+1;
+ OTFc[nbd][apj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbd][apj].nb:=compt;
+ OTFc[nbd][apj].iso:=(OTFc[nbd][apj][1]+for l=2 upto OTFc[nbd][apj].nb:+OTFc[nbd][apj][l] endfor)/OTFc[nbd][apj].nb;
+ ALT[nbd][apj]:=-Zpart(GCoord(OTFc[nbd][apj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbd][apj].iso,Normal(OTFc[nbd][apj].iso,OTFc[nbd][apj][1],OTFc[nbd][apj][2]))>=0:
+ Vue[nbd][apj]:=true;coul[nbd][apj]:=outcolor;
+ else:
+ Vue[nbd][apj]:=false;coul[nbd][apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ else:
+ tcpt[nbd][apj]:=apj; OTFc[nbd][apj].nb:=OTFc.@[k].nb;
+ for l=1 upto OTFc[nbd][apj].nb:
+ OTFc[nbd][apj][l]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbd][apj].iso:=(OTFc[nbd][apj][1]+for l=2 upto OTFc[nbd][apj].nb:+OTFc[nbd][apj][l] endfor)/OTFc[nbd][apj].nb;
+ ALT[nbd][apj]:=-Zpart(GCoord(OTFc[nbd][apj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbd][apj].iso,Normal(OTFc[nbd][apj].iso,OTFc[nbd][apj][1],OTFc[nbd][apj][2]))>=0:
+ Vue[nbd][apj]:=true;coul[nbd][apj]:=outcolor;
+ else:
+ Vue[nbd][apj]:=false;coul[nbd][apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ fi;
+ fi;
+ fi;
+ if ProduitScalaire(Nn,OTFc.@[k].iso-PPP.iso)>0:
+ nbint:=0;
+ OTFc.@[k][OTFc.@[k].nb+1]:=OTFc.@[k][1];
+ for l=1 upto OTFc.@[k].nb:
+ if Intersectionplandroite(PPP0,PPP1,PPP3,OTFc.@[k][l],OTFc.@[k][l+1]):
+ nbint:=nbint+1;
+ INTER.@[k][nbint]=IntersectionPlanDroite(PPP0,PPP1,PPP3,OTFc.@[k][l],OTFc.@[k][l+1]);
+ prec.@[k][nbint]:=l;
+ suiv.@[k][nbint]:=l+1;
+ fi;
+ endfor;
+ %2eme solide sans intersection
+ if nbint=0:
+ tcpt[nbD][bpj]:=bpj; OTFc[nbD][bpj].nb:=OTFc.@[k].nb;
+ for l=1 upto OTFc[nbD][bpj].nb:
+ OTFc[nbD][bpj][l]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbD][bpj].iso:=(OTFc[nbD][bpj][1]+for l=2 upto OTFc[nbD][bpj].nb:+OTFc[nbD][bpj][l] endfor)/OTFc[nbD][bpj].nb;
+ ALT[nbD][bpj]:=-Zpart(GCoord(OTFc[nbD][bpj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbD][bpj].iso,Normal(OTFc[nbD][bpj].iso,OTFc[nbD][bpj][1],OTFc[nbD][bpj][2]))>=0:
+ Vue[nbD][bpj]:=true;coul[nbD][bpj]:=outcolor;
+ else:
+ Vue[nbD][bpj]:=false;coul[nbD][bpj]:=incolor;
+ fi;
+ bpj:=bpj+1;
+ fi;
+ %fin 2eme solide
+ if nbint=2:
+ tcpt[nbd][apj]:=apj;
+ if ProduitScalaire(Nn,OTFc.@[k][prec.@[k][1]]-PPP.iso)<=0:
+ compt:=0;
+ for l=1 upto prec.@[k][1]:
+ compt:=compt+1;
+ OTFc[nbd][apj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbd][apj][compt+1]:=Image(INTER.@[k][1]);
+ OTFc[nbd][apj][compt+2]:=Image(INTER.@[k][2]);
+ compt:=compt+2;
+ for l=suiv.@[k][2] upto OTFc.@[k].nb:
+ compt:=compt+1;
+ OTFc[nbd][apj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbd][apj].nb:=compt;
+ OTFc[nbd][apj].iso:=(OTFc[nbd][apj][1]+for l=2 upto OTFc[nbd][apj].nb:+OTFc[nbd][apj][l] endfor)/OTFc[nbd][apj].nb;
+ ALT[nbd][apj]:=-Zpart(GCoord(OTFc[nbd][apj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbd][apj].iso,Normal(OTFc[nbd][apj].iso,OTFc[nbd][apj][1],OTFc[nbd][apj][2]))>=0:
+ Vue[nbd][apj]:=true;coul[nbd][apj]:=outcolor;
+ else:
+ Vue[nbd][apj]:=false;coul[nbd][apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ %2eme solide
+ compt:=1;
+ OTFc[nbD][bpj][1]:=Image(INTER.@[k][1]);
+ for l=suiv.@[k][1] upto prec.@[k][2]:
+ compt:=compt+1;
+ OTFc[nbD][bpj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ compt:=compt+1;
+ OTFc[nbD][bpj][compt]:=Image(INTER.@[k][2]);
+ OTFc[nbD][bpj].nb:=compt;
+ OTFc[nbD][bpj].iso:=(OTFc[nbD][bpj][1]+for l=2 upto OTFc[nbD][bpj].nb:+OTFc[nbD][bpj][l] endfor)/OTFc[nbD][bpj].nb;
+ ALT[nbD][bpj]:=-Zpart(GCoord(OTFc[nbD][bpj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbD][bpj].iso,Normal(OTFc[nbD][bpj].iso,OTFc[nbD][bpj][1],OTFc[nbD][bpj][2]))>=0:
+ Vue[nbD][bpj]:=true;coul[nbD][bpj]:=outcolor;
+ else:
+ Vue[nbD][bpj]:=false;coul[nbD][bpj]:=incolor;
+ fi;
+ bpj:=bpj+1;
+ %fin 2eme solide
+ else:
+ compt:=1;
+ OTFc[nbd][apj][1]:=Image(INTER.@[k][1]);
+ for l=suiv.@[k][1] upto prec.@[k][2]:
+ compt:=compt+1;
+ OTFc[nbd][apj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ compt:=compt+1;
+ OTFc[nbd][apj][compt]:=Image(INTER.@[k][2]);
+ OTFc[nbd][apj].nb:=compt;
+ OTFc[nbd][apj].iso:=(OTFc[nbd][apj][1]+for l=2 upto OTFc[nbd][apj].nb:+OTFc[nbd][apj][l] endfor)/OTFc[nbd][apj].nb;
+ ALT[nbd][apj]:=-Zpart(GCoord(OTFc[nbd][apj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbd][apj].iso,Normal(OTFc[nbd][apj].iso,OTFc[nbd][apj][1],OTFc[nbd][apj][2]))>=0:
+ Vue[nbd][apj]:=true;coul[nbd][apj]:=outcolor;
+ else:
+ Vue[nbd][apj]:=false;coul[nbd][apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ %2eme solide
+ compt:=0;
+ for l=1 upto prec.@[k][1]:
+ compt:=compt+1;
+ OTFc[nbD][bpj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbD][bpj][compt+1]:=Image(INTER.@[k][1]);
+ OTFc[nbD][bpj][compt+2]:=Image(INTER.@[k][2]);
+ compt:=compt+2;
+ for l=suiv.@[k][2] upto OTFc.@[k].nb:
+ compt:=compt+1;
+ OTFc[nbD][bpj][compt]:=Image(OTFc.@[k][l]);
+ endfor;
+ OTFc[nbD][bpj].nb:=compt;
+ OTFc[nbD][bpj].iso:=(OTFc[nbD][bpj][1]+for l=2 upto OTFc[nbD][bpj].nb:+OTFc[nbD][bpj][l] endfor)/OTFc[nbD][bpj].nb;
+ ALT[nbD][bpj]:=-Zpart(GCoord(OTFc[nbD][bpj].iso));
+ if ProduitScalaire(Oeil-OTFc[nbD][bpj].iso,Normal(OTFc[nbD][bpj].iso,OTFc[nbD][bpj][1],OTFc[nbD][bpj][2]))>=0:
+ Vue[nbD][bpj]:=true;coul[nbD][bpj]:=outcolor;
+ else:
+ Vue[nbD][bpj]:=false;coul[nbD][bpj]:=incolor;
+ fi;
+ bpj:=bpj+1;
+ %fin 2eme solide
+ fi;
+ fi;
+ fi;
+ endfor;
+ apj[nbd]:=apj-1;
+ apj[nbD]:=bpj-1;
+enddef;
+
+%pour les lignes de niveaux.
+vardef ObjetSurfaceZ[](expr fn,xmin,xmax,ymin,ymax,nblignes,nbpoints)=
+ surfz:=true;
+ Outcolor.@:=outcolor;
+ Incolor.@:=incolor;
+ scantokens("vardef Fz(expr X,Y)="&fn&" enddef;");
+ apj:=0;
+ IncX:=(xmax-xmin)/nbpoints;
+ IncY:=(ymax-ymin)/nblignes;
+ color Yc[][],Xc[][],Fc[][];
+ for ligne=0 upto nblignes:
+ y:=ymax-ligne*IncY;
+ x:=xmin;
+ Yc[ligne][0]=(x,y,Fz(x,y));
+ for k=1 upto nbpoints:
+ Yc[ligne][k]=((xmin+k*IncX,y,Fz(xmin+k*IncX,y)));
+ endfor;
+ endfor;
+ for k=(nblignes-1) downto 0:
+ for l=(nbpoints-3) step -3 until 0:
+ cpt[apj]:=apj;
+ OTFc.@[apj].nb:=4;
+ OTFc.@[apj][1]:=Yc[k][l];
+ OTFc.@[apj][2]:=Yc[k+1][l];
+ OTFc.@[apj][3]:=Yc[k+1][l+3];
+ OTFc.@[apj][4]:=Yc[k][l+3];
+ OTFc.@[apj].iso:=(OTFc.@[apj][1]+OTFc.@[apj][2]+OTFc.@[apj][3]+OTFc.@[apj][4])/4;
+ ALT.@[apj]:=-Zpart(GCoord(OTFc.@[apj].iso));
+ if ProduitScalaire(Oeil-OTFc.@[apj].iso,Normal(OTFc.@[apj].iso,OTFc.@[apj][1],OTFc.@[apj][2]))>=0:
+ Vue.@[apj]:=true;coul.@[apj]:=outcolor;
+ else:
+ Vue.@[apj]:=false;coul.@[apj]:=incolor;
+ fi;
+ apj:=apj+1;
+ endfor;
+ endfor;
+ apj.@:=apj-1;
+enddef;
+
+vardef GrilleSurfZ(expr xmin,xmax,xpas,ymin,ymax,ypas,zmin,zmax,zpas,zechelle)=
+ drawoptions(withcolor gris);
+ for k=zmin upto zmax:
+ draw Projette((-xmin,ymin,k))--Projette((-xmax,ymin,k))--Projette((-xmax,ymax,k));
+ endfor;
+ for k=ymin upto ymax:
+ draw Projette((-xmin,k,zmin))--Projette((-xmax,k,zmin))--Projette((-xmax,k,zmax));
+ endfor;
+ for k=xmin upto xmax:
+ draw Projette((-k,ymax,zmin))--Projette((-k,ymin,zmin))--Projette((-k,ymin,zmax));
+ endfor;
+ drawoptions();
+ if Phi<>90:
+ for k=zmin step zpas until zmax:
+ label.lft(""&decimal(zechelle*k)&"",Projette((-xmin,ymin,k)));
+ endfor;
+ for k=ymin step ypas until ymax:
+ label.bot(""&decimal(k)&"",Projette((-xmin,k,zmin)));
+ endfor;
+ for k=xmin step xpas until xmax:
+ label.rt(""&decimal(k)&"",Projette((-k,ymax,zmin)));
+ endfor;
+ labeloffset:=8*labeloffset;
+ label.bot(btex $y$ etex,Projette((-xmin,(ymin+ymax)/2,zmin)));
+ label.lft(btex $z$ etex,Projette((-xmin,ymin,(zmin+zmax)/2)));
+ label.rt(btex $x$ etex,Projette((-(xmin+xmax)/2,ymax,zmin)));
+ labeloffset:=labeloffset/8;
+ else:
+ for k=ymin step ypas until ymax:
+ label.bot(""&decimal(k)&"",Projette((-xmin,k,zmin)));
+ endfor;
+ for k=xmin step xpas until xmax:
+ label.rt(""&decimal(k)&"",Projette((-k,ymax,zmin)));
+ endfor;
+ labeloffset:=8*labeloffset;
+ label.bot(btex $y$ etex,Projette((-xmin,(ymin+ymax)/2,zmin)));
+ label.rt(btex $x$ etex,Projette((-(xmin+xmax)/2,ymax,zmin)));
+ labeloffset:=labeloffset/8;
+ fi;
+enddef;
+
+vardef GrilleSurfZZ(expr xmin,xmax,xpas,ymin,ymax,ypas,zmin,zmax,zpas,zechelle)=
+ drawoptions(withcolor gris);
+ for k=zmin upto zmax:
+ draw Projette((xmin,ymin,k))--Projette((xmin,ymax,k))--Projette((xmax,ymax,k));
+ endfor;
+ for k=ymin upto ymax:
+ draw Projette((xmax,k,zmin))--Projette((xmin,k,zmin))--Projette((xmin,k,zmax));
+ endfor;
+ for k=xmin upto xmax:
+ draw Projette((k,ymin,zmin))--Projette((k,ymax,zmin))--Projette((k,ymax,zmax));
+ endfor;
+ drawoptions();
+ if Phi<>90:
+ for k=zmin step zpas until zmax:
+ label.lft(""&decimal(zechelle*k)&"",Projette((xmin,ymin,k)));
+ endfor;
+ for k=ymin step ypas until ymax:
+ label.rt(""&decimal(k)&"",Projette((xmax,k,zmin)));
+ endfor;
+ for k=xmin step xpas until xmax:
+ label.bot(""&decimal(k)&"",Projette((k,ymin,zmin)));
+ endfor;
+ labeloffset:=8*labeloffset;
+ label.rt(btex $y$ etex,Projette((xmax,(ymin+ymax)/2,zmin)));
+ label.lft(btex $z$ etex,Projette((xmin,ymin,(zmin+zmax)/2)));
+ label.bot(btex $x$ etex,Projette(((xmin+xmax)/2,ymin,zmin)));
+ labeloffset:=labeloffset/8;
+ else:
+ for k=ymin step ypas until ymax:
+ label.bot(""&decimal(k)&"",Projette((xmin,k,zmin)));
+ endfor;
+ for k=xmin step xpas until xmax:
+ label.rt(""&decimal(k)&"",Projette((k,ymax,zmin)));
+ endfor;
+ labeloffset:=8*labeloffset;
+ label.bot(btex $y$ etex,Projette((xmin,(ymin+ymax)/2,zmin)));
+ label.rt(btex $x$ etex,Projette(((xmin+xmax)/2,ymax,zmin)));
+ labeloffset:=labeloffset/8;
+ fi;
+enddef;
+
+vardef Legende(expr xmax,ymax,nbplan,zechelle)=
+ path legende[];
+ for k=1 upto nbplan+1:
+ legende[k]=Projette((-xmax,ymax+1,k-0.5))--Projette((-xmax,ymax+1,k))--Projette((-xmax,ymax+2,k))--Projette((-xmax,ymax+2,k-0.5))--cycle;
+ endfor;
+ for k=1 upto nbplan+1:
+ fill legende[k] withcolor Outcolor[k];
+ draw legende[k];
+ label.rt(""&decimal(zechelle*(k-1))&" - "&decimal(zechelle*k)&"",Projette((-xmax,ymax+2,k-0.25)));
+ endfor;
+enddef;
+
+vardef MaillageZ(expr fn,xmin,xmax,ymin,ymax,nblignes,nbpoints)=
+ traits:=true;
+ scantokens("vardef Fz(expr X,Y)="&fn&" enddef;");
+ IncX:=(xmax-xmin)/nbpoints;
+ IncY:=(ymax-ymin)/nblignes;
+ color Yc[][],Xc[][];
+ for ligne=0 upto nblignes:
+ y:=ymax-ligne*IncY;
+ x:=xmin;
+ Yc[ligne][0]=(x,y,Fz(x,y));
+ for k=1 upto nbpoints:
+ Yc[ligne][k]=((xmin+k*IncX,y,Fz(xmin+k*IncX,y)));
+ endfor;
+ endfor;
+ for l=0 upto nbpoints:
+ x:=xmax-l*IncX;
+ y:=ymin;
+ Xc[l][0]:=(x,y,Fz(x,y));
+ for k=1 upto nblignes:
+ Xc[l][k]=(x,ymin+k*IncY,Fz(x,ymin+k*IncY));
+ endfor;
+ endfor;
+ for k=nblignes downto 0:
+ draw Projette(Yc[k][nbpoints])
+ for l=(nbpoints-1) downto 0:
+ ..Projette(Yc[k][l])
+ endfor;
+ endfor;
+ for l=nbpoints downto 0:
+ draw Projette(Xc[l][nblignes])
+ for k=nblignes-1 downto 0:
+ ..Projette(Xc[l][k])
+ endfor;
+ endfor;
+enddef;
+
+endinput;
\ No newline at end of file