jeudi 22 novembre 2012

Paysages au crépuscule peints avec PSTricks

Un paysage crépusculaire, les silhouettes d'une ville se dessinent sur l'horizon, Vénus brille dans le ciel. C'est une réalisation de Thomas Söll qui utilise pour les dégradés du ciel le package pst-slpe.


 Les fichiers (Sonnenuntergang.pdf Sonnenuntergang.tex) sont dans l'archive :

Cet envoi de Thomas m'a fait souvenir que j'avais réalisé, il y a quelques années, un exemple avec une idée identique : un champ moissonné, avec les ballots de paille bien alignés, au crépuscule. Cet exemple utilise le package pst-mirror que nous avions revu et complété en 2011 avec Jean-Michel Sarlat et Gilg Jürgen :

http://melusine.eu.org/syracuse/G/pstricks/pst-mirror/


ChampAuCrepuscule.tex



dimanche 18 novembre 2012

Expérience de l'anneau sauteur d'Elihu Thomson illustrée par Thomas Söll

Expérience de l'anneau sauteur de Elihu Thomson, qui met en jeu : induction électromagnétique, et force de Laplace sur l'anneau sauteur.
Une vidéo très démonstrative sur  youtube : "Physics Demo -- Jumping Ring"

http://www.youtube.com/watch?v=Pl7KyVIJ1iE

Voici des éléments d'une illustration de cette expérience historique réalisée par Thomas Söll avec pst-solides3d. C'est un montage un peu différent : l'axe de la bobine et de l'anneau est ici horizontal.

Attention : la compilation ps2pdf dure une dizaine de minutes.

 Les fichiers (Thomson-Ring.pdf Thomson-Ring.tex) sont dans le répertoire :


\documentclass{article}
%Thomas Söll
%Thomas.Soell@onlinehome.de
\usepackage{pst-solides3d}

\begin{document}
\begin{center}
\begin{pspicture}(-2,-5)(8,8)
\psset{viewpoint=20 40 15 rtp2xyz,lightsrc=20 45 50 rtp2xyz,Decran=30}
\psset{solidmemory}
%------------------------------------ Zylinder -------------------------------------------------------------------------
\psSolid[opacity=0.5,incolor=red,fillcolor=cyan!50,object=cylindre,h=5,r=0.8,ngrid=20 120,grid=false,action=none,name=Z1](0,0,0)
\psSolid[object=anneau,fillcolor=green!50!cyan!60,incolor=yellow,h=0.5,R=1.2,r=1,ngrid=150,grid=false,action=none,name=R1](0,0,4.5)%
%--------------------------------------- wire -----------------------------------------------------------------------------
{\defFunction[algebraic]{helice}(t){0.95*cos(80*t)}{0.95*sin(80*t)}{4.5*t}
\psSolid[object=courbe,r=0,range=0 0.58905,linecolor=red!60,linewidth=0.5pt,resolution=720,
function=helice,action=none,name=wendel1,r=0.05,fillcolor=red!60,incolor=red!60,ngrid=360 40](0,0,0)}%
%------------------------------------ Compose -------------------------------------------------------------------------
\psSolid[object=fusion,base=Z1 R1 wendel1,grid=false,linecolor=gray,name=ThomsonRing,RotX=-90,RotY=90]
\composeSolid
%
\psSolid[object=line,linewidth=3pt,linecolor=black,args=0.5 4.5 1.1 1.5 4.5 5]
\psSolid[object=line,linewidth=3pt,linecolor=black,args=-0.5 4.5 1.1 -1.5 4.5 5]
\end{pspicture}
\end{center}
\begin{center}
\begin{pspicture}(-4,-1)(4,9)
\psset{viewpoint=20 90 10 rtp2xyz,lightsrc=20 45 50 rtp2xyz,Decran=30}
\psset{solidmemory}
\psSolid[opacity=0.5,incolor=red,fillcolor=cyan!50,object=cylindre,h=5,r=0.8,ngrid=20 120,grid=false,action=none,name=Z1](0,0,0)
\psSolid[object=anneau,fillcolor=green!50!cyan!60,incolor=yellow,h=0.5,R=1.2,r=1,ngrid=150,grid=false,action=none,name=R1](0,0,4.5)%
\psSolid[object=fusion,base=Z1 R1,grid=false,linecolor=gray,name=ThomsonRing,RotX=-90,RotY=90]
\composeSolid
%
\psSolid[object=line,linewidth=3pt,linecolor=black,args=0.5 4.5 1.1 1.5 4.5 5]
\psSolid[object=line,linewidth=3pt,linecolor=black,args=-0.5 4.5 1.1 -1.5 4.5 5]
\end{pspicture}
\end{center}
\end{document}

Transformateur et une expérience pour illustrer la Force de Laplace par Thomas Söll


Toujours finement dessiné par Thomas Söll avec pst-solides3d, voici le schéma du principe d'un transformateur :
et le dessin d'une expérience classique mettant en évidence la force Laplace :
Les fichiers (Transfo.pdf Transfo.tex) et (Hufeisenmagnet.pdf Hufeisenmagnet.tex) sont dans l'e répertoire :

mardi 30 octobre 2012

pst-solve : recherche d’une racine simple par dichotomie

En essayant de dessiner une mosaïque vue sur une maison de Brionne, uniquement constituée d’arcs de cercle -à part le contour, je me suis aperçu qu’il y avait beaucoup de calculs à faire ! J’aurais pu confier la résolution des différentes équations à un logiciel spécialisé, mais je me suis souvenu que j’avais déjà réalisé, en août 2003, une série de macros qui justement permettaient de trouver et d’afficher la solution d’une équation dans une intervalle donné :


Comme Herbert Voss a repris la méthode d’affichage des valeurs dans le package pst-tools en lui apportant quelques améliorations comme le choix de la fonte des nombres, j’ai uniquement réécrit la macro dédiée au calcul d’une solution et j’ai utilisé la package pst-tools pour l’affichage.
La macro \psSolve[options](t1,t2)(f(t),t){nom}  permet de calculer une solution de l’équation f(t)=0 dans l’intervalle [t1,t2]. La fonction peut-être écrite en mode algébrique avec l’option [algebraic] et sa variable doit être précisée après la virgule : on peut choisir celle que l’on veut (t , x, y . . .). Le dernier paramètre indiquera le nom de la variable postscript dans laquelle sera stocké le résultat pour une utilisation ultérieure.
C’est une macro très rudimentaire et il faut avoir une idée de l’intervalle où peut se trouver une solution. Pour cela, on trace, évidemment, le graphe de la fonction.

 Les valeurs indiquées sont obtenues avec la macro. Pour comparer les valeurs calculées avec Maple sont : -2.036983004, -0.3192114863
Quelques étapes de la construction :




 Les fichiers :
http://manuel.luque.perso.neuf.fr/pst-solve/pst-solve.pdf
http://manuel.luque.perso.neuf.fr/pst-solve/pst-solve.tex

lundi 29 octobre 2012

Géométrie élémentaire avec PSTricks et AcroteX par Thomas Söll

Il s'agit d'une image extraite de l'animation incluse dans le fichier (Anim-Scheitel-Winkel.pdf Anim-Scheitel-Winkel.tex)  du répertoire :

Un peu de géométrie élémentaire avec PSTricks par Thomas Söll

Ces illustrations montrant comment dessiner des parallèles à l'aide d'une équerre et d'un rapporteur sont dessinées très finement par Thomas Söll.


Les fichiers (Geodr-Stift-Lineal.tex  Geodr-Stift-Lineal.pdf) sont dans :

mercredi 17 octobre 2012

“Swinging Atwood’s Machine” : animation en 3D

Une image de l'animation qui est incluse dans le pdf.
Les calculs ont été faits avec pst-ode, l'animation avec animate et l'affichage avec pst-solides3d. La macro \listplotIIID a été réécrite.
Les fichiers"animate_atwood_3d.pdf" et "animate_atwood_3d.tex" sont dans le répertoire :
Les autres fichiers sont dans le mêm répertoire

L'animation au format Gif animé :

dimanche 14 octobre 2012

“Machine d’Atwood dansante” ou “Swinging Atwood’s Machine”

Nous avons déjà évoqué, dans ce blog, de nombreuses machines comme le pendule cycloïdal, le pendule élastique etc. Voici venir le tour de la “Machine d’Atwood dansante” ou “Swinging Atwood’s Machine” en anglais. L’article fondateur de toutes les études qui lui ont été dédiées est celle de “Tufillaro, Abbott et Griffiths” dans la revue d’octobre 1984 de l’American Association of Physics Teachers. En plus de l’étude théorique, ces 3 auteurs proposent le dessin d’un montage expérimental, que j’ai redessiné en 3D.
Une équipe de l'Université de Lille 1 a mis au point un dispositif expérimental plus simple, avec simplement deux poulies. Les vidéos qu’ils présentent sont convaincantes, mais il me semble que pour éviter que le pendule accroche le fil reliant les deux poulies, celles-ci ne doivent pas avoir leurs deux axes rigoureusement parallèles, un des deux doit être légèrement tourné vers l’extérieur.


Pour l’établissement des équations différentielles du mouvement du pendule et du contre-poids, nous supposons que le rayon des poulies est négligeable ainsi que leur masse. Le document fondateur contient une démonstration bien plus complète, ainsi que l’article rédigé par l’équipe de l’Université de Lille déjà cité. Je signale aussi la fine analyse faite par Gilbert Gastebois du rôle joué par la force de Coriolis. Je rappelle que ce document n’a d’autre objectif que donner un exemple d’utilisation des packages ‘pst-ode’ et ‘animate’.
Une image d'une animation :
Une animation en Gif animé :

Tous les fichiers sont dans le répertoire :
Atwood

Le fichier "animate_atwood_2.tex" est spécialement dédié à l'animation. Les animations sont incluses dans les fichiers pdf.

jeudi 4 octobre 2012

Les pâtes alimentaires façon PSTricks - 5 : Bucatini et Stelline

Pour dessiner le contour des pâtes il faut modifier le fichier pst-solides3d.pro en désactivant quelques lignes :
ajouter des % aux lignes indiquées :

/proj-pst-courbeR2 {
   l@pl@n plangetrange aload pop
   setyrange setxrange
%   newpath
%      xmin ymin l@pl@n pointplan smoveto
%      xmin ymax l@pl@n pointplan slineto
%      xmax ymax l@pl@n pointplan slineto
%      xmax ymin l@pl@n pointplan slineto
%      xmin ymin l@pl@n pointplan slineto
%      planprojpst projpath
%   clip
%   solidlinewidth setlinewidth
   newpath
      linecolor
      range aload pop { function cvx exec } CourbeR2_
      gere_pstricks_proj_opt
} def

/proj-pst-courbe {
   l@pl@n plangetrange aload pop
   setyrange setxrange
%   newpath
%      xmin ymin l@pl@n pointplan smoveto
%      xmin ymax l@pl@n pointplan slineto
%      xmax ymax l@pl@n pointplan slineto
%      xmax ymin l@pl@n pointplan slineto
%      xmin ymin l@pl@n pointplan slineto
%      planprojpst projpath
%   clip
   solidlinewidth setlinewidth
   newpath
      linecolor
      range aload pop {} { function cvx exec } Courbeparam_
      gere_pstricks_proj_opt
} def

Les fichiers sont dans le sous-dossier "bucati-stellini" :


Le listing :

\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage{pst-plot,pst-solides3d}
\usepackage{pst-text}
\title{Les pâtes alimentaires façon PSTricks - 5 :\\ Bucatoni et Stelline}
\date{5 octobre 2012}
\begin{document}
\maketitle

\begin{center}
%Bucatini

\begin{pspicture}(-4,-1)(4,10)
\psset{lightsrc=100 20 50 rtp2xyz,viewpoint=100 0 60 rtp2xyz,Decran=20}
\pstVerb{/iface 0 store
         /BLEU {0.2 0.2 1 setrgbcolor} def}%
\psSolid[object=grille,base=-48 0 -8 8,ngrid=2. 2.,RotY=90,grid,
 fcol=0 16 368 { /i exch def
 0 2 6 {/j exch def
 j i add (cyan)
 j i 1 add add (BLEU)
 } for
 } for
 8 16 352 { /i exch def
 0 2 6 {/j exch def
 j i add (BLEU)
 j i 1 add add (cyan)
 } for
 } for
](-1,0,0)
{\psset{solidmemory}
\psSolid[object=plan,
    definition=normalpoint,
    args={-1 0 40 [1 0 0]},
    action=none,name=panneau,
    base=-1 1 -2 2]
\psProjection[object=texte,
    fontsize=150,linecolor=red,
    plan=panneau,phi=180,
    text=Bucatini](16,5)%
\composeSolid}
\psSolid[object=prisme,h=50,grid,%ngrid=18 1,
incolor={[hsb]{0.118 1 1}},
fillcolor={[hsb]{0.118 1 1}},
base=0 2 360 {
/angle ED
 1.25 angle cos mul
 1.25 angle sin mul
} for
360 -2 0 {
/angle ED
0.75 angle cos mul
0.75 angle sin mul
} for
](0,0,0)
%% definition du plan de projection
\psset{solidmemory}
\defFunction[algebraic]{cercle1}(t){1.25*cos(t)}{1.25*sin(t)}{}
\defFunction[algebraic]{cercle2}(t){0.75*cos(t)}{0.75*sin(t)}{}
\psSolid[object=plan,
   definition=equation,
   args={[0 0 1 -50]},
   base=-4 4 -4 4,
   action=none,
   name=monplan
]
\psset{plan=monplan}
\psProjection[object=courbeR2,
   linewidth=0.02,linecolor={[rgb]{0.4 0 0}},
   range=0 2 Pi mul,resolution=360,
   function=cercle2
]
\psProjection[object=courbeR2,
   linewidth=0.02,linecolor={[rgb]{0.4 0 0}},
   range=0 2 Pi mul,resolution=360,
   function=cercle1
]
\composeSolid
\end{pspicture}
\end{center}

\begin{center}
\begin{pspicture}(-4,-3)(4,4)
\psset{unit=0.4}
\pscustom[linestyle=none]{
\parametricplot[plotpoints=720,algebraic]{0}{6.283185}{%
(5+1.*sin(5*t))*cos(t)|(5+1.*sin(5*t))*sin(t)}
\parametricplot[plotpoints=720,algebraic]{6.283185}{0}{
2*cos(t)|2*sin(t)}
\fill[fillstyle=solid,fillcolor={[hsb]{0.118 1 1}}]
}
\parametricplot[plotpoints=720,algebraic]{0}{6.283185}{%
(5+1.*sin(5*t))*cos(t)|(5+1.*sin(5*t))*sin(t)}
\parametricplot[plotpoints=720,algebraic]{6.283185}{0}{%
2*cos(t)|2*sin(t)}
\end{pspicture}
\begin{pspicture}(-4,-3)(4,3)
\psset{lightsrc=viewpoint,viewpoint=40 70 50 rtp2xyz,Decran=16}
\pstVerb{/iface 0 store
         /BLEU {0.2 0.2 1 setrgbcolor} def}%
\psSolid[object=grille,base=-8 8 -8 8,ngrid=2. 2.,grid,
 fcol=0 16 48 { /i exch def
 0 2 6 {/j exch def
 j i add (cyan)
 j i 1 add add (BLEU)
 } for
 } for
 8 16 56 { /i exch def
 0 2 6 {/j exch def
 j i add (BLEU)
 j i 1 add add (cyan)
 } for
 } for
](0,0,0)
\defFunction[algebraic]{etoile}(t){(5+1.*sin(5*t))*cos(t)}{(5+1.*sin(5*t))*sin(t)}{}
\defFunction[algebraic]{cercle}(t){2*cos(t)}{2*sin(t)}{}
\psset{solidmemory}
\psSolid[object=plan,
   definition=equation,
   args={[0 0 1 0]},
   base=-4 4 -4 4,
   action=none,
   name=planTexte
]
\psProjection[object=texte,
    fontsize=75,linecolor=red,
    plan=planTexte,phi=180,
    text=Stelline](0,-7)%
\psSolid[object=plan,
   definition=equation,
   args={[0 0 1 -1]},
   base=-4 4 -4 4,
   action=none,
   name=monplan
]
\psset{plan=monplan}
\psSolid[object=prisme,h=1,grid,
algebraic,
%ngrid=9,
incolor={[hsb]{0.118 1 1}},
fillcolor={[hsb]{0.118 1 1}},
base=0 1 360 {
/angle ED
5 5 angle mul sin add angle cos mul
5 5 angle mul sin add angle sin mul
} for
360 -1 0 {
/angle ED
2 angle cos mul
2 angle sin mul
} for
](0,0,0)
\psProjection[object=courbeR2,%visibility,
   linewidth=0.02,linecolor={[rgb]{0.4 0 0}},
   range=0 2 Pi mul,resolution=720,
   function=cercle
]
\psProjection[object=courbeR2,%visibility,
   linewidth=0.02,linecolor={[rgb]{0.4 0 0}},
   range=0 2 Pi mul,resolution=720,
   function=etoile
]
\composeSolid
\end{pspicture}
\end{center}
\end{document}
Modifier ainsi pst-solides3d.pro :

/proj-pst-courbeR2 {
   l@pl@n plangetrange aload pop
   setyrange setxrange
%   newpath
%      xmin ymin l@pl@n pointplan smoveto
%      xmin ymax l@pl@n pointplan slineto
%      xmax ymax l@pl@n pointplan slineto
%      xmax ymin l@pl@n pointplan slineto
%      xmin ymin l@pl@n pointplan slineto
%      planprojpst projpath
%   clip
%   solidlinewidth setlinewidth
   newpath
      linecolor
      range aload pop { function cvx exec } CourbeR2_
      gere_pstricks_proj_opt
} def

/proj-pst-courbe {
   l@pl@n plangetrange aload pop
   setyrange setxrange
%   newpath
%      xmin ymin l@pl@n pointplan smoveto
%      xmin ymax l@pl@n pointplan slineto
%      xmax ymax l@pl@n pointplan slineto
%      xmax ymin l@pl@n pointplan slineto
%      xmin ymin l@pl@n pointplan slineto
%      planprojpst projpath
%   clip
   solidlinewidth setlinewidth
   newpath
      linecolor
      range aload pop {} { function cvx exec } Courbeparam_
      gere_pstricks_proj_opt
} def

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} 

Un compas dessiné avec PSTricks par Thomas Söll

Encore une réalisation de Thomas Söll : un vrai travail d'artiste ! Les fichiers (Thomas.Soell/Zirkel.pdf Thomas.Soell/Zirkel.tex) sont dans :


Le listing :

\documentclass{article}
\usepackage{pstricks}
\usepackage{pst-grad}

\begin{document}
\psscalebox{1.5}{%
\begin{pspicture}(1.5,0)(6,7.5)
\def\alf{20}
\rput[br]{\alf}(3.1,8.1){%
\pspolygon[linewidth=0.5pt,fillstyle=gradient,gradangle=90,gradend=cyan!30,gradbegin=black!70,linearc=0.02]%
(-0.12,0)(0.12,0)(0.12,-5.0)(0.08,-5.5)(-0.11,-5.5)(-0.12,-5.1)
\pscircle[linecolor=black!60,linewidth=0.4pt,fillstyle=solid, fillcolor=black!20](0,-5.3){0.14}%
\pspolygon[linewidth=0.3pt](-0.03,-5.5)(0.03,-5.5)(0,-6)
}
\rput[br]{-\alf}(2.9,8.1){%
\pspolygon[linewidth=0.5pt,fillstyle=gradient,gradangle=90,gradend=cyan!30,gradbegin=black!70,linearc=0.02]%
(-0.12,0)(0.12,0)(0.12,-5.0)(0.08,-5.5)(-0.11,-5.5)(-0.12,-5.1)
\pscircle[linecolor=black!60,linewidth=0.4pt,fillstyle=solid, fillcolor=black!20](0,-5.3){0.14}%
\pspolygon[fillstyle=solid,fillcolor=black!90](-0.035,-5.5)(0.035,-5.5)(0.035,-6)(-0.03,-5.8)
}
\psframe[fillstyle=gradient,gradangle=90,gradend=cyan!30,gradbegin=black!70](2.9,8.15)(3.1,8.35)
\pspolygon[fillstyle=gradient,gradangle=90,gradend=gray!30,gradbegin=black!70,linearc=0.04](2.75,8.2)(3.25,8.2)(3.25,7.5)(3.1,7.45)(3.1,7.1)(2.9,7.1)(2.9,7.45)(2.75,7.5)
\pscircle[linecolor=black!80,linewidth=0.4pt,fillstyle=solid, fillcolor=black!80](3,8){0.07}
\psframe[fillstyle=gradient,gradangle=90,gradend=cyan!30,gradbegin=black!70](2.83,8.3)(3.17,9.1)
\psline[linewidth=0.4pt](2.915,8.3)(2.915,9.1)%
\psline[linewidth=0.4pt](3,8.3)(3,9.1)%
\psline[linewidth=0.4pt](3.085,8.3)(3.085,9.1)%
\end{pspicture}
}
\end{document}

Le rapporteur-équerre dessiné avec PSTricks par Thomas Söll

Comme d'habitude Thomas a réalisé un travail très soigné, voici les fichiers  (protrace.pdf protrace.tex) inclus dans:


Vous trouverez d'autres dessins de rapporteurs, plus modestes, réalisés avec PSTricks ici :
http://melusine.eu.org/syracuse/pstricks/rapporteurs/

Ci-dessous le listing :

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[frenchstyle]{kpfonts}
\usepackage{pstricks}
%\usepackage[distiller]{pstricks}
\usepackage{multido}
\def\protrace{%
\psset{unit=1.5,dimen=middle}
\SpecialCoor
%
\scriptsize
\begin{psclip}%
{\pspolygon[linestyle=none,linewidth=0pt,fillstyle=solid,fillcolor=white,opacity=0.3](-4.675,0.125)(4.675,0.125)(0,4.8)}%
\pspolygon[linewidth=0pt,fillstyle=solid,fillcolor=lightgray!30,linestyle=none,opacity=0.4](-5,0)(5,0)(0,5)%
\end{psclip}%
\begin{psclip}%
{\pspolygon[linestyle=none](5,0)(4.85,0)(-0.15,5)(0,5)}%
\multido{\n=1+1}{89}{%
\rput[l]{\n}(!\n\space dup sin exch cos div dup 1 add 5 exch div exch 1 index mul)%
{\psline[linewidth=.25\pslinewidth](0,0)(-.2,0)}%
}%
\end{psclip}%
\begin{psclip}%
{\pspolygon[linestyle=none](-5,0)(-4.85,0)(0.15,5)(0,5)}%
\multido{\n=1+1}{89}{%
\rput[l]{-\n}(!\n\space dup sin exch cos div dup 1 add 5 exch div neg exch 1 index mul neg)%
{\psline[linewidth=.25\pslinewidth](0,0)(.2,0)}%
}%
\end{psclip}%
\multido{\n=5+10}{9}{%
\rput[l]{\n}(!\n\space dup sin exch cos div dup 1 add 5 exch div exch 1 index mul)%
{\psline[linewidth=.5\pslinewidth](0,0)(-.4,0)}%
\rput[l]{-\n}(!\n\space dup sin exch cos div dup 1 add 5 exch div neg exch 1 index mul neg)%
{\psline[linewidth=.5\pslinewidth](0,0)(.4,0)}%
}%
\multido{\n=10+10}{8}{%
\psline(3.15;\n)(!\n\space dup sin exch cos div dup 1 add 5 exch div exch 1 index mul)%
\psline(-3.15;-\n)(!\n\space dup sin exch cos div dup 1 add 5 exch div neg exch 1 index mul neg)%
}%
\multido{\n=6+1}{84}{%
\psline[linewidth=.5\pslinewidth](-2.77;-\n)(-2.7;-\n)%
\psline[linewidth=.5\pslinewidth](2.77;\n)(2.7;\n)%
}%
\multido{\n=5+5}{17}{%
\psline(2.81;\n)(2.7;\n)%
\psline(-2.81;-\n)(-2.7;-\n)%
}
\psline[linestyle=dashed,dash=7pt 4pt](-2.6;-45)(-.5;-45)%
\psline[linestyle=dashed,dash=7pt 4pt](2.6;45)(.5;45)%
%
\pscustom[fillstyle=solid,fillcolor=yellow,linestyle=none,opacity=0.6]{%
\psarc(0,0){2.85}{7}{173}%
\psarcn(0,0){3.15}{173}{7}%
}%
{\multido{\n=10+10}{17}{\rput{0}(3;\n){\n}}}%
\multido{\n=0+1}{8}{\rput{180}(!\n\space 0.625 mul 0.25){\n}}%
\multido{\n=1+1}{7}{\rput{180}(!\n\space 0.625 mul neg 0.25){\n}}%
\multido{\n=-70+1}{141}{\rput{180}(!\n\space 0.0625 mul neg 0){\psline[linewidth=0.5\pslinewidth](0,0)(0,-0.08)}}%
\multido{\n=-14+1}{29}{\rput{180}(!\n\space 0.3125 mul neg 0){\psline(0,0)(0,-0.13)}}%
%
\multido{\n=3+1}{30}{\rput{180}(!0 \n\space 0.0625 mul 0.03 add){%
\psline[linewidth=0.5\pslinewidth](-1.625,0)(-1.5,0)%
\psline[linewidth=0.5\pslinewidth](1.625,0)(1.5,0)%
}}%
%
\begin{psclip}%
{\pscircle[linestyle=none](0,0){2.6}}%
\multido{\n=1+1}{7}{\rput{180}(!0 \n\space 0.3125 mul 0.03 add){%
\psline(-2.6,0)(-1.69,0)%
\psline(2.6,0)(1.69,0)%
\psline(1.625,0)(1.4375,0)%
\psline(-1.625,0)(-1.4375,0)%
\psline(1.1875,0)(0.15,0)%
\psline(-1.1875,0)(-0.15,0)%
}}%
\multido{\n=1+1}{3}{%
\rput{180}(!1.3 \n\space 0.625 mul 0.03 add){\n}%
\rput{180}(!-1.3 \n\space 0.625 mul 0.03 add){\n}%
}%
\end{psclip}%
%
\psline(0.4;90)(2.85;90)%
\psline(3.15;90)(5;90)%
\pspolygon(5,0)(0,5)(-5,0)%
}


\begin{document}
\begin{center}
\begin{pspicture}(-5,0)(5,5)
\protrace
\end{pspicture}
\end{center}

\begin{center}
\begin{pspicture}(-5,0)(5,8)
\rput{30}(0,0){\psscalebox{0.6}{%
\protrace%
}}%
\end{pspicture}
\end{center}

\end{document}

samedi 29 septembre 2012

Un autre exemple d’utilisation de pst-ode en 3D

Ceci ne constitue qu’un exemple d’utilisation conjointe des packages pst-ode, pst-solides3d et animate dans le cas d’une illustration en 3D. Pour cela j’ai pris l’étude de K.E. Papadakis :
http ://dx.doi.org/10.1051/0004-6361 :20041216 
concernant :
« L’étude de l’approximation non linéaire des mouvements périodiques près des points d’équilibre colinéaires dans le cas de la restriction au problème des trois corps, lorsque la vitesse angulaire des primaires n’est pas égale à la valeur du problème classique (qui est l’unité dans les unités usuelles de masse, de longueur et de temps). »
Toutes les relations utiles à la représentation des trajectoires sont tirées du document de K.E. Papadakis auquel on se référera pour les explications éventuellement nécessaires. Ce sont les 3 équations différentielles qui nous intéressent, ainsi que les conditions initiales du mouvement.
L'animation est incluse dans le fichier 3d-three-body.pdf :
Le fichier source et le  pdf sont dans le répertoire 3D-Three-Body de dossier :
ci-dessous lien peu sûr :
http://manuel.luque.perso.neuf.fr/gravitation/3D-Three-Body/:

30 septembre 2012 : version 2
Pour cette version les fichiers 3d-three-body_v2.pdf et 3d-three-body_v2.tex sont dans le répertoire précédent.

mercredi 26 septembre 2012

Les pâtes alimentaires façon PSTricks - 3 : Mezzi Rigatoni et Penne

La modélisation des différentes formes de pâtes alimentaires par Sander Huisman, à l’aide du logiciel Mathematica : http://shuisman.com/?p=1314 révèle à la fois l’imagination de Sander et la puissance de calcul du logiciel. Je continue à explorer la possibilité de PSTricks à réaliser des modélisations analogues dans le cas où on tient compte de l’épaisseur de la pâte et de son relief, comme dans le cas des Mezzi Rigatoni et des Penne. Le package pst-solides3d possède les options nécessaires à ce travail, ou tout au moins permet d’obtenir un modèle convenable.
Il faut utiliser l’objet prisme \psSolid[object=prisme et d’abord définir sa base. Un cercle ondulé de diverses façons fera l’affaire. J’ai retenu ces deux modèles, qu’on pourra prendre de forme circulaire ou elliptique suivant le type de pâte.





Les Mezzi Rigatoni :

Les Penne :

Les fichiers concernant les penne sont sans le répertoire

Le détail des calculs est expliqué dans e document "pennes_01.pdf" dont le source est inclus.




vendredi 21 septembre 2012

Les pâtes alimentaires façon PSTricks - 2

Toujours dans la suite des belles recettes de pâtes italiennes élaborées par le chef 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 Gemellis, une modélisation des Cellentanis, que Lustucru appelle simplement Tortillettes. C’est un tuyau enroulé en hélice et peint aux couleurs des pâtes aux oeufs frais.
Il y a deux façons de traiter ce problème : l’une est d’utiliser l’objet [courbe] en donnant un rayon convenable au tube et en supprimant les 2 faces extrêmes du tube et l’autre l’objet [surfaceparametree], commande ParametricPlot3D dans Mathematica. La différence réside dans les équations qui dans le premier cas sont très simples et plus compliquées dans le second. Il faut noter qu’il est préférable de donner les dérivées dans le premier cas. L’exemple des hélices images l’une de l’autre dans un miroir :
http://melusine.eu.org/syracuse/pstricks/pst-solides3d/animations/a61/
utilisait la première méthode.
Le deuxième dessin représente l’hélice avec les deux cercles qui sont les faces d’entrée et de sortie du tube.
L'animation a été réalisée à partir des images calculées avec le fichier :
 Le fcihier : pates/cellentani/cellentani-img.tex a été inclus dans le répertoire indiqué ci-dessus.

Les caractéristiques du solide avaient été préalablement sauvées dans un fichier avec les lignes de code suivantes :
%\psSolid[object=courbe,
%        ngrid=200 36,
%        r=0.5,
%        range=0 5 Pi mul,
%        function=P,hollow,
%        file=cellentani,
%        action=writesolid,
%        grid,
%        incolor={[hsb]{0.118 1 1}},fillcolor={[hsb]{0.118 1 1}},
%        rm=0 1
%        ]%

Les fichiers :

dimanche 16 septembre 2012

Suite n◦2 de : “3 corps animés d’un mouvement périodique sur une trajectoire en forme de huit” avec les mouvements relatifs de deux corps par rapport au troisième calculés avec pst-ode 0.2 et animés avec pst-animate

La version ‘pst-ode 0.2' permet de manipuler et de combiner toutes les variables du problème étudié (positions et vitesses) et de sauvegarder les résultats, éventuellement, dans un fichier. Sa particularité par rapport aux options : [plotfuncx]  et [plotfuncy] de la macro \psplotDiffEqn du package pstricks-add est que tous les calculs peuvent se faire de façon algébrique avec l’option : [algebraicOutputFormat]. Cette possibilité est bien utile pour représenter, par exemple, les mouvements relatifs des corps.
Ainsi, pour calculer les positions relatives des corps (2) et (1) par rapport au corps (0) :

% 0 1 2 3 4 5 6 7 8 9 10 11
% y[0]  y[1]  y[2]  y[3]  y[4]  y[5]  y[6]  y[7]  y[8] y[9]  y[10]  y[11]
%  x0    y0    x’0   y’0    x1    y1    x’1    y’1    x2    y2    x’2    y’2
\def\positionsrelatives{%
y[8]-y[0]|% x2-x0
y[9]-y[1]|% y2-y0
y[4]-y[0]|% x1-x0
y[5]-y[1]% y1-x0
}%
on écrira :
\pstODEsolve[algebraic,
                      saveData=true,
                      algebraicOutputFormat]%
                     {all}{\positionsrelatives}{0}{6.32591398}{192}{\InitCond}{\GravAlgIIIcorps}


Les fichiers :
http://manuel.luque.perso.neuf.fr/pst-ode/

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 :

lundi 10 septembre 2012

Suite de : “3 corps animés d’un mouvement périodique sur une trajectoire en forme de huit” avec les mouvements relatifs de deux corps par rapport au troisième calculés avec pst-ode et animés avec pst-animate

Je rappelle que ‘pst-ode’ qui permet la résolution numérique des équations différentielles ordinaires, utilise la
méthode Runge-Kutta-Fehlberg (ode45) laquelle est une version améliorée de la méthode classique de Runge-Kutta.
Par rapport à la version développée de Dominique Rodriguez qui est incluse dans le package pstricks-add et celle réalisée à partir de cette dernière, que j’ai modifiée pour permettre d’enregistrer dans un fichier ou dans une variable les résultats : pst-eqdf, celle d’Alexander, même si la méthode utilisée est plus performante, ne possède pas les options : plotfuncx et plotfuncy qui permettent de manipuler et de combiner toutes les variables du problème étudié (positions et vitesses).
C’est une option bien utile pour représenter, par exemple, les mouvements relatifs des corps. Il existe cependant une solution permettant de remédier à ce manque.
Cette solution est décrite dans le fichier à télécharger après les images.
Une image de l'animation au format pdf, réalisé avec pst-animate.
Les fichiers 8_mouvements_relatifs.tex et 8_mouvements_relatifs.pdf sont dans le sous-répertoire Ncorps du répertoire :

  Les liens ci-dessous sont peut-être inaccessibles :
http://manuel.luque.perso.neuf.fr/gravitation/Ncorps/8_mouvements_relatifs.pdf
http://manuel.luque.perso.neuf.fr/gravitation/Ncorps/8_mouvements_relatifs.tex

samedi 8 septembre 2012

pst-animate : 9 corps orbitant sur une trajectoire en forme de fleur à 8 pétales

Dans un récent post :
http://pstricks.blogspot.fr/2012/08/pst-ode-et-3-corps-animes-dun-mouvement.html
j'affirmai que "ces chorégraphies peuvent, par ailleurs, être très simplement animées avec pst-animate". Voici l'exemple de 9 astres orbitant sur une trajectoire en forme de "marguerite à 8 pétales". Les données sont récupérées dans la page de Carles Simó, exemple n°30 : 'Nine bodies on a daisy' :
 http://www.maia.ub.es/dsg/nbody.html 
Une image de l'animation:
 Je rappelle que Jean-Michel Sarlat a réalisé de magnifiques animations au format flash, très fluides, de ces chorégraphies, d’après les données calculées par Carles Simó :
 http://melusine.eu.org/syracuse/swf/1-nbody/

Les fichiers sont dans le sous-répertoire  Ncorps de :







vendredi 7 septembre 2012

L’option blendmode de PSTricks pour réaliser une oeuvre d’art

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{multido,pst-node}
\newpsstyle{blendmode4}{fillstyle=shape,blendmode=4,shapealpha=1,linestyle=none}
\newpsstyle{blendmode5}{fillstyle=shape,blendmode=5,shapealpha=1,linestyle=none}
\newpsstyle{blendmode6}{fillstyle=shape,blendmode=6,shapealpha=1,linestyle=none}
\newpsstyle{blendmode7}{fillstyle=shape,blendmode=7,shapealpha=1,linestyle=none}
\newpsstyle{blendmode3}{fillstyle=shape,blendmode=3,shapealpha=1,linestyle=none}
\makeatletter
\pst@def{setBlendmode}<
    \ifcase\psk@blendmode
      /Normal \or
      /Compatible \or
      /Screen \or
      /Multiply \or
      /HardLight \or
      /Darken \or
      /Lighten \or
      /Difference
    \else
      /Normal
    \fi
    .setblendmode \psk@shapealpha .setshapealpha >
\makeatother
\makeatletter
\def\psStain{\def\pst@par{}\pst@object{psStain}}%
\def\psStain@i(#1,#2){%
  \pst@killglue%
  \begingroup%
  \use@par%
\pstVerb{rrand srand                 % initializes the random generator
         /getRandReal1 {rand 2147483647 div 4 add} def
         /getRandReal2 {rand 2147483647 div 1 add} def
         /getRandReal3 {rand 2147483647 div 360 mul} def
         /getRandRealx {rand 2147483647 div 5 mul} def
         /getRandRealy {rand 2147483647 div 5 mul} def
         /getRandRealr {rand 2147483647 div 0.25 mul} def
         /rotation getRandReal3 def}%
\edef\collectePoints{}%inspiré et adapté de D.Rodriguez dans pst-eucl
\multido{\n=22.5+45.0,\N=0.0+45.0,\iP=0+2,\iQ=1+2}{8}{%
        \pstVerb{/radius1 getRandReal1 def
                 /radius2 getRandReal2 def}%
        \pnode(!radius1 \N\space rotation add PtoC #2 add exch #1 add exch){M\iP}%
        \xdef\collectePoints{\collectePoints(M\iP)}%
        \pnode(!radius2 \n\space rotation add PtoC #2 add exch #1 add exch){M\iQ}%
        \xdef\collectePoints{\collectePoints(M\iQ)}%
        }%
\multido{\i=0+1}{5}{%
        \pstVerb{%
                 /X1 getRandRealx def
                 /Y1 getRandRealy def
                 /R1 getRandRealr def
                 /X2 getRandRealx neg def
                 /Y2 getRandRealy def
                 /R2 getRandRealr def
                 /X3 getRandRealx neg def
                 /Y3 getRandRealy neg def
                 /R3 getRandRealr def
                 /X4 getRandRealx  def
                 /Y4 getRandRealy neg def
                 /R4 getRandRealr def}%
       \pscircle(!X1 Y1){!R1}
       \pscircle(!X2 Y2){!R2}
       \pscircle(!X3 Y3){!R3}
       \pscircle(!X4 Y4){!R4}
        }%
\expandafter\psccurve\collectePoints%
  \endgroup%
  \ignorespaces%
}
\makeatother
\title{L'option \textsf{blendmode} de PSTricks pour réaliser une \oe uvre d'art}
\date{7 septembre 2012}
\begin{document}
\maketitle
\begin{center}
 \begin{pspicture}(-6,-6)(6,6)
    \psgrid[subgriddiv=0,gridcolor=lightgray,griddots=10,gridlabels=0pt]%
    \psStain[style=blendmode3,fillcolor=yellow](-1,-1)
    \psStain[style=blendmode3,fillcolor=cyan](1,-1)
    \psStain[style=blendmode3,fillcolor=magenta](0,1)
 \end{pspicture}
\end{center}
\end{document}

samedi 1 septembre 2012

L’option blendmode=/Lighten de PSTricks et l’horloge RGB

Certains modes de fusion (blendmode), prévus par Adobe, n’ont pas été implantés dans PSTricks, cependant il est possible d’en rajouter quelques autres comme :
  • /HardLight
  • /Darken
  • /Lighten
 Ce dernier est particulièrement intéressant pour simuler la synthèse additive des couleurs et il complète ainsi le mode /Multiply qui est celui permettant d’illustrer la synthèse soustractive, voir le précédent article :
http://pstricks.blogspot.fr/2012/08/loption-bendmodemultiply-de-pstricks-et.html
Les fichiers :