mercredi 3 octobre 2012

Les pâtes alimentaires façon PSTricks - 4 : les Macaroni

Toujours dans la suite des belles recettes de pâtes italiennes élaborées par Sander Huisman avec les outils de Mathematica et transposées avec les outils PSTricks et plus précisément du package pst-solides3d, voici, après les Gemelli, les Cellentani, et les Penne, les Macaroni.
La difficulté a été de donner aux pâtes une certaine épaisseur. J'ai opté pour le calcul intégral de ce modèle, à partir de l'exemple des anneaux (newanneau dans pst-solides3d.pro). Il y a certainement au moins une autre façon de faire...
Pour faciliter les essais de mise en page, les caractéristiques du Macaroni ont été, dans un premier temps, enregistrées sur le disque avec l'option "writesolid" : c'est le fichier "macaroni-write.tex" su sous-dossier macaroni du dossier ::
L'image obtenue :

Les fichiers sont dans le répertoire :

Les listings :
L'écriture des caractéristiques 

\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{pst-solides3d}
\title{Les pâtes alimentaires façon PSTricks - 4 :\\ Les Macaroni}
\date{3 octobre 2012}
\begin{document}

\begin{center}
Macaroni
\begin{pspicture}(-5,-5)(5,5)
\psset{lightsrc=20 0 20 rtp2xyz,viewpoint=20 20 20 rtp2xyz,Decran=20}
\pstVerb{
         /rr0 0.5 def
         /rr1 0.65 def
         /Rr 2.5 def
         /ar 2 def
         /BASE [0 ar 360 {/I exch def
                0
                Rr rr1 I cos mul add
                rr1 I sin mul
                } for
                360 ar neg 0 {/J exch def
                0
                Rr rr0 J cos mul add
                rr0 J sin mul
                } for
                ] bind def
/nS BASE length 3 idiv def
BASE 36
   /n2 exch def % nombre de méridiens
   /S1 exch def
   %% nombre de sommets
   /n1 S1 length 3 idiv def
   /tab S1
      n2 {
         duparray
         {0 0 180 n2 div rotateOpoint3d} papply3d
      } repeat
      n2 {append} repeat
   def
   /NS tab length 3 idiv def
   /Faces {
      0 1 n2 1 sub {
         /j exch def
         n1 j mul 1 j 1 add n1 mul 2 sub {
            /i exch def
            [i 1 add i dup n1 add i n1 1 add add]
         } for
         [n1 j mul j 1 add n1 mul 1 sub j 2 add n1 mul 1 sub j 1 add n1 mul]
      } for
   [nS 1 sub -1 0 {} for]
   [NS nS 2 idiv sub 1 sub -1 NS nS sub {}for
    NS 1 sub -1  NS nS 2 idiv sub {} for
   ]
   } def
/Sommets {tab aload pop} def
}%
\psSolid[object=new,sommets=Sommets,faces={Faces},
         incolor={[hsb]{0.118 1 1}},
         fillcolor={[hsb]{0.118 1 1}},grid,
         action=writesolid,file=macaroni](0,0,0)%
\end{pspicture}
\end{center}
\end{document}

L'image :

\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage{pst-solides3d}
\usepackage{pst-grad,pst-text}
\title{Les pâtes alimentaires façon PSTricks - 4 :\\ Les Macaroni}
\date{3 octobre 2012}
\pagestyle{empty}
\begin{document}
\maketitle
\begin{center}
\begin{pspicture}(-4,-5)(4,7)
\psframe[fillstyle=gradient,gradbegin=blue,gradend=blue!50](-4,-5)(4,7)
\psellipse*[linecolor=white](0,5.8)(2,0.75)
\psellipse[linecolor=red,linewidth=0.1](0,5.8)(2,0.75)
\psellipse*[linecolor=red](0.3,5.8)(1.5,0.5)
\rput(0.3,5.8){\pscharpath[fillstyle=solid,fillcolor=white,linestyle=none]{\fontfamily{phv}\fontsize{25}{25}\selectfont\itshape Barilla}}
\rput(0.3,3.25){\pscharpath[fillstyle=solid,fillcolor=white,linestyle=none]{\fontfamily{phv}\fontsize{20}{20}\selectfont MACARONI}}
\rput(0.3,-4){\huge\textbf{\textsf{\green{}IT{}\white{}AL{}\red {}IA}}}
\psset{lightsrc=20 0 30 rtp2xyz,viewpoint=20 30 40 rtp2xyz,Decran=15}
\psSolid[object=datfile,grid,
         incolor={[hsb]{0.118 1 1}},fillcolor={[hsb]{0.118 1 1}},
         file=macaroni]
%% definition du plan de projection
\psset{solidmemory}
\defFunction[algebraic]{cercle1}(t){0.65*sin(t)}{2.5+0.65*cos(t)}{}
\defFunction[algebraic]{cercle2}(t){0.5*sin(t)}{2.5+0.5*cos(t)}{}
\defFunction[algebraic]{cercle3}(t){0.65*sin(t)}{-2.5+0.65*cos(t)}{}
\defFunction[algebraic]{cercle4}(t){0.5*sin(t)}{-2.5+0.5*cos(t)}{}
\psSolid[object=plan,
   definition=equation,
   args={[1 0 0 0]},
   base=-4 4 -4 4,
   action=none,
   name=planA
]
\psset{plan=planA}
\psProjection[object=courbeR2,
   linewidth=0.02,linecolor={[rgb]{0.4 0.2 0}},
   range=0 2 Pi mul,resolution=360,
   function=cercle1
]
\psProjection[object=courbeR2,
   linewidth=0.02,linecolor={[rgb]{0.4 0.2 0.2}},
   range=0 2 Pi mul,resolution=360,
   function=cercle2
]
\psProjection[object=courbeR2,
   linewidth=0.02,linecolor={[rgb]{0.4 0.2 0.2}},
   range=0 2 Pi mul,resolution=360,
   function=cercle3
]
\psProjection[object=courbeR2,
   linewidth=0.02,linecolor={[rgb]{0.4 0.2 0.2}},
   range=0 2 Pi mul,resolution=360,
   function=cercle4
]
%\axesIIID(0,0,0)(5,5,5)
\composeSolid
\end{pspicture}
\end{center}
\end{document} 

Aucun commentaire:

Enregistrer un commentaire