jeudi 12 février 2015

Tore découpé en rubans de Villarceau - version 2

C'est la suite du message :

http://pstricks.blogspot.fr/2015/02/tore-decoupe-en-cercles-de-villarceau.html

Une commande \psRubansV[options](x,y,z) permet de tracer plus simplement et plus rapidement les cercles(rubans) de Villarceau. Sur le document, tous les exemples du message précédent n'ont pas été repris, seuls les exemples suivants ont été rajoutés :




Les fichiers :

Le listing :

\documentclass{article}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
%\usepackage[garamond]{mathdesign}
%\renewcommand{\ttdefault}{lmtt}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{pst-solides3d}
\usepackage{url}
% Manuel Luque
% manuel.luque27@gmail.com
\makeatletter
\pst@addfams{pst-rubansV}
\define@key[psset]{pst-rubansV}{ngrid}{\def\pst@rubansV@ngrid{#1 }}%
\define@key[psset]{pst-rubansV}{base}{\def\pst@rubansV@base{#1 }}%
\define@key[psset]{pst-rubansV}{r1}{\def\pst@rubansV@rM{#1 }}%
\define@key[psset]{pst-rubansV}{r0}{\def\pst@rubansV@rm{#1 }}%
\define@key[psset]{pst-rubansV}{interval}{\def\pst@rubansV@interval{#1 }}%
\define@key[psset]{pst-rubansV}{circle}{\def\pst@rubansV@circle{#1 }}%
%
\psset[pst-rubansV]{ngrid=72 60,base=0 360 0 360,r1=3.5,r0=1.5,interval=1,circle=1}%
\psset{hollow=true}
%
\def\psRubansV{\pst@object{psRubansV}}
% usage : \psRubansV[options](x,y,z) %
\def\psRubansV@i{\@ifnextchar({\psRubansV@ii}{\psRubansV@ii(0,0,0)}}
\def\psRubansV@ii(#1,#2,#3){%
  \pst@killglue%
  \begingroup%
  \use@par%
\addto@pscode{
/interval \pst@rubansV@interval 1 add def
/typeCircle \pst@rubansV@circle def
typeCircle 1 eq {
/CalcCoordinates{2 dict begin
         /v exch def
         /u exch def
         RayonMajeur dup mul rayonmineur dup mul sub sqrt u sin mul v cos mul rayonmineur RayonMajeur u cos mul add v sin mul sub % x
         RayonMajeur dup mul rayonmineur dup mul sub sqrt u sin mul v sin mul rayonmineur RayonMajeur u cos mul add v cos mul add neg % y
         rayonmineur u sin mul % z
         end
         } def
         }{
/CalcCoordinates{2 dict begin
         /v exch def
         /u exch def
         RayonMajeur dup mul rayonmineur dup mul sub sqrt u sin mul v cos mul rayonmineur RayonMajeur u cos mul add v sin mul sub % x
         RayonMajeur dup mul rayonmineur dup mul sub sqrt u sin mul v sin mul rayonmineur RayonMajeur u cos mul add v cos mul add % y
         rayonmineur u sin mul % z
         end
         } def
         } ifelse
\pst@rubansV@ngrid
         /n2 exch def
         /n1 exch def
         /RayonMajeur \pst@rubansV@rM def
         /rayonmineur \pst@rubansV@rm def
\pst@rubansV@base
          /vmax exch def
          /vmin exch def
          /umax exch def
          /umin exch def
typeCircle 1 eq {/vmax vmax neg def} if
         /dx umax umin sub n1 div def % pas sur le cercle
         /dy vmax vmin sub n2 div def % pas entre 2 cercles
/SOMMETS {
       0 1 n1 {
           /i exch def
           0 1 n2 {
               /j exch def
               xmin i dx mul add
               ymin j dy mul add
        CalcCoordinates
           } for
       } for
   }
   def
%
   /FACES {
       0 1 n1 1 sub {
          /i exch def
          0 interval n2 interval sub {
             /j exch def
             [
                j 1 add        i n2 1 add mul add
                j n2 2 add add i n2 1 add mul add
                j n2 1 add add i n2 1 add mul add
                j              i n2 1 add mul add
            ]
          } for
       } for
   } def
  }% fin du code ps
\psSolid[object=new,sommets=SOMMETS,faces=FACES]
  \endgroup%
  \ignorespaces%
}%
\makeatother
\title{Tore découpé en rubans de Villarceau - version 2}
\date{12 février 2015}
\begin{document}
\maketitle
Il existe sur les cercles de Villarceau d'excellentes études, comme celle de Lionel Garnier :

\centerline{\url{http://le2i.cnrs.fr/IMG/publications/2141_refig_EqCercleVillarceauCD4.pdf}}

et celle de Marcel Berger :

\centerline{\url{https://www.bibnum.education.fr/sites/default/files/villarceau-analyse.pdf}}

Ce sont ces équation paramétriques qui sont utilisées pour la représentation des 2 types de cercles de Villarceau (voir le document de Lionel Garnier) :
\[
\left\{
\begin{array}[m]{l}
x=\sqrt{R^2-r^2}\sin(t)\cos\theta-\big(R+r\cos(t)\big)\sin\theta\\[1em]
y=\pm\Big(\sqrt{R^2-r^2}\sin(t)\sin\theta+\big(R+r\cos(t)\big)\cos\theta\Big)\\[1em]
z=R\sin(t)
\end{array}
\right.
\]
%
La commande dédiée à la représentation des cercles sur le tore, ou plutôt des rubans, car c'est l'intervalle entre 2 cercles voisins qui est colorié, s'écrit : \verb+\psRubansV[options](x,y,z)+. Les options sont les suivantes, ce sont les valeurs par défaut qui sont indiquées :
\begin{enumerate}
  \item \texttt{r1=3.5} : rayon moyen du tore ;
  \item \texttt{r0=1.5} : rayon intérieur ;
  \item \texttt{ngrid=72 60} : nombre de points sur un cercle et nombre de cercles de Villarceau ;
  \item \texttt{base=0 360 0 360} : en degrés pour faire le tour des cercles et du tore ;
  \item \texttt{interval=1} : intervalles entre 2 rubans de Villarceau, si \texttt{interval=0} tous les rubans sont dessinés, si \texttt{interval=1} on saute un ruban sur deux, etc.
  \item \texttt{circle=1} : dessine un cercle de Villarceau et \texttt{circle=2} dessine son symétrique.
\end{enumerate}
\begin{center}
\psset{unit=0.7}
\begin{pspicture}(-6,-5.5)(6,5)
\psframe(-6,-5.5)(6,5)
\psset[pst-solides3d]{viewpoint=20 20 40 rtp2xyz,Decran=20,lightsrc=viewpoint}
\psRubansV[grid,fillcolor=red,incolor=gray]
\rput(0,-5){$\backslash${}\texttt{psRubansV[grid,fillcolor=red,incolor=gray]}}
\end{pspicture}
\begin{pspicture}(-6,-5.5)(6,5)
\psframe(-6,-5.5)(6,5)
\psset[pst-solides3d]{viewpoint=20 20 40 rtp2xyz,Decran=20,lightsrc=viewpoint}
\psRubansV[grid,fillcolor=red,incolor=gray,circle=2]
\rput(0,-5){$\backslash${}\texttt{psRubansV[grid,fillcolor=red,circle=2]}}
\end{pspicture}
\end{center}
\begin{center}
\psset{unit=0.75}
\begin{pspicture}(-6,-5)(6,5)
\psframe(-6,-5)(6,5)
\psset[pst-solides3d]{viewpoint=20 20 90 rtp2xyz,Decran=20,lightsrc=viewpoint}
\psRubansV[grid,fillcolor=red,incolor=gray,ngrid=144 36,base=0 360 0 360,interval=3]
\end{pspicture}

\begin{pspicture}(-6,-5)(6,5)
\psframe(-6,-5)(6,5)
\psset[pst-solides3d]{viewpoint=20 0 0 rtp2xyz,Decran=20,lightsrc=viewpoint}
\psRubansV[grid,fillcolor=red,incolor=yellow!50,ngrid=144 72,base=0 360 0 360,interval=3]
\end{pspicture}
\end{center}

\begin{center}
\psset{unit=0.7}
\begin{pspicture}(-6,-6)(6,5)
\psframe(-6,-6)(6,5)
\psset[pst-solides3d]{viewpoint=15 0 60 rtp2xyz,Decran=15,lightsrc=5 -30 90 rtp2xyz}
\psRubansV[grid,fillcolor=white,incolor=gray,linewidth=0.0001,
          interval=2,ngrid=72 72,
          fcol=0 1 n2  1 sub{/iC exch def
                  iC n2  n1 n2 mul  iC add 1 sub {dup 2 mod 0 eq{(blue)}{(red)}ifelse}for}for]
\end{pspicture}
\end{center}

\begin{center}
\psset{unit=0.7}
\begin{pspicture}(-6,-5)(6,5)
\psframe*[linecolor=cyan!20](-6,-5)(6,5)
\psset[pst-solides3d]{viewpoint=20 20 40 rtp2xyz,Decran=20,lightsrc=viewpoint}
\psRubansV[grid,fillcolor=white,incolor=gray,linewidth=0.0001,
          interval=0,ngrid=60 36,hollow=false,
          fcol=0 3 n2 3 sub{/iC exch def
                   iC n2 n1 n2 mul iC add 1 sub {/I exch def I(blue) I 1 add (white) I 2 add (red)}for}for]
\end{pspicture}
\begin{pspicture}(-6,-5)(6,5)
\psframe*[linecolor=cyan!20](-6,-5)(6,5)
\psset[pst-solides3d]{viewpoint=20 20 40 rtp2xyz,Decran=20,lightsrc=viewpoint}
\psRubansV[grid,fillcolor=white,incolor=gray,linewidth=0.0001,
          interval=0,ngrid=72 36,hollow=false,
          fcol=0 3 n2 3 sub{/iC exch def
                   iC n2 n1 n2 mul iC add 1 sub {/I exch def I(black) I 1 add (red) I 2 add (yellow)}for}for]
\end{pspicture}
\end{center}
\begin{center}
\psset{unit=0.7}
\begin{pspicture}(-6,-5)(6,5)
\psframe*[linecolor=cyan!20](-6,-5)(6,5)
\psset[pst-solides3d]{viewpoint=20 20 40 rtp2xyz,Decran=20,lightsrc=viewpoint}
\psRubansV[grid,fillcolor=white,incolor=gray,linewidth=0.0001,
          interval=0,ngrid=72 36,hollow=false,
          fcol=0 3 n2 3 sub{/iC exch def
                   iC n2 n1 n2 mul iC add 1 sub {/I exch def I(green) I 1 add (white) I 2 add (red)}for}for]
\end{pspicture}
\end{center}
\end{document}

Aucun commentaire:

Enregistrer un commentaire