vendredi 26 juin 2015

Ruban enroulé autour d’un tore

Il s’agit de la mise à jour d’une ancienne version publiée sur :

http://melusine.eu.org/syracuse/pstricks/pst-solides3d/animations/a25/
le 4 décembre 2007. Elle n’était plus opérationnelle du fait des versions successives de pst-solides3d et la commande \psSpiralRing[options] a du subir de nombreuses modifications.

Et une animation Gif :

 Les fichiers avec le détail des options ainsi que le fichier pcréation des images de l'animation sont dans le répertoire :


Au cas le serveur ne serait pas accessible, voici le listing du fichier source :

\documentclass{article}
\usepackage{pst-solides3d}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
\usepackage[garamond]{mathdesign}
\renewcommand{\ttdefault}{lmtt}
\usepackage[colorlinks]{hyperref}
% manuel.luque27@gmail.com
\makeatletter
\define@key[psset]{pst-solides3d}{dPHI}{\def\pst@solides@dPHI{#1}} % hauteur du ruban
\psset[pst-solides3d]{dPHI=5} % hauteur du ruban en degrés
\define@key[psset]{pst-solides3d}{spires}{\def\pst@solides@spires{#1}} %
\psset[pst-solides3d]{spires=10} % nombre de spires d'un ruban

\def\psSpiralRing{\pst@object{psSpiralRing}}
%% usage : \psSpiralRing[options]
\def\psSpiralRing@i{\@ifnextchar({\psSpiralRing@ii}{\psSpiralRing@ii(0,0,0)}}
\def\psSpiralRing@ii(#1,#2,#3){%
  \pst@killglue%
  \begingroup%
  \use@par%
\addto@pscode{%
         /ri \pst@solides@rO\space def % rayon intérieur
         /rm \pst@solides@rI\space def % rayon moyen
         /spires \pst@solides@spires\space def
         /dPHI \pst@solides@dPHI\space def
         /THETA {PHI spires 2 mul mul} def
         /x@ {rm ri THETA cos mul add PHI cos mul} def
         /y@ {rm ri THETA cos mul add PHI sin mul} def
         /z@ {ri THETA sin mul} def
         /dt {360 \pst@solides@resolution\space div} bind def
         /PHI 0 def
         x@ y@ z@ /x0 x@ def /y0 y@ def /z0 z@ def % S1
         /tableau_des_sommets [
          0 dt 360 dt sub{/t@ exch def
                    /PHI t@ def /THETA0 THETA def
                     x@ y@ z@
                     /PHI t@ dt add def /THETA1 THETA def
                     x@ y@ z@ /x1 x@ def /y1 y@ def /z1 z@ def % S2
                     /PHI PHI dPHI add def
%                     x1 y1 z                             % S3
                     rm ri THETA1 cos mul add PHI cos mul
                     rm ri THETA1 cos mul add PHI sin mul
                     ri THETA1 sin mul
                     /PHI PHI dt sub def
                     rm ri THETA0 cos mul add PHI cos mul
                     rm ri THETA0 cos mul add PHI sin mul
                     ri THETA0 sin mul  % S4
                  } for
                  ]
           def
         /Sommets {tableau_des_sommets aload pop} def
         /NbrePoints tableau_des_sommets length 3 div cvi def
        /Faces  {0 4 NbrePoints 4 sub {
                 /Ni exch def
               [ Ni Ni 1 add  Ni 2 add Ni 3 add]
                                     } for
              } def
        /Faces_internes {0 4 NbrePoints 4 sub {
                 /Ni exch def
               [Ni 3 add Ni 2 add Ni 1 add Ni]
                                     } for
             } def
}%
\codejps{
/solidhollow false def
/s@lidlight true def
/ruban_exterieur {
/S [
  Sommets
  ] def
/F [
  Faces
  ] def
  S F generesolid
  dup gere_pstricks_opt
} def
%
% tore intérieur
/tore_interieur
    {ri 0.6 mul rm [18 36] newtore
dup (Gray) outputcolors }
    def
/ruban_interieur {
/S [
  Sommets
  ] def
/F [
  Faces_internes
  ] def
  S F generesolid
  dup
 (fillincolor) outputcolors
  } def
ruban_interieur drawsolid**
tore_interieur drawsolid**
ruban_exterieur drawsolid**}%
  \endgroup%
  \ignorespaces%
}
\makeatother
\title{Ruban enroulé autour d'un tore}
\date{27 juin 2015}
\begin{document}
\maketitle
Il s'agit de la mise à jour d'une ancienne version publiée sur :

\url{http://melusine.eu.org/syracuse/pstricks/pst-solides3d/animations/a25/winding.tex}

le 4 décembre 2007. Elle n'était plus opérationnelle du fait des versions successives de \textsf{pst-solides3d} et la commande \verb+\psSpiralRing+ a du subir de nombreuses modifications. Les options sont les suivantes :
\begin{enumerate}
  \item \textsf{[dPHI=5]} : largeur du ruban en degrés ;
  \item \textsf{[spires=10]} : nombre de spires.
\end{enumerate}
Les couleurs du ruban, extérieur et intérieur, se règlent avec les paramètres usuels de \textsf{pst-solides3d}. Les rayons : rayon moyen et rayon intérieur du tore fictif sur lequel serait appliqué le ruban (\textsf{r1} et \textsf{r0}) sont ceux de la définition du tore dans pst-solides3d. Par contre le tore réel sur lequel est enroulé le ruban a un rayon intérieur plus petit : $r_i=0.6r_0$, ce coefficient peut être modifié dans la commande et la couleur du tore est grise. Pour terminer, la finesse du tracé se règle avec l'option \textsf{[resolution=360]}.
\begin{center}
\begin{pspicture}(-5,-5)(5,5)
\psset{viewpoint=20 0 65 rtp2xyz,Decran=15,resolution=360,lightsrc=30 5 17}
\psSolid[object=grille,base=-6 6 -6 6,ngrid=6 6](0,0,1)
\psSpiralRing[incolor=yellow!50,r1=4,r0=1,fillcolor=red!50](0,0,0)
\end{pspicture}
\end{center}
\begin{verbatim}
\begin{pspicture}(-5,-7)(5,5)
\psset{viewpoint=50 20 50 rtp2xyz,Decran=50,resolution=360,lightsrc=30 5 17}
\psSpiralRing[incolor=yellow!50,r1=4,r0=1,fillcolor=red!50](0,0,0)
\end{pspicture}
\end{verbatim}
%\newpage
\begin{center}
\begin{pspicture}(-5.1,-5.1)(5.1,5.1)
\psframe(-5.1,-5.1)(5.1,5.1)
\psset{viewpoint=50 20 90 rtp2xyz,Decran=50,resolution=360,lightsrc=10 10 50}
\psSpiralRing[incolor=yellow!50,r1=4,r0=1,hue=0 1,grid](0,0,0)
\end{pspicture}
\end{center}
\begin{verbatim}
\begin{pspicture}(-5,-5)(5,5)
\psframe(-5,-5)(5,5)
\psset{viewpoint=50 20 90 rtp2xyz,Decran=50,resolution=360,lightsrc=10 10 50}
\psSpiralRing[incolor=yellow!50,r1=4,r0=1,hue=0 1,grid](0,0,0)
\end{pspicture}
\end{verbatim}
\begin{center}
\begin{pspicture}(-5.1,-5.1)(5.1,5.1)
\psframe(-5.1,-5.1)(5.1,5.1)
\psset{viewpoint=50 20 90 rtp2xyz,Decran=50,resolution=720,lightsrc=viewpoint}
\psSpiralRing[incolor=yellow!50,r1=4,r0=1,hue=0 1,grid,RotZ=30,spires=18,dPHI=2.5](0,0,0)
\end{pspicture}
\end{center}
\begin{verbatim}
\begin{pspicture}(-5,-5)(5,5)
\psframe(-5,-5)(5,5)
\psset{viewpoint=50 20 90 rtp2xyz,Decran=50,resolution=720,lightsrc=20 10 50 rtp2xyz}
\psSpiralRing[incolor=yellow!50,r1=4,r0=1,hue=0 1,grid,RotZ=30,spires=18,dPHI=2.5](0,0,0)
\end{pspicture}
\end{verbatim}

\end{document}

Aucun commentaire:

Enregistrer un commentaire