summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pst-solides3d/doc/par-tube.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/generic/pst-solides3d/doc/par-tube.tex')
-rw-r--r--Master/texmf-dist/doc/generic/pst-solides3d/doc/par-tube.tex330
1 files changed, 330 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-solides3d/doc/par-tube.tex b/Master/texmf-dist/doc/generic/pst-solides3d/doc/par-tube.tex
new file mode 100644
index 00000000000..e7a9560aa8f
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-solides3d/doc/par-tube.tex
@@ -0,0 +1,330 @@
+\section{Tubes}
+
+Il s'agit de remplacer une courbe en deux ou trois dimensions (2D ou
+3D) définie paramétriquement, par un tube dont la courbe initiale
+constituera l'axe et dont on pourra choisir le rayon et le
+quadrillage. On trouve des éléments mathématiques concernant ces
+objets sur les deux sites suivants~:
+
+\centerline{\url{http://fr.wikipedia.org/wiki/Tube_(math\%C3\%A9matiques)}}
+
+\centerline{\url{http://www.mathcurve.com/surfaces/tube/tube.shtml}}
+
+Comme à l'habitude, le package \verb+pst-solides3d+ offre deux
+possibilités pour dessiner les tubes :
+\begin{itemize}
+ \item via \texttt{`PSTricks'} et l'argument \verb+object+ de
+ \verb+\psSolid+
+ \item directement avec \verb+\codejps+
+\end{itemize}
+
+\encadre{Il est souvent préférable de calculer préalablement, à la main ou
+ bien avec un logiciel de calcul formel, la dérivée première
+ des fonctions paramétriques définissant les coordonnées.}
+
+En effet, si cette dérivée n'est pas explicitement définie par
+l'utilisateur, le package fait des calculs approchés, mais le résultat
+n'est pas toujours satisfaisant.
+
+\subsection{Utilisation avec PSTricks}
+
+\subsubsection{Donnez du relief à vos courbes}
+<<\textit{Donnez du relief à vos courbes}>>, c'est l'intitulé de l'article de Robert F\textsc{erréol} sur :
+
+\centerline{\small\url{http://mapage.noos.fr/r.ferreol/atelecharger/textes/relief/courbes\%20en\%20relief.html}}
+
+à qui j'emprunte la courbe suivante qui est l'analogue d'une courbe de Lissajous enroulée autour d'un cylindre.
+\begin{LTXexample}[width=8cm]
+\begin{pspicture}(-3.5,-4)(4,4)
+\psset{lightsrc=80 30 30,viewpoint=100 45 30 rtp2xyz,Decran=110,linewidth=0.2pt}
+\psframe(-3.5,-4)(4,4)
+\defFunction[algebraic]{F}(t)
+ {2.5*cos(t)}
+ {2.5*sin(t)}
+ {2*cos(5*t)}
+\defFunction[algebraic]{F'}(t)
+ {-2.5*sin(t)}
+ {2.5*cos(t)}
+ {-10*sin(5*t)}
+\psSolid[object=courbe,
+ range=0 6.28,
+ hue=0 1 0.7 1,
+ ngrid=360 8,
+ function=F,
+ r=0.15]
+\end{pspicture}
+\end{LTXexample}
+
+On a utilisé l'argument \Cadre{[objet=courbe]} avec les paramètres
+\Cadre{[r=]}, \Cadre{[function=]} et \Cadre{[range=]} pour spécifier
+respectivement le rayon du tube, le nom de la fonction à utiliser et
+l'intervalle de définition de la fonction.
+
+On peut également préciser le maillage avec l'argument optionnel
+\Cadre{[ngrid=$n_1$ $n_2$]} où $n_2$ représente le nombre de sommets
+sur une section du tube (si $n_2 = 6$, on a un tube à section
+hexagonale) et $n_1$ représente le nombre de divisions sur la longueur.
+
+
+\subsubsection{La courbe filaire s'obtient avec un rayon nul \texttt{[r=0]}}
+
+Et du coup, pas la peine de spécifier la fonction dérivée.
+
+\begin{LTXexample}[width=8cm]
+\begin{pspicture}(-3.5,-4)(4,4)
+\psset{lightsrc=80 30 30,
+ viewpoint=100 45 30 rtp2xyz,Decran=110}
+\psframe(-3.5,-4)(4,4)
+\defFunction[algebraic]{F}(t)
+ {2.5*cos(t)}
+ {2.5*sin(t)}
+ {2*cos(5*t)}
+\psSolid[object=courbe,
+ range=0 6.28,
+ linewidth=2pt,linecolor=blue,
+ function=F,
+ r=0]
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{Utilisation avec le \textbackslash{}codejps}
+
+La syntaxe est \Cadre{\textbackslash{}codejps\{t1 t2 (nom\_fonction)
+rayon [n1 n2] newtube\}.}
+
+
+\begin{LTXexample}[pos=t]
+\begin{pspicture}(-3.5,-3.5)(4,3.5)
+\psset{lightsrc=80 30 30,viewpoint=100 45 90 rtp2xyz,Decran=100,linewidth=0.2pt}
+\psframe(-3.5,-3.5)(4,3.5)
+\codejps{
+/rpn {tx@AlgToPs begin AlgToPs end cvx exec} def
+/xc {((2+1*cos(2.75*t))*cos(t)) rpn } def
+/yc {((2+1*cos(2.75*t))*sin(t)) rpn } def
+/zc {(1*sin(2.75*t)) rpn } def
+/xc' {(-2.75*sin(2.75*t)*cos(t)-(2+cos(2.75*t))*sin(t)) rpn } def
+/yc' {(-2.75*sin(2.75*t)*sin(t)+(2+cos(2.75*t))*cos(t)) rpn } def
+/zc' {(2.75*cos(2.75*t)) rpn } def
+/g {
+3 dict begin
+ /t exch def
+xc yc zc
+end } def
+/g' { % dérivée première
+3 dict begin
+ /t exch def
+xc' yc' zc'
+end } def
+/solenoide{
+% t_min t_max rayon_tube [resolution]
+ 0 25.2 (g) 0.1 [360 8] newtube
+dup [0 1] solidputhuecolors} def
+solenoide
+drawsolid**
+}%
+\end{pspicture}
+\end{LTXexample}
+
+\subsection{Améliorer la rapidité d'affichage}
+
+La courbe étudiée appelée << \textit{horoptère} >> est issue de la page :
+
+\centerline{\url{http://www.mathcurve.com/courbes3d/horoptere/horoptere.shtml}}
+
+\subsubsection{L'obtention directe de la courbe}
+Les lignes suivantes permettent de faire le calcul des points et le
+tracé de la courbe. La résolution de la courbe étant élevée, le calcul
+prend un temps que certains jugeront trop long.
+\begin{verbatim}
+\begin{pspicture}(-7,-2)(7,4)
+\psset{lightsrc=80 30 30}
+\psset{viewpoint=1000 60 20 rtp2xyz,Decran=1000}
+\psframe(-7,-2)(7,4)
+\psset{solidmemory}
+\codejps{/a 2 def /b 2 def}%
+\defFunction[algebraic]{F}(t)
+ {a*(1+cos(t))}
+ {b*tan(t/2)}
+ {a*sin(t)}
+\defFunction[algebraic]{F'}(t)
+ {-a*sin(t)}
+ {b*(1+tan(1/2*t)^2)}
+ {a*cos(t)}
+\psSolid[object=courbe,
+ range=-2.7468 2.7468,
+ ngrid=72 12,
+ function=F,hue=0 1 0.7 1,
+ action=none,name=H1,
+ r=1]%
+\psSolid[object=cylindrecreux,
+ h=20,r=1,RotX=90,
+ incolor=green!30,action=none,
+ name=C1,
+ ngrid=36 36](2,10,0)
+\psSolid[object=fusion,
+ base=H1 C1]
+\composeSolid
+\end{pspicture}
+\end{verbatim}
+
+\subsubsection{La mise en mémoire des paramètres de la courbe}
+
+Si cete courbe doit être utilisée plusieurs fois il est alors
+préférable d'enregistrer toutes les caractéristiques de cette courbe :
+coordonnées de sommets, liste et couleurs des facettes en remplaçant
+la dernière commande par :
+\begin{verbatim}
+\psSolid[object=fusion,
+ base=H1 C1,
+ file=horoptere,
+ action=writesolid]
+\end{verbatim}
+La séquence suivante \Cadre{LaTeX fichier.tex->dvips->GSview
+ (Windows)ou gv (Linux)} va créer 4 fichiers :
+\begin{itemize}
+ \item \texttt{horoptere-couleurs.dat} -> les couleurs des faces ;
+ \item \texttt{horoptere-faces.dat} -> la liste des faces ;
+ \item \texttt{horoptere-sommets.dat} -> la liste des sommets ;
+ \item \texttt{horoptere-io.dat} -> le nombre de faces et de sommets.
+\end{itemize}
+\encadre{Par défaut, sous Windows et Linux, la protection des fichiers
+ du disque dur est activée et ne permet donc pas l'écriture sur le
+ disque. Pour désactiver cette protection, tout au moins
+ temporairement, voici les deux procédures correspondantes :
+\begin{description}
+ \item[Linux : ] le conseil de Jean-Michel Sarlat : le plus
+simple est donc d'utiliser ghostscript directement, en console. Comme
+il n'y a rien à attendre comme image :
+
+\$> gs -dNOSAFER fichier.ps quit.ps
+ \item[Windows : ] dans le menu \textsf{Options}, l'option
+ \textsf{Protection des fichiers} ne doit pas être cochée.
+\end{description}}
+puis de les faire lire et exécuter avec la commande :
+\Cadre{\textbackslash{}psSolid[object=datfile,file=horoptere]}, le
+gain de temps est très appréciable !
+\begin{verbatim}
+\begin{pspicture}(-7,-2)(7,4)
+\psset{lightsrc=80 30 30}
+\psset{viewpoint=1000 60 20 rtp2xyz,Decran=1000}
+\psframe(-7,-2)(7,4)
+\psset{solidmemory}
+\codejps{/a 2 def /b 2 def}%
+\defFunction[algebraic]{F}(t)
+ {a*(1+cos(t))}
+ {b*tan(t/2)}
+ {a*sin(t)}
+\defFunction[algebraic]{F'}(t)
+ {-a*sin(t)}
+ {b*(1+tan(1/2*t)^2)}
+ {a*cos(t)}
+\psSolid[object=courbe,
+ range=-2.7468 2.7468,
+ ngrid=72 16,
+ function=F,hue=0 1 0.7 1,
+ action=none,name=H1,
+ r=1]%
+\psSolid[object=cylindrecreux,
+ h=18,r=1,RotX=90,
+ incolor=yellow!50,action=none,
+ name=C1,
+ ngrid=18 16](2,9,0)
+\psSolid[object=fusion,
+ base=H1 C1,
+ file=horoptere,
+ action=writesolid]
+\composeSolid
+\end{pspicture}
+\end{verbatim}
+
+
+
+\subsubsection{Le tracé de la courbe}
+
+\begin{LTXexample}[width=9cm]
+\begin{pspicture}(-5,-3.5)(4,3)
+\psset{lightsrc=80 30 30}
+\psset{viewpoint=100 60 20 rtp2xyz,
+ Decran=75}
+\psframe*[linecolor=cyan!30](-4.5,-3)(3.5,3)
+\psSolid[object=datfile,file=horoptere]
+\end{pspicture}
+\end{LTXexample}
+
+
+\newpage
+\subsection{Autres exemples}
+
+
+\subsubsection{Une droite}
+
+\begin{LTXexample}[width=7cm]
+\begin{pspicture}(-3.5,-2)(3.5,2)
+\psset{viewpoint=100 -20 20 rtp2xyz,
+ Decran=75,unit=0.8}
+\psframe(-3.5,-2)(3.5,2)
+\psSolid[object=grille,base=-4 4 -4 4]%
+\defFunction[algebraic]{F}(t){t}{t}{0.5}
+\defFunction[algebraic]{F'}(t){1}{1}{0}
+\psSolid[object=courbe,
+ range=-4 4, ngrid=16 16,
+ function=F, r=0.5]
+\end{pspicture}
+\end{LTXexample}
+
+
+
+\subsubsection{Hypocycloïde}
+
+\begin{LTXexample}[width=7cm]
+\begin{pspicture}(-3.5,-3)(3.5,3)
+\psset{viewpoint=100 20 45 rtp2xyz,
+ Decran=75,unit=0.8}
+\psSolid[object=grille,base=-5 5 -5 5]%
+\defFunction[algebraic]{F}(t)
+ {4*cos(t) + cos(4*t)/2}
+ {4*sin(t) - sin(4*t)/2}
+ {1}
+\defFunction[algebraic]{F'}(t)
+ {-4*sin(t)-2*sin(4*t)}
+ {4*cos(t)-2*cos(4*t)}
+ {0}
+\psSolid[object=courbe,
+ range=0 6.28, ngrid=90 16,
+ function=F, r=1]
+\end{pspicture}
+\end{LTXexample}
+
+
+
+\subsubsection{Siège ressort de Gaston}
+\begin{LTXexample}[width=7cm]
+\begin{pspicture}(-3.5,-4)(3.5,4.5)
+\psset{lightsrc=80 30 30}
+\psset{viewpoint=100 20 20 rtp2xyz,Decran=50}
+\psframe(-3.5,-4)(3.5,4.5)
+\uput[u](0,3){\includegraphics[scale=0.25]{gaston.eps}}
+\defFunction[algebraic]{F}(t)
+ {(t^2+3)*sin(15*t)}
+ {(t^2+3)*cos(15*t)}
+ {2*t}
+\defFunction[algebraic]{F'}(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}
+\psSolid[object=courbe,
+ range=-2 2,
+ ngrid=360 6,
+ function=F,
+ hue=0.2 0.3,
+ linewidth=0.1pt,
+ r=0.2]
+\end{pspicture}
+\end{LTXexample}
+
+%%\end{document}
+
+
+
+
+