diff options
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.tex | 330 |
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} + + + + + |