mercredi 28 décembre 2016

2016->2017


L'animation a été réalisée avec le package pst-crayon. La dernière version du package est ici :
C'est l'adaptation de l'animation de l'année dernière :
Le listing pour obtenir les images dans un pdf,  qui serviront à la création du gif (à compiler par LaTeX->dvips->ps2pdf) sont dans le dossier  :

mardi 20 décembre 2016

Représentation des coquillages avec PSTricks

 Le package pst-shell a été mis en ligne sur le serveur du CTAN par Herbert Voss qui y a apporté un certain nombre de modifications. Quelques exemples ci-dessous se retrouvent dans la nouvelle documentation, mais pour les autres comme ceux du fichier Nautilius, il faudra, si ces exemples vous intéressent, les adapter vous-même à la nouvelle syntaxe.

 
La modélisation géométrique des coquillages a été réalisée par M. B. Cortie. Dans le document “DIGITAL SEASHELLS” il en donne les équations paramétriques lesquelles sont fonction de 14 paramètres, ceci afin de permettre de modéliser un très grand nombre de coquillages.
La démonstration de ces équations est proposée par Jorge Picado, elle est très complète et joliment illustrée :
Jorge Picado rajoute le paramètre D = ±1 permettant ainsi la représentation des coquillages senestre et dextre. Jorge Picado propose un code pour Mathematica, que je n’ai pas pu tester, cependant les images qui illustrent sa page accompagnées des paramètres d’un grand nombre de coquillages sont très démonstratives.
Sur le site de l’American Mathematical Society, Tony Phillips et Stony Brook traitent aussi de la modélisation de divers coquillages avec le code pour une concrétisation avec Maple.
Le package ‘pst-shells’ permet de représenter les coquillages avec PSTricks, c’est donc une adaptation des équations établies par M. B. Cortie. Les paramètres utilisés sont identiques à ceux des documents de M. B. Cortie et Jorge Picado. On se référera donc à ces 2 auteurs pour en connaître la signification. On n’aura pas avec PSTricks la rapidité d’affichage de Mathematica et Maple, ni la qualité de lissage des surfaces possible avec ces logiciels ou POV-Ray, mais sur certains exemples, grâce aux options de pst-solides3d, on peut obtenir des représentations personnalisées que je suppose être beaucoup plus difficiles à réaliser avec Maple ou Mathematica, c’est un point qui sera développé avec comme sujet le Nautilius dans un autre fichier.

Le package, la documentation et les variations sur le nautile sont dans le dossier :


Voici quelques images extraites des 2 documents, obtenues avec le package :



jeudi 15 décembre 2016

Surfaces implicites avec PSTricks (suite)

Grâce à la collaboration d'Herbert Voss, la commande \psImplicitSurface[options]  est désormais intégrée au package pst-solides3d. De plus, elle a été améliorée par Herbert sur deux points :
  • mode algebraic ou postscript ;
  • limites des variables définies directement dans les options.
 Les exemples traités avec l'ancienne commande devront donc être adaptés. La mise à jour de pst-solides3d est disponible sur :


version 2 :

Le listing pour obtenir toutes les  images. La compilation (LaTeX=>dvips=>ps2pdf) est très longue : plus de 1 h !

\documentclass{article}
\usepackage[paperwidth=16cm,paperheight=11cm,hmargin={0cm,0cm},vmargin={0cm,0cm},dvips]{geometry}
\usepackage{pst-solides3d}
\pagestyle{empty}
\begin{document}
\begin{center}
\psset{unit=1}%
\multido{\iZ=0+8}{15}{%
\begin{pspicture}(-8,-7)(8,4)
\psframe[fillstyle=hlines,hatchangle=0](-8,-7)(8,4)
\pstVerb{/GREEN {0 0.7 0 setrgbcolor} def}%
\psset{lightsrc=100 30 60 rtp2xyz,viewpoint=100 60 35 rtp2xyz,Decran=150}
\psSolid[object=grille,base=-5 5 -5 5,ngrid=1. 1.,unit=0.75,
 fcol=0 20 80 { /i exch def
 0 2 8 {/j exch def
 j i add (white)
 j i 1 add add (GREEN)
 } for
 } for
 10 20 90 { /i exch def
 0 2 8 {/j exch def
 j i add (GREEN)
 j i 1 add add (white)
 } for
 } for
](0,0,-2)
\pstVerb{
/R 1 def
/r 0.25 def
/torusImplicit {
X dup mul Y dup mul add z dup mul add dup mul
-2 R dup mul r dup mul add mul X dup mul Y dup mul add mul
add
2 R dup mul r dup mul sub mul z dup mul mul
add
R dup mul r dup mul sub add
} def
/tripleTorus {
0 120 240 {/i exch def
 /X {x 1.5 i cos mul sub} def
 /Y {y 1.5 i sin mul sub} def
 torusImplicit
 } for
 mul mul
10 sub
} def}%
\pstVerb{
100 0 90 rtp2xyz
/zV exch def
/yV exch def
/xV exch def
/hZ 0 def
/Hshadow {
5 dict begin
/z exch def
/y exch def
/x exch def
/lambda hZ zV sub z zV sub div def
    xV lambda x xV sub mul add % x
    yV lambda y yV sub mul add % y
    -1.5 % z
end
 } def }%
{\psset{lightsrc=}
\psImplicitSurface[ImplFunction=tripleTorus,
                   fillcolor={[rgb]{0 0.4 0}},linecolor={[rgb]{0 0.4 0}},
                   RotZ=\iZ,linewidth=0,
                   transform=Hshadow,opacity=0.8,
                   XMinMax=-3 3 0.1,YMinMax=-3 3 0.1,ZMinMax=-0.5 0.5 0.1]}%
\psImplicitSurface[ImplFunction=tripleTorus,linewidth=0,
                   hue=1 0 1 1,RotZ=\iZ,
                   lightintensity=5,
                   XMinMax=-3 3 0.1,YMinMax=-3 3 0.1,ZMinMax=-0.5 0.5 0.1]
\psSolid[object=vecteur,
        definition={[.1 .5]},  %% radius height
        linecolor=black,
        args=0 0 2](0, 0, 0.25)
\end{pspicture}\newpage}
\end{center}
\end{document}

\documentclass{article}
\usepackage{pst-solides3d}
\begin{document}
\begin{center}
\begin{pspicture}(-4,-4)(4,4)
\psset{lightsrc=viewpoint,viewpoint=50 -20 30 rtp2xyz,Decran=50}
\psSolid[object=grille,base=-3 3 -3 3,ngrid=6 6,
 fcol=0 12 24 { /i exch def
 0 2 4 {/j exch def
 j i add (white)
 j i 1 add add (red)
 } for
 } for
 6 12 30 { /i exch def
 0 2 4 {/j exch def
 j i add (red)
 j i 1 add add (white)
 } for
 } for](0,0,-2)
\pstVerb{
/r 2 sqrt def
/r1 r 2 div def
/z1 r 1.5 mul 60 cos mul def
/z2 z1 def
/y1 r 1.5 mul 60 sin mul neg def
/y2 r 1.5 mul 60 sin mul def
/iface 0 store
/nbFaces {Faces length} def
}%
\psImplicitSurface[algebraic,ImplFunction=(x^2+y^2+z^2-2)*(x^2+(y-y1)^2+(z-z1)^2-r1^2)*(x^2+(y-y2)^2+(z-z2)^2-r1^2)-2,
                   XMinMax=-4 4 0.2,YMinMax=-4 4 0.2,ZMinMax=-4 4 0.2,
                   hue=1 0 0.5 1,
                   linewidth=0.01,linecolor={[rgb]{0 0 0.5}}]%
\gridIIID[Zmin=-2,Zmax=2,showAxes=false](-3,3)(-3,3)%
\end{pspicture}
\end{center}
\end{document}

vendredi 9 décembre 2016

Un modèle mathématique pour représenter les ammonites avec PSTricks, POV-Ray et Maple

La documentation au format pdf et le fichier source à compiler par la procédure habituelle :
LaTeX => DVIPS => ps2pdf sont ici :
 Tous les fichiers avec les méthodes POV-Ray et Maple ainsi que des versions PSTricks un peu plus étendues sont dans l'archive :
 D'abord, quelques images extraites de la documentation, réalisées avec PSTricks(comme l'image initiale) :
Modèle simplifié
Modèle plus élaboré comprenant les côtes de l'ammonite.

Ammonite avec enroulement serré.

Ammonite avec enroulement lâche.

Un maillage en fil de fer :

 Dont voici le code :

 \documentclass{article}
\usepackage{geometry}
\usepackage{pst-solides3d,pst-math}
%\title{Un modèle mathématique pour les ammonites}
%\date{8 décembre 2016}
%\author{manuel.luque27@gmail.com}
\begin{document}
\begin{center}
\begin{pspicture}(-6.5,-4)(5,5)
  \psset{viewpoint=100 120 60 rtp2xyz,Decran=100,lightsrc=20 60 10 rtp2xyz,solidmemory}%
\pstVerb{/Div {div} def
         /NT 20.5 def    % nbre d'ondulations
         /alpha 83 DegToRad def
         /ri 1.5 def
         /Am ri PI 1 alpha TAN div mul TANH div def
         /Euler 2.71828182846 def
         }%
\defFunction[algebraic]{ammonite}(u,v)
  {(Am+(ri+0.2*cos(NT*u))*cos(v))*cos(u)*Euler^(u/tan(alpha))}
  {(Am+(ri+0.2*cos(NT*u))*cos(v))*sin(u)*Euler^(u/tan(alpha))}
  {ri*sin(v)*Euler^(u/tan(alpha))}
\psSolid[object=surfaceparametree,unit=1,
  base=pi -10 mul 0 0  2 pi mul,
  fillcolor=gray!20,incolor=gray!20,opacity=0.5,
  function=ammonite,ngrid=720 36,linewidth=0.01,grid]%
\end{pspicture}
\end{center}
\end{document}

Les modèles obtenus avec Maple :
> restart : with(plots):
> N := 20.5: alpha := 1.4486; r := 1: A := r/tanh(Pi/tan(alpha));
> plot3d([(A+(r+.1*cos(N*u))*cos(v))*exp(u/tan(alpha))*cos(u), (A+(r+.1*cos(N*u))*cos(v))*exp(u/tan(alpha))*sin(u), r*sin(v)*exp(u/tan(alpha))], u = -10*Pi .. 0, v = -Pi .. Pi, grid = [720, 60], scaling = constrained, style = surface, color = "Chocolate");


> A := r/tanh(Pi/tan(alpha))-1;
> plot3d([(A+(r+.1*cos(N*u))*cos(v))*exp(u/tan(alpha))*cos(u), (A+(r+.1*cos(N*u))*cos(v))*exp(u/tan(alpha))*sin(u), r*sin(v)*exp(u/tan(alpha))], u = -10*Pi .. 0, v = -Pi .. Pi, grid = [720, 60], scaling = constrained, style = surface, color = "Gray");



Les modèles réalisés avec POV-Ray. Les textures sable sont de Friedrich A. Lohmüller :


Les fichiers sources sont dans l'archive indiquée au début.