samedi 15 septembre 2012

Les pâtes alimentaires façon PSTricks ou ``PSTricks vs Mathematica''

C’est un lien du blog de la revue Quadrature :
http://quadrature-revue.blogspot.fr/2012/04/un-bon-plat-de-pates.html
qui m’a conduit vers les magnifiques modélisations d’un grand nombre de variétés de pâtes italiennes par Sander Huisman, à l’aide du logiciel Mathematica :
http://shuisman.com/?p=1314
Le code de Mathematica est d’une concision quasi ésotérique et les résultats d’un grand réalisme sont de toute beauté.
Beau travail, monsieur Sander Huisman ! Je vous attribue la toque de grand chef mathématicien des pâtes italiennes : Fusilli, Spaghetti, Farfalle etc.
PSTricks a-t-il les possibilités de réaliser de semblables modélisations ? Pour essayer j’ai choisi les pâtes Gemelli.
pst-solides3d possède les outils nécessaires à leur modélisation.
D’abord le cylindre dont la base est une portion de lemniscate, ensuite l’option transform qui permet de tordre le cylindre autour de son axe d’un angle proportionnel à la cote z, avec un coefficient qui dépendra du nombre de torsades souhaitées.
Ceci est le code permettant de générer 19 fichiers contenant les coordonnées des sommets et la liste des faces de pâtes dont la torsion s’échelonne de 0°à 2 tours. C’est l’étape la plus longue, mais elle permet ensuite de faire rapidement, d’une part tous les essais utiles à la meilleure mise en page souhaitée et d’autre part de créer les images pour une animation.
Dossier contenant tous les fichiers :


fichier inclus dans le répertoire précédent  : pasta_fichiers.tex

\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\begin{pspicture}(-3,-2)(3,7)
\psset{lightsrc=viewpoint,viewpoint=20 0 50 rtp2xyz,Decran=10}
\multido{\i=0+1,\I=0+2}{19}{%
\pstVerb{
/torsion\i {
2 dict begin
/M defpoint3d % on récupère les coordonnées
M /z exch def pop pop
M 0 0 z \I\space mul rotateOpoint3d
end} def}%
\defFunction[algebraic]{G1}(t){sin(t)/(1+(cos(t))^2)}{cos(t)*sin(t)/(1+(cos(t))^2)}{0}
\psSolid[object=cylindre,
h=20,function=G1,
range=0.628 5.655,
ngrid=80 36,
axe=0 0 1,
incolor={[hsb]{0.118 1 1}},
fillcolor={[hsb]{0.118 1 1}},
grid,
transform=torsion\i,
file=pastas\i,
action=writesolid]
}
\end{pspicture}
\end{document


Le point le plus délicat est le lissage des facettes permettant d’obtenir le rendu le plus réaliste possible. Hélas cette possibilité n’est pas permise à pst-solides3d. Cependant en prenant un grand nombre de facettes, ce qui augmente le temps de calcul, on aboutit à un résultat qui me paraît convenable. Quelques exemples :
Le maillage :

 Une animation au format gif :

Les fichiers sont dans le répertoire :

Aucun commentaire:

Enregistrer un commentaire