dimanche 15 février 2015

Une autre image d'un tore

La revue Quadrature n°92 représente en couverture un tore faisant apparaître deux familles de cercles de Villarceau :
http://www.quadrature.info/index.php?page=zoom&photo=numero92.jpg

l'image a été réalisée par Boris Asancheyev.
C'est cette image que j'ai essayé de calculer et de reproduire avec PSTricks (révision 16/02/2015)




\documentclass{article}
\usepackage{pst-solides3d}
% Manuel Luque : 16 février 2015
% manuel.luque27@gmail.com
% gswin64c -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -o pst-rubansV-essais-2.pdf pst-rubansV-essais-2.ps
% or even:
% gswin64c -sDEVICE=pdfwrite -o pst-rubansV-essais-2.pdf - < pst-rubansV-essais-2.ps
\begin{document}
\begin{center}
\begin{pspicture}(-5,-5)(5,5)
\psframe*(-5,-5)(5,5)
% \psframe[fillstyle=hlines,hatchangle=0](-5,-5)(5,5)
\psset{viewpoint=100 0 40 rtp2xyz,Decran=100}
\pstVerb{
/nu 72 def /nv 36 def %
/vmax 360 def
/vmin 0 def
/umax 360 def
/umin 0 def
         /Ri1 3 def /ri1 1.5 def
/CalcCoordinates{%2 dict begin
 %        /v exch def /u exch def
         Ri1 ri1 v cos mul add u cos mul % x
         Ri1 ri1 v cos mul add u sin mul % y
         ri1 v sin mul % z
%         end
         } def
/du umax umin sub nu div def
/dv vmax vmin sub nv div def
/sommets0 [
       vmin dv vmax  {% méridien après méridien
        /v exch def
% les sommets le long d'un méridien
  /u umin def
    nu 1 add {
        [CalcCoordinates]
  /u u du add def
     }repeat
       }for
       ] def
%
/faces0 { % avant l'ajout du centre
   0 1 nv 0 sub {
   /k1 exch def
k1 nu 1 add mul 1 nu k1 1 add mul k1 add 1 sub {/i exch def
    [
     i 1 add
     i
     i nu add 1 add
     i nu add 2 add
    ]
    } for
    } for}
    def
%
/Sommets % après l'ajout du centre
[
   0 1 nv 1 sub {
   /k1 exch def
k1 nu 1 add mul 1 nu k1 1 add mul k1 add 1 sub {/i exch def
    [/pointsSommets [
     sommets0 i 1 add get aload pop
     sommets0 i get aload pop
     sommets0 i nu add 1 add get aload pop
     sommets0 i nu add 2 add get aload pop
    ] def
    pointsSommets aload pop pointsSommets isobarycentre3d]
    } for
    } for]
    def
%
/SOMMETS {
0 1 Sommets length 1 sub {/iL exch def
 Sommets iL get aload pop
 } for
 } def
%
/FACES {
 0 5 [SOMMETS] length 3 idiv 5 sub {/iF exch def
 [iF iF 4 add iF 1 add]
 [iF 1 add iF 4 add iF 2 add ]
 [iF 2 add iF 4 add iF 3 add ]
 [iF iF 3 add iF 4 add ]
 } for
 } def
}%
\psSolid[object=new,sommets=SOMMETS,faces=FACES,fillcolor=yellow,grid,
% une bande
%         fcol=0 4 nu mul dup nv 1 sub mul  {/i exch def i (bleu) i 2 add (bleu)}for
% toutes les bandes paires
fcol=0 4 nu 4 mul 4 sub {/j1 exch def j1 4 nu mul dup nv 1 sub mul j1 add {/i1 exch def i1 (bleu) i1 2 add (bleu)}for} for
         ]
\end{pspicture}
\end{center}
\end{document}

Aucun commentaire:

Enregistrer un commentaire