jeudi 26 février 2015

Dessiner le contour d’un objet avec pst-solides3d

Le dessin du contour d’un objet : cylindre, cône et sphère lorsque le maillage n’est pas représenté (option[grid] désactivée) nécessite quelques petits calculs supplémentaires, car le contour vu dépend de la position de l’observateur, c’est-à-dire des coordonnées de l’option [viewpoint].
Les fichiers sont dans le dossier :
Dans le cas du cylindre, pour simplifier il faut donner au départ le rayon et la hauteur du cylindre.
 Dans le cas d’une sphère, le contour est celui du grand cercle de rayon celui de la sphère.
Dans le cas du cône, on donne aussi le rayon et la hauteur.


Le listing, à compiler par :  LaTeX->dvips->ps2pdf

\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{pst-solides3d}
\title{Dessiner le contour d'un objet avec pst-solides3d}
\date{26 février 2015 - 19 juillet 2017}
\begin{document}
\maketitle
Le dessin du contour d'un objet : cylindre, cône et sphère lorsque le maillage n'est pas représenté (option \texttt{[grid]} désactivée) nécessite quelques petits calculs supplémentaires, car le contour vu dépend de la position de l'observateur, c'est-à-dire des coordonnées de l'option \texttt{[viewpoint]}. Dans le cas du cylindre, pour simplifier il faut donner au départ le rayon et la hauteur du cylindre.
\begin{center}
\begin{pspicture}(-5,-4)(5,5)
\psframe(-5,-4)(5,5)
\pstVerb{/hauteur 5 def /rayon 3 def /alpha {rayon Dobs PHI cos mul div arccos } def
/jaunepale {0 0 0.25 0 setcmykcolor} def}%
\psset{viewpoint=15 50 50 rtp2xyz,Decran=10,lightsrc=50 30 27 rtp2xyz,solidmemory}
\psSolid[object=grille,base=-4 4 -4 4]%
\psSolid[object=plan,definition=normalpoint,args={0 0 0 [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplan0]%
\psset{plan=monplan0}%
\psProjection[object=cercle,
              args=0 0 rayon]%
\composeSolid
\psSolid[object=cylindre,hollow,
        h=hauteur,r=rayon,grid,
        hue=0 1,incolor=yellow!10,
        ngrid=1 60](0,0,0)
\psSolid[object=plan,definition=normalpoint,args={0 0 hauteur [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanH]
\psset{plan=monplanH}
\psProjection[object=cercle,linewidth=0.05,
              args=0 0 rayon]
\psSolid[object=plan,definition=normalpoint,args={0 0 0 [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanB]
\psset{plan=monplanB}
\psProjection[object=cercle,linewidth=0.05,
              args=0 0 rayon,range=THETA alpha sub THETA alpha add]
\psPoint(rayon THETA alpha sub cos mul,
         rayon THETA alpha sub sin mul,0){A}
\psPoint(rayon THETA alpha sub cos mul,
         rayon THETA alpha sub sin mul,hauteur){B}
\psline[linewidth=0.05](A)(B)
\psPoint(rayon THETA alpha add cos mul,
         rayon THETA alpha add sin mul,0){C}
\psPoint(rayon THETA alpha add cos mul,
         rayon THETA alpha add sin mul,hauteur){D}
\psline[linewidth=0.05](C)(D)
\end{pspicture}
\end{center}

Dans le cas d'une sphère, le contour est celui du grand cercle de rayon celui de la sphère.
\begin{center}
\begin{pspicture}(-5,-5)(5,3)
\psframe(-5,-5)(5,3)
\pstVerb{/rayon 2.5 def /pointVue {20 50 30 rtp2xyz} def
/jaunepale {0 0 0.25 0 setcmykcolor} def}%
\psset{viewpoint=pointVue,Decran=15,lightsrc=15 30 30 rtp2xyz,solidmemory}
\psSolid[object=plan,definition=normalpoint,args={0 0 rayon neg [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanH]
\psset{plan=monplanH}
\psProjection[object=cercle,linewidth=0.005,fillstyle=solid,fillcolor=gray!70,resolution=360,linecolor=gray!70,
              args=0 0 rayon]
\composeSolid
\psSolid[object=grille,base=-4 4 -4 4,linewidth=0.02,opacity=0.5](0,0,rayon neg)
\psSolid[object=sphere,
        r=rayon,grid,
        fillcolor=cyan!50,
        ngrid=36 72](0,0,0)
\psSolid[object=plan,definition=normalpoint,args={0 0 0 [pointVue]},
         action=none,
         base=-4 4 -4 4,
         name=monplanV]
\psset{plan=monplanV}
\psProjection[object=cercle,linewidth=0.05,
              args=0 0 rayon]
\end{pspicture}
\end{center}

Dans le cas du cône, on donne aussi le rayon et la hauteur.
\begin{center}
\begin{pspicture}(-5,-3)(5,5)
\psframe(-5,-3)(5,5)
\pstVerb{/hauteur 5 def /rayon 3 def }
\psset{viewpoint=20 50 30 rtp2xyz,Decran=15,lightsrc=15 30 30 rtp2xyz,solidmemory}
\psSolid[object=grille,base=-4 4 -4 4,linewidth=0.02,opacity=0.5](0,0,0)
\psSolid[object=cone,
         h=hauteur,r=rayon,grid,
         hue=0 1 0.8 1,
        ngrid=1 72](0,0,0)
\psSolid[object=plan,definition=normalpoint,args={0 0 0 [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanB]
\psset{plan=monplanB}
\psProjection[object=cercle,linewidth=0.05,
              args=0 0 rayon,range=-90 THETA add 90 THETA add]
\psPoint(THETA sin rayon mul,THETA cos rayon mul neg,0){A}
\psPoint(0,0,hauteur){H}
\psPoint(THETA sin rayon mul neg,THETA cos rayon mul,0){B}
\psline[linewidth=0.05](B)(H)(A)
\end{pspicture}
\end{center}
%\newpage
\begin{center}
\begin{pspicture}(-5,-4)(5,5)
\psframe(-5,-4)(5,5)
\pstVerb{/hauteur 5 def /rayon 3 def /alpha {rayon Dobs PHI cos mul div arccos } def
/jaunepale {0 0 0.25 0 setcmykcolor} def}%
\psset{viewpoint=15 50 50 rtp2xyz,Decran=10,lightsrc=50 30 27 rtp2xyz,solidmemory}
\psSolid[object=grille,base=-4 4 -4 4]%
\psSolid[object=plan,definition=normalpoint,args={0 0 0 [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplan0]%
\psset{plan=monplan0}%
\psProjection[object=cercle,
              args=0 0 rayon]%
\composeSolid
\psSolid[object=cylindre,hollow,
        h=hauteur,r=rayon,grid,
        fillcolor=white,incolor=yellow!10,
        ngrid=1 60](0,0,0)
\psSolid[object=plan,definition=normalpoint,args={0 0 hauteur [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanH]
\psset{plan=monplanH}
\psProjection[object=cercle,linewidth=0.05,
              args=0 0 rayon]
\psSolid[object=plan,definition=normalpoint,args={0 0 0 [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanB]
\psset{plan=monplanB}
\psProjection[object=cercle,linewidth=0.05,
              args=0 0 rayon,range=THETA alpha sub THETA alpha add]
\psPoint(rayon THETA alpha sub cos mul,
         rayon THETA alpha sub sin mul,0){A}
\psPoint(rayon THETA alpha sub cos mul,
         rayon THETA alpha sub sin mul,hauteur){B}
\psline[linewidth=0.05](A)(B)
\psPoint(rayon THETA alpha add cos mul,
         rayon THETA alpha add sin mul,0){C}
\psPoint(rayon THETA alpha add cos mul,
         rayon THETA alpha add sin mul,hauteur){D}
\psline[linewidth=0.05](C)(D)
\end{pspicture}
\end{center}
\begin{center}
\begin{pspicture}(-5,-5)(5,3)
\psframe*(-5,-5)(5,3)
\pstVerb{/rayon 2.5 def /pointVue {20 50 30 rtp2xyz} def
/jaunepale {0 0 0.25 0 setcmykcolor} def}%
\psset{viewpoint=pointVue,Decran=15,lightsrc=15 30 30 rtp2xyz,solidmemory}
\psSolid[object=plan,definition=normalpoint,args={0 0 rayon neg [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanH]
\psset{plan=monplanH}
\psProjection[object=cercle,linewidth=0.005,fillstyle=solid,fillcolor=gray!70,resolution=360,linecolor=gray!70,
              args=0 0 rayon]
\composeSolid%
\psSolid[object=grille,base=-4 4 -4 4,linewidth=0.02,opacity=0.5](0,0,rayon neg)
\psSolid[object=sphere,
        r=rayon,grid,
        fillcolor=white,
        ngrid=36 72](0,0,0)
\psSolid[object=plan,definition=normalpoint,args={0 0 0 [pointVue]},
         action=none,
         base=-4 4 -4 4,
         name=monplanV]
\psset{plan=monplanV}
\psProjection[object=cercle,linewidth=0.05,resolution=360,
              args=0 0 rayon]%
\composeSolid%
\end{pspicture}
\end{center}
\begin{center}
\begin{pspicture}(-5,-3)(5,5)
\psframe*(-5,-3)(5,5)
\pstVerb{/hauteur 5 def /rayon 3 def }
\psset{viewpoint=20 50 30 rtp2xyz,Decran=15,lightsrc=15 30 30 rtp2xyz,solidmemory}
\psSolid[object=grille,base=-4 4 -4 4,linewidth=0.02,opacity=0.5](0,0,0)
\psSolid[object=cone,
         h=hauteur,r=rayon,grid,
         fillcolor=white,
        ngrid=1 72](0,0,0)
\psSolid[object=plan,definition=normalpoint,args={0 0 0 [0 0 1]},
         action=none,
         base=-4 4 -4 4,
         name=monplanB]
\psset{plan=monplanB}
\psProjection[object=cercle,linewidth=0.05,
              args=0 0 rayon,range=-90 THETA add 90 THETA add]
\psPoint(THETA sin rayon mul,THETA cos rayon mul neg,0){A}
\psPoint(0,0,hauteur){H}
\psPoint(THETA sin rayon mul neg,THETA cos rayon mul,0){B}
\psline[linewidth=0.05](B)(H)(A)
\end{pspicture}
\end{center}
\end{document}



mardi 17 février 2015

Une étude graphique de la tour Eiffel par Carlo Alberini

Une étude graphique de la tour Eiffel par Carlo Alberini dont les schémas ont été réalisés avec les packages pst-3dplot et pst-solides3d.
Voici les dessins de cette étude :
Profili di pilastro a minimo dispendio di materiale. Le variazioni di profilo sono calcolate nel piano xz, a sinistra, e nel piano yz, a destra.
Linee di intersezione tra i profili dei pilastri a minimo dispendio di materiale calcolati in precedenza, a sinistra, e raffigurazione di una delle quattro superfici risultanti, a destra. L’intersezione tra i profili dei due pilastri a minimo dispendio di materiale `e avvenuta lungo direzioni mutuamente perpendicolari.

 Rappresentazione schematica della Tour Eiffel.

Les fichiers :


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}

vendredi 13 février 2015

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

Un tore découpé en rubans de Villarceau (suite du message précédent) :

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

 sous forme de package (révision de la documentation 14/02/2015):



Complément à la documentation 15/02/2015 :
Donuts avec comme décoration des demi-rubans de Villarceau

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}

lundi 9 février 2015

Donuts avec des décorations en forme de demi-cercles de Villarceau

C'est la suite des donuts aux décorations à motifs géométriques :

http://pstricks.blogspot.fr/2015/01/donuts-geometriques-avec-pst-solides3d.html

\documentclass{article}
\usepackage{pst-solides3d}
% Manuel Luque
% manuel.luque27@gmail.com
\definecolor{chocolat}{rgb}{0.353 0.227 0.133}
\title{Donuts-Villarceau}
\date{8 février 2015}
\begin{document}
\maketitle
\begin{center}
\psset{unit=0.75}
% Cercles de Villarceau dans un sens
\begin{pspicture}(-6,-6)(6,6)
\psframe(-6,-6)(6,6)
\psset[pst-solides3d]{viewpoint=20 0 40 rtp2xyz,Decran=20,lightsrc=viewpoint}
\psset{solidmemory}
\codejps{
/chocolat {0.353 0.227 0.133 setrgbcolor} def
/n1 108 def /n2 72 def /n1n2 n1 n2 mul def
/RayonMajeur 3 def /rayonmineur 1.5 def
/TOREVILLARCEAU{
/biface false def
0 360 0 360 [n1 n2]
{/y exch def
 /x exch def pop pop
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y sin mul rayonmineur RayonMajeur x cos mul add y cos mul add % x
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y cos mul rayonmineur RayonMajeur x cos mul add y sin mul sub % y
         rayonmineur x sin mul % z
          }
  false % true
  newsurfaceparametree
  } def
/SOMMETS {TOREVILLARCEAU solidgetsommets aload pop} def
/faces1 {TOREVILLARCEAU solidgetfaces} def
 }%
\psSolid[object=new,sommets=SOMMETS,faces=faces1 aload pop,
         fillcolor=chocolat,incolor=gray!50,grid,
         linewidth=0.0001,
         fcol= 0 2 n1n2 2 div cvi 2 sub{/Rang exch def
        Rang (Red) Rang 1 add (Yellow)}for
]
\end{pspicture}
\end{center}
\end{document}

dimanche 8 février 2015

Cercles de Villarceau sur un tore - suite 2

\documentclass{article}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{pst-solides3d}
% Manuel Luque
% manuel.luque27@gmail.com
\definecolor{chocolat}{rgb}{0.353 0.227 0.133}
\title{Cercles de Villarceau sur un tore -3}
\date{8 février 2015}
\begin{document}
\maketitle
\begin{center}
\psset{unit=0.75}
% Cercles de Villarceau dans un sens
\begin{pspicture}(-6,-6)(6,6)
%\psframe*[linecolor=black](-6,-6)(6,6)
\psframe(-6,-6)(6,6)
\psset[pst-solides3d]{viewpoint=20 0 40 rtp2xyz,Decran=20,lightsrc=100 0 10 rtp2xyz}
\psset{solidmemory}
\codejps{
/chocolat {0.353 0.227 0.133 setrgbcolor} def
/n1 72 def /n2 72 def /n1n2 n1 n2 mul def
/RayonMajeur 3 def /rayonmineur 1.5 def
/TOREVILLARCEAU{
/biface false def
0 360 0 360 [n1 n2]
{/y exch def
 /x exch def pop pop
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y sin mul rayonmineur RayonMajeur x cos mul add y cos mul add % x
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y cos mul rayonmineur RayonMajeur x cos mul add y sin mul sub % y
         rayonmineur x sin mul % z
          }
  false % true
  newsurfaceparametree
  } def
/SOMMETS {TOREVILLARCEAU solidgetsommets aload pop} def
/faces1 {TOREVILLARCEAU solidgetfaces} def
 }%
\psSolid[object=new,sommets=SOMMETS,faces=faces1 aload pop,
         fillcolor=chocolat,incolor=gray!50,grid,
         linewidth=0.0001,
         fcol= 0 2 n1n2 2 div cvi 2 sub{/Rang exch def
        Rang (Red) Rang 1 add (Yellow)}for
]
\end{pspicture}

% Cercles de Villarceau dans l'autre sens

\begin{pspicture}(-6,-6)(6,6)
\psframe(-6,-6)(6,6)
\psset[pst-solides3d]{viewpoint=20 0 40 rtp2xyz,Decran=20,lightsrc=viewpoint}
\psset{solidmemory}
\codejps{
/n1 72 def /n2 72 def /n1n2 n1 n2 mul def
/RayonMajeur 3 def /rayonmineur 1.5 def
/TOREVILLARCEAU{
/biface false def
360 0 0 360 [n1 n2]
{/y exch def
 /x exch def pop pop  
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y sin mul rayonmineur RayonMajeur x cos mul add y cos mul add % x
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y cos mul rayonmineur RayonMajeur x cos mul add y sin mul sub neg % y
         rayonmineur x sin mul % z
          }
  false % true
  newsurfaceparametree
  } def
/SOMMETS {TOREVILLARCEAU solidgetsommets aload pop} def
/faces1 {TOREVILLARCEAU solidgetfaces} def
 }%
\psSolid[object=new,sommets=SOMMETS,faces=faces1 aload pop,
         fillcolor=cyan,incolor=gray!50,grid,
         linewidth=0.0001,
         fcol= 0 2 n1n2 2 sub{/Rang exch def
        Rang (Red) Rang 1 add (Yellow)}for
]
\end{pspicture}
\end{center}
\end{document}


Tore découpé en cercles de Villarceau - suite 1

C'est un complément au précédent article :

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

Comment distinguer un cercle :
ou obtenir un ensemble de cercles bicolore :



\documentclass{article}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{pst-solides3d}
% Manuel Luque
% manuel.luque27@gmail.com
\title{Tore découpé en cercles de Villarceau -2}
\date{8 février 2015}
\begin{document}
\maketitle
\[
\left\{
\begin{array}[m]{l}
x=\sqrt{R^2-r^2}\sin(t)\sin\theta+\big(R+r\cos(t)\big)\cos\theta\\[1em]
y=\sqrt{R^2-r^2}\sin(t)\cos\theta-\big(R+r\cos(t)\big)\sin\theta\\[1em]
z=R\sin(t)
\end{array}
\right.
\]
%\newpage
\begin{center}
\psset{unit=0.75}
% Cercles de Villarceau dans un sens
\begin{pspicture}(-6,-6)(6,6)
%\psframe*[linecolor=black](-6,-6)(6,6)
\psframe(-6,-6)(6,6)
\psset[pst-solides3d]{viewpoint=50 0 30 rtp2xyz,Decran=50,lightsrc=1000 0 10 rtp2xyz}
\psset{solidmemory}
\codejps{
/RayonMajeur 3.5 def /rayonmineur 1.5 def
/TOREVILLARCEAU{
/biface false def
0 360 0 360 [60 60]
{/y exch def
 /x exch def pop pop
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y sin mul rayonmineur RayonMajeur x cos mul add y cos mul add % y
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y cos mul rayonmineur RayonMajeur x cos mul add y sin mul sub % x
         rayonmineur x sin mul % z
          }
  false % true
  newsurfaceparametree
  } def
/SOMMETS {TOREVILLARCEAU solidgetsommets aload pop} def
/faces1 {TOREVILLARCEAU solidgetfaces} def
/FACES {0 2 faces1 length 2 sub {/i exch def
faces1 i get} for
  } def
 }%
\psSolid[object=new,sommets=SOMMETS,faces=FACES,hollow,fillcolor=cyan,incolor=gray!50,grid,lightintensity=5]
\end{pspicture}

% Cercles de Villarceau dans l'autre sens

\begin{pspicture}(-6,-6)(6,6)
\psframe*[linecolor=black](-6,-6)(6,6)
\psset[pst-solides3d]{viewpoint=50 0 30 rtp2xyz,Decran=50,lightsrc=1000 0 10 rtp2xyz}
\psset{solidmemory}
\codejps{
/RayonMajeur 3.5 def /rayonmineur 1.5 def
/TOREVILLARCEAU{
/biface false def
0 360 0 360 [60 60]
{/y exch def
 /x exch def pop pop
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y sin mul rayonmineur RayonMajeur x cos mul add y cos mul add % y
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y cos mul rayonmineur RayonMajeur x cos mul add y sin mul sub neg % x
         rayonmineur x sin mul % z
          }
  false % true
  newsurfaceparametree
  } def
%(toreV3636) writesolidfile
/SOMMETS {TOREVILLARCEAU solidgetsommets aload pop} def
/faces1 {TOREVILLARCEAU solidgetfaces} def
/FACES {0 2 faces1 length 2 sub {/i exch def
faces1 i get} for
  } def
 }%
\psSolid[object=new,sommets=SOMMETS,faces=FACES,hollow,incolor=red,fillcolor=white,grid]
\end{pspicture}
\end{center}
\newpage
\begin{center}
\begin{pspicture}(-6,-6)(6,6)
\psframe*[linecolor=black](-6,-6)(6,6)
\psset[pst-solides3d]{viewpoint=50 0 30 rtp2xyz,Decran=50,lightsrc=1000 0 10 rtp2xyz}
\psset{solidmemory}
\codejps{
/n1 60 def /n2 60 def
/RayonMajeur 3.5 def /rayonmineur 1.5 def
/TOREVILLARCEAU{
/biface false def
0 360 0 360 [n1 n2]
{/y exch def
 /x exch def pop pop
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y sin mul rayonmineur RayonMajeur x cos mul add y cos mul add % y
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y cos mul rayonmineur RayonMajeur x cos mul add y sin mul sub % x
         rayonmineur x sin mul % z
          }
  false % true
  newsurfaceparametree
  } def
/SOMMETS {TOREVILLARCEAU solidgetsommets aload pop} def
/faces1 {TOREVILLARCEAU solidgetfaces} def
/FACES {0 2 faces1 length 2 sub {/i exch def
faces1 i get} for
  } def
 }%
\psSolid[object=new,sommets=SOMMETS,faces=FACES,
         hollow,fillcolor=red,incolor=white,grid,
         fcol=0 n1 2 div cvi n1 n2 mul 2 div cvi 1 sub {(blue)}for]
\end{pspicture}
\end{center}
\newpage
\begin{center}
\begin{pspicture}(-6,-6)(6,6)
\psframe*[linecolor=black](-6,-6)(6,6)
\psset[pst-solides3d]{viewpoint=50 0 30 rtp2xyz,Decran=50,lightsrc=1000 0 10 rtp2xyz}
\psset{solidmemory}
\codejps{
/n1 60 def /n2 60 def
/RayonMajeur 3.5 def /rayonmineur 1.5 def
/TOREVILLARCEAU{
/biface false def
0 360 0 360 [n1 n2]
{/y exch def
 /x exch def pop pop
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y sin mul rayonmineur RayonMajeur x cos mul add y cos mul add % y
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y cos mul rayonmineur RayonMajeur x cos mul add y sin mul sub % x
         rayonmineur x sin mul % z
          }
  false % true
  newsurfaceparametree
  } def
/SOMMETS {TOREVILLARCEAU solidgetsommets aload pop} def
/faces1 {TOREVILLARCEAU solidgetfaces} def
/FACES {0 2 faces1 length 2 sub {/i exch def
faces1 i get} for
  } def
 }%
\psSolid[object=new,sommets=SOMMETS,faces=FACES,
         hollow,
%         fillcolor=red,
         incolor=white,
         grid,
         fcol=0 1 n2 2 div cvi{/iC exch def
                  iC n1 2 div cvi n1 n2 mul 2 div cvi iC add 1 sub {dup 2 mod 0 eq{(blue)}{(red)}ifelse}for}for]
\end{pspicture}
\end{center}
\end{document}

              

samedi 7 février 2015

Tore découpé en cercles de Villarceau






\documentclass{article}
\usepackage[latin1]{inputenc}%
\usepackage[T1]{fontenc}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{pst-solides3d}
% Manuel Luque
% manuel.luque27@gmail.com
\title{Tore découpé en cercles de Villarceau}
\date{7 février 2015}
\begin{document}
\maketitle
\begin{center}
\psset{unit=0.75}
% Cercles de Villarceau dans un sens
\begin{pspicture}(-6,-6)(6,6)
\psframe*[linecolor=green](-6,-6)(6,6)
\psset[pst-solides3d]{viewpoint=50 0 30 rtp2xyz,Decran=50,lightsrc=1000 0 10 rtp2xyz}
\psset{solidmemory}
\codejps{
/RayonMajeur 3.5 def /rayonmineur 1.5 def
/TOREVILLARCEAU{
/biface false def
0 360 0 360 [60 60]
{/y exch def
 /x exch def pop pop
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y sin mul rayonmineur RayonMajeur x cos mul add y cos mul add % y
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y cos mul rayonmineur RayonMajeur x cos mul add y sin mul sub % x     
         rayonmineur x sin mul % z
          }
  false % true
  newsurfaceparametree
  } def
/SOMMETS {TOREVILLARCEAU solidgetsommets aload pop} def
/faces1 {TOREVILLARCEAU solidgetfaces} def
/FACES {0 2 faces1 length 2 sub {/i exch def
faces1 i get} for
  } def
 }%
\psSolid[object=new,sommets=SOMMETS,faces=FACES,hollow,fillcolor=red,incolor=gray,grid]
\end{pspicture}

% Cercles de Villarceau dans l'autre sens
\begin{pspicture}(-6,-6)(6,6)
\psframe*[linecolor=yellow](-6,-6)(6,6)
\psset[pst-solides3d]{viewpoint=50 0 30 rtp2xyz,Decran=50,lightsrc=1000 0 10 rtp2xyz}
\psset{solidmemory}
\codejps{
/RayonMajeur 3.5 def /rayonmineur 1.5 def
/TOREVILLARCEAU{
/biface false def
0 360 0 360 [60 60]
{/y exch def
 /x exch def pop pop
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y sin mul rayonmineur RayonMajeur x cos mul add y cos mul add % y
         RayonMajeur dup mul rayonmineur dup mul sub sqrt x sin mul y cos mul rayonmineur RayonMajeur x cos mul add y sin mul sub neg % x
         rayonmineur x sin mul % z
          }
  false % true
  newsurfaceparametree
  } def
/SOMMETS {TOREVILLARCEAU solidgetsommets aload pop} def
/faces1 {TOREVILLARCEAU solidgetfaces} def
/FACES {0 2 faces1 length 2 sub {/i exch def
faces1 i get} for
  } def
 }%
\psSolid[object=new,sommets=SOMMETS,faces=FACES,hollow,incolor=red,fillcolor=gray,grid]
\end{pspicture}
\end{center}
\end{document}

vendredi 6 février 2015

Représentation schématique de la tour Eiffel

Représentation schématique de la tour Eiffel par Carlo Alberini avec le package pst-3dplot :
Cette étude a été complétée par Carlo Alberini le 16 février 2015, le résultat définitif est ici :

http://pstricks.blogspot.fr/2015/02/une-etude-graphique-de-la-tour-eiffel.html

\documentclass[12pt,a4paper]{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{pst-3dplot}
% Carlo Alberini
\begin{document}
\begin{center}
\psset{Alpha=60,Beta=30}
\begin{pspicture}(-5,-3)(5,9.5)
\pstThreeDCoor[xMin=-5,xMax=5,yMin=-5,yMax=5,zMax=10]
%
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](4,0,0)(0,4,0)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue,linestyle=dashed](0,4,0)(-4,0,0)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue,linestyle=dashed](-4,0,0)(0,-4,0)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](0,-4,0)(4,0,0)
%
\pstThreeDLine[linewidth=0.5pt,linecolor=blue,linestyle=dashed](4,0,0)(4,0,0.125)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](0,4,0)(0,4,0.125)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](-4,0,0)(-4,0,0.125)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](0,-4,0)(0,-4,0.125)
%
\pstThreeDSquare[fillcolor=gray,fillstyle=solid,linecolor=blue,linewidth=0.5pt,opacity=0.2](4,0,0.125)(-4,4,0)(-4,-4,0)
%
\pstThreeDSquare[fillcolor=gray,fillstyle=solid,linecolor=blue,linewidth=0.5pt,opacity=0.2](1.5,0,3.125)(-1.5,1.5,0)(-1.5,-1.5,0)
%
\pstThreeDSquare[fillcolor=gray,fillstyle=solid,linecolor=blue,linewidth=0.5pt,opacity=0.2](0.2265,0,8.5)(-0.2265,0.2265,0)(-0.2265,-0.2265,0)
%
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](0.2265,0,8.3755)(0,0.2265,8.3755)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue,linestyle=dotted](0,0.2265,8.3755)(-0.2265,0,8.3755)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue,linestyle=dotted](-0.2265,0,8.3755)(0,-0.2265,8.3755)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](0,-0.2265,8.3755)(0.2265,0,8.3755)
%
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](1.5,0,3)(0,1.5,3)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue,linestyle=dashed](0,1.5,3)(-1.5,0,3)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue,linestyle=dashed](-1.5,0,3)(0,-1.5,3)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](0,-1.5,3)(1.5,0,3)
%
\pstThreeDLine[linewidth=0.5pt,linecolor=gray,linestyle=dashed](0,1.5,3)(0,-1.5,3)
\pstThreeDLine[linewidth=0.5pt,linecolor=gray,linestyle=dashed](1.5,0,3)(-1.5,0,3)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue,linestyle=dotted](0.2265,0,8.3755)(0.2265,0,8.5)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](0,0.2265,8.3755)(0,0.2265,8.5)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue,linestyle=dotted](-0.2265,0,8.3755)(-0.2265,0,8.5)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](0,-0.2265,8.3755)(0,-0.2265,8.5)
%
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](1.5,0,3)(1.5,0,3.125)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue,linestyle=dashed](-1.5,0,3)(-1.5,0,3.125)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue,linestyle=dashed](0,1.5,3)(0,1.5,3.125)
\pstThreeDLine[linewidth=0.5pt,linecolor=blue](0,-1.5,3)(0,-1.5,3.125)
\parametricplotThreeD[xPlotpoints=200,
 linecolor=Mahogany,%
 linewidth=0.75pt,plotstyle=curve,linestyle=dashed,
 algebraic](0.005,0.083333){% radiant
 0 | 48*t | -3*ln(12*t)+0.125}
\parametricplotThreeD[xPlotpoints=200,
 linecolor=Mahogany,%
 linewidth=0.75pt,plotstyle=curve,linestyle=dashed,
 algebraic](0.005,0.083333){% radiant
 48*t | 0 | -3*ln(12*t)+0.125}
%
\parametricplotThreeD[xPlotpoints=200,
 linecolor=Mahogany,%
 linewidth=0.75pt,plotstyle=curve,linestyle=dashed,
 algebraic](0.005,0.083333){% radiant
 0 | -48*t | -3*ln(12*t)+0.125}
\parametricplotThreeD[xPlotpoints=200,
 linecolor=Mahogany,%
 linewidth=0.75pt,plotstyle=curve,linestyle=dashed,
 algebraic](0.05,0.083333){% radiant
 -48*t | 0 | -3*ln(12*t)+0.125}
 \parametricplotThreeD[xPlotpoints=200,
 linecolor=Mahogany,%
 linewidth=0.75pt,plotstyle=curve,linestyle=dotted,
 algebraic](0.005,0.05){% radiant
 -48*t | 0 | -3*ln(12*t)+0.125}
\pstThreeDLine[linewidth=1pt,linecolor=blue,arrows=->](0,0,3)(0,0,1)
\rput[bl](0.1,1.0){\footnotesize{$d\vec{F}_{P}$}}
\rput[bl](1.4,2.2){\footnotesize{$dz$}}
\end{pspicture}
\end{center}
\end{document}

lundi 2 février 2015

Le numéro 396 (janvier-février 2015) de la revue du Palais de la découverte

Le numéro 396 (janvier-février 2015) de la revue du Palais de la découverte :

http://www.palais-decouverte.fr/fr/ressources/revue-decouverte/n-396-de-la-revue-decouverte/

 présente un dossier sur le Grand Collisionneur – LHC (Large Hadron Collider),  ainsi qu'un article intitulé : "Partageons les tores", en prenant pour prétexte que Le LHC (Grand Collisionneur de hadrons) est, approximativement, en forme de tore.
Cet article est illustré par des images de nombreuses sections du tore dont un certain nombre ont été réalisées avec pst-solides3d et dont vous trouverez les images et les fichiers sources (.tex et .pdf) sur :

http://melusine.eu.org/syracuse/mluque/solides3d2007/sections/section-tore/

http://pstricks.blogspot.fr/2013/02/sections-du-tore-circulaire.html

http://pstricks.blogspot.fr/2013/02/sections-du-tore-par-un-plan-passant.html

http://pstricks.blogspot.fr/2013/02/sections-dun-tore-ferme-par-un-plan.html

\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{pst-solides3d}
\begin{document}
\begin{center}
\psset{unit=0.5}
\begin{pspicture*}(4,-10)(20,10)%
\psframe(4,-10)(20,10)
\psset[pst-solides3d]{viewpoint=1 -15 0 rtp2xyz,Decran=30,lightsrc=viewpoint}
\pstVerb{/n1 72 def /n2 72 def}%
\defFunction[algebraic]{torus}(u,v){(1+ 0.5*cos(u))*cos(v)}{(1+ 0.5*cos(u))*sin(v)}{0.5*sin(u)}
\psSolid[object=surfaceparametree,
        base=0 2 pi mul pi 1.2 div pi 1.5 mul ,
        fcol=0 2 n1 2 sub {/i exch def
        i n2 mul 2 i n2 mul n2 add 1 sub {(White)} for} for
        1 2 n1 1 sub {/i exch def
        i n2 mul 1 add 2 i n2 mul n2 add 1 sub {(White)} for} for,
        fillcolor=black,incolor=black,
        function=torus,
        unit=1,
        ngrid=n1 n2](0,1.5,0)
\end{pspicture*}
\end{center}
\end{document}

dimanche 1 février 2015

Tore évidé avec pst-solides3d

\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\begin{center}
\begin{pspicture}(-5,-6)(5,6)
\psframe(-5,-6)(5,6)
\psset[pst-solides3d]{viewpoint=100 40 0 rtp2xyz,Decran=100,lightsrc=viewpoint}
\pstVerb{/n1 24 def /n2 48 def}%
\defFunction[algebraic]{torus}(u,v){(3+ 1.5*cos(u))*cos(v)}{1.5*sin(u)}{(3+ 1.5*cos(u))*sin(v)}
\psSolid[object=surfaceparametree,
        base=pi 4 div pi 1.75 mul 0 2 pi mul ,
        fcol=0 2 n1 2 mul 2 sub {/i exch def
        i n2 mul 2 i n2 mul n2 add 1 sub {(White)} for} for
        1 2 n1 2 mul 1 sub {/i exch def
        i n2 mul 1 add 2 i n2 mul n2 add 1 sub {(White)} for} for,
        fillcolor=black,incolor=red,
        function=torus,
        linewidth=0.5\pslinewidth,unit=1,
        ngrid=n1 n2]%
\end{pspicture}
\end{center}
\end{document}