samedi 20 octobre 2018

Le papier marbré avec PSTricks : nouvelle version

Aubrey Jaffer a amélioré le modèle illustré dans la version précédente de pst-marble :

Plus proche de la réalité, et plus cohérente dans le choix des unités, cette version permet de réaliser des simulations plus fidèles grâce à l'ajout de nouveaux paramètres.
Malheureusement, pour ceux qui ont déjà utilisé la première version, celle-ci est incompatible avec la précédente, mais nous avons repris la plupart des illustrations de l'ancienne version en les adaptant.
Cette nouvelle version est disponible sur le serveur du ctan :


J'ai placé une copie de cette version avec quelques exemples ici (le fichier zippé les contient tous) :


Il s'agit d'une adaptation à PSTricks des travaux de Aubrey Jaffer, réalisée conjointement par Jürgen Gilg et Manuel Luque avec l'autorisation et l'aide de Aubrey Jaffer. Sur son site vous trouverez de nombreux documents et liens développant les études théoriques.


Au départ dans une cuve remplie d'un liquide, il y a les gouttes de couleurs que l'artisan projette avec un pinceau sur la surface(un peu au hasard même si on peut les localiser sur une région donnée)
et dont la taille dépend du pinceau. Il effectue plusieurs fois l'opération avec d'autres couleurs et aussi des pinceaux de taille différente. Ensuite avec un stylet l'artisan peut tracer des lignes, des cercles, des ondulations, des effets de tourbillons. En fonction de la vitesse, de la viscosité du milieu, de la distance au stylet et du diamètre du stylet, les gouttes subissent des déformations qui vont créer les marbrures. L'artisan dépose alors une feuille de papier sur la surface pour obtenir le papier marbré. Au lieu d'un stylet, il peut se servir d'un peigne avec un nombre de dents variable pour effectuer les mêmes opérations qu'avec le stylet. À chaque action, l'état de la surface est mémorisé. On peut ainsi modifier le dessin en déposant de nouvelles gouttes et en exécutant ensuite d'autres actions.

C'est en appliquant les lois de la mécanique des fluides qu'Aubrey Jaffer et d'autres informaticiens ont tenté de modéliser la formation des marbrures.

Par exemple, le dessin final sera obtenu au bout de 8 étapes :
Étape 1 : répartissons au hasard 200 gouttes de rayons variables à la surface du liquide.
Voici le code cette opération :

\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub 
      rand 1000 mod 500 sub 
      rand 40 mod 10 add    
      background [0.275 0.569 0.796] /drop]
    } repeat
   }](10,10)

Étape 2 : traçons avec le stylet 2 traits pour diviser la surface en quadrants

\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub 
      rand 1000 mod 500 sub 
      rand 40 mod 10 add    
      background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
   }](10,10)
\end{pspicture}
Étape 3 : saupoudrons les 4 quadrants avec des gouttes(50)  plus petites et de couleurs différentes :

\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub   
      rand 1000 mod 500 sub  
     rand 40 mod 10 add     
    background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {  [ rand 500 mod   % 0       rand 500 mod   % 0      rand 30 mod 10 add     %   10      background [0.316 0.362 0.298] /drop]
      } repeat
   }](10,10)
\end{pspicture}

\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub
      rand 1000 mod 700 sub  
      rand 40 mod 10 add     
      background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {
      [rand 500 mod   

       rand 500 mod   
      rand 30 mod 10 add 
      background [0.316 0.362 0.298] /drop]
      } repeat
% quadrant 2
   50 {
      [rand 500 mod neg 

       rand 500 mod   
       rand 30 mod 10 add     
       background [0.200 0.050 0.015]  /drop]
      } repeat
   }](10,10)
\end{pspicture}


\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub
     rand 1000 mod 500 sub  
     rand 40 mod 10 add     
     background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {
      [rand 500 mod

       rand 500 mod 
       rand 30 mod 10 add   
       background [0.316 0.362 0.298] /drop]
      } repeat
% quadrant 2
   50 {
      [rand 500 mod neg 

       rand 500 mod  
       rand 30 mod 10 add 
       background [0.200 0.050 0.015]  /drop]
      } repeat
% quadrant 3
   50 {
      [rand 500 mod neg 

       rand 500 mod neg
       rand 30 mod 10 add
       background [0.023 0.145 0.451]  /drop]
      } repeat
   }](10,10)
\end{pspicture}


\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub
      rand 1000 mod 500 sub
     rand 40 mod 10 add
    background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {
      [rand 500 mod

       rand 500 mod
       rand 30 mod 10 add 
       background [0.316 0.362 0.298] /drop]
      } repeat
% quadrant 2
   50 {
      [rand 500 mod neg   

       rand 500 mod 
       rand 30 mod 10 add
       background [0.200 0.050 0.015]  /drop]
      } repeat
% quadrant 3
   50 {
      [rand 500 mod neg

       rand 500 mod neg 
       rand 30 mod 10 add 
       background [0.023 0.145 0.451]  /drop]
      } repeat
% quadrant 4
   50 {
      [rand 500 mo

       rand 500 mod neg
       rand 30 mod 10 add
      background [0.866 0.353 0.050]  /drop]
      } repeat
   }](10,10)
\end{pspicture}


Étape 7 : avec un stylet décrivons dans le liquide un arc de cercle de 60° de centre en O et de rayon 200 mm :





\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub
      rand 1000 mod 500 sub 
      rand 40 mod 10 add 
     background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {
      [rand 500 mod 

       rand 500 mod 
       rand 30 mod 10 add 
      background [0.316 0.362 0.298] /drop]
      } repeat
% quadrant 2
   50 {
      [rand 500 mod neg 

       rand 500 mod 
      rand 30 mod 10 add
      background [0.200 0.050 0.015]  /drop]
      } repeat
% quadrant 3
   50 {
      [rand 500 mod neg

       rand 500 mod neg 
       rand 30 mod 10 add 
       background [0.023 0.145 0.451]  /drop]
      } repeat
% quadrant 4
   50 {
      [rand 500 mod

      rand 500 mod neg
      rand 30 mod 10 add 
      background [0.866 0.353 0.050]  /drop]
      } repeat
 [ 0 0 [ 200 ] 10 -60 30 /stir ]
   }](10,10)
\end{pspicture}



Étape FiNALE :  même opération que précédemment mais avec un rayon plus grand et en tournant dans l'autre sens :



\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub
      rand 1000 mod 500 sub
      rand 40 mod 10 add
     background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {
      [rand 500 mod
       rand 500 mod
       rand 30 mod 10 add
      background [0.316 0.362 0.298] /drop]
      } repeat
% quadrant 2
   50 {
      [rand 500 mod neg
       rand 500 mod
      rand 30 mod 10 add
      background [0.200 0.050 0.015]  /drop]
      } repeat
% quadrant 3
   50 {
      [rand 500 mod neg
       rand 500 mod neg
       rand 30 mod 10 add
       background [0.023 0.145 0.451]  /drop]
      } repeat
% quadrant 4
   50 {
      [rand 500 mod
      rand 500 mod neg
      rand 30 mod 10 add
      background [0.866 0.353 0.050]  /drop]
      } repeat
 [ 0 0 [ 200 ] 10 -60 30 /stir ]
 [ 0 0 [ 400 ] 10 60 30 /stir ]
   }](10,10)
\end{pspicture}


Listing complet :

\documentclass[pstricks]{standalone}
\usepackage{pst-marble}
\begin{document}
% répartissons au hasard 200 gouttes de rayons variables à la surface du liquide
\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub 
      rand 1000 mod 500 sub 
      rand 40 mod 10 add    
      background [0.275 0.569 0.796] /drop]
    } repeat
   }](10,10)
\end{pspicture}
% traçons avec le stylet 2 traits pour diviser la surface en quadrants
\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub 
      rand 1000 mod 500 sub
      rand 40 mod 10 add    
      background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
   }](10,10)
\end{pspicture}

% saupoudrons les 4 quadrants avec des gouttes(50)  plus petites et de couleurs différentes
\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub 
      rand 1000 mod 500 sub 
      rand 40 mod 10 add    
      background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {  [ rand 500 mod  
       rand 500 mod  
      rand 30 mod 10 add   
      background [0.316 0.362 0.298] /drop]
      } repeat
   }](10,10)
\end{pspicture}

\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub 
      rand 1000 mod 500 sub 
      rand 40 mod 10 add    
      background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {
      [rand 500 mod   0
       rand 500 mod  
       rand 30 mod 10 add    
       background [0.316 0.362 0.298] /drop]
      } repeat
% quadrant 2
   50 {
      [rand 500 mod neg
       rand 500 mod  
       rand 30 mod 10 add    
       background [0.200 0.050 0.015]  /drop]
      } repeat
   }](10,10)
\end{pspicture}

\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub 
      rand 1000 mod 500 sub 
      rand 40 mod 10 add    
      background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {
      [rand 500 mod  
       rand 500 mod  
       rand 30 mod 10 add    
       background [0.316 0.362 0.298] /drop]
      } repeat
% quadrant 2
   50 {
      [rand 500 mod neg
       rand 500 mod  
       rand 30 mod 10 add    
       background [0.200 0.050 0.015]  /drop]
      } repeat
% quadrant 3
   50 {
      [rand 500 mod neg
       rand 500 mod neg 
       rand 30 mod 10 add    
       background [0.023 0.145 0.451]  /drop]
      } repeat
   }](10,10)
\end{pspicture}

\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub
      rand 1000 mod 500 sub 
      rand 40 mod 10 add   
      background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {
      [rand 500 mod  
       rand 500 mod  
       rand 30 mod 10 add    
       background [0.316 0.362 0.298] /drop]
      } repeat
% quadrant 2
   50 {
      [rand 500 mod neg
       rand 500 mod 
       rand 30 mod 10 add    
       background [0.200 0.050 0.015]  /drop]
      } repeat
% quadrant 3
   50 {
      [rand 500 mod neg
       rand 500 mod neg 
       rand 30 mod 10 add    
       background [0.023 0.145 0.451]  /drop]
      } repeat
% quadrant 4
   50 {
      [rand 500 mod 
       rand 500 mod neg 
       rand 30 mod 10 add   
       background [0.866 0.353 0.050]  /drop]
      } repeat
   }](10,10)
\end{pspicture}

% puis avec un stylet tournant le liquide avec le centre en o ET un rayon de 200 mm
\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub 
      rand 1000 mod 500 sub 
      rand 40 mod 10 add    
      background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {
      [rand 500 mod  
       rand 500 mod  
       rand 30 mod 10 add   
       background [0.316 0.362 0.298] /drop]
      } repeat
% quadrant 2
   50 {
      [rand 500 mod neg
       rand 500 mod  
       rand 30 mod 10 add    
       background [0.200 0.050 0.015]  /drop]
      } repeat
% quadrant 3
   50 {
      [rand 500 mod neg
       rand 500 mod neg 
       rand 30 mod 10 add    
       background [0.023 0.145 0.451]  /drop]
      } repeat
% quadrant 4
   50 {
      [rand 500 mod
       rand 500 mod neg
       rand 30 mod 10 add   
       background [0.866 0.353 0.050]  /drop]
      } repeat
 [ 0 0 [ 200 ] 10 -60 30 /stir ]
   }](10,10)
\end{pspicture}

% recommençons à tourner avec un rayon plus grand et dans l'autre sens
\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,background=1 1 0.9,
    actions={
    200{
     [rand 1000 mod 500 sub
      rand 1000 mod 500 sub 
      rand 40 mod 10 add    
      background [0.275 0.569 0.796] /drop]
    } repeat
[  0 [0] 50 -100 30 /rake]
[ 90 [0] 50 100 30 /rake]
% quadrant 1
   50 {
      [rand 500 mod  
       rand 500 mod  
       rand 30 mod 10 add   
       background [0.316 0.362 0.298] /drop]
      } repeat
% quadrant 2
   50 {
      [rand 500 mod neg
       rand 500 mod  
       rand 30 mod 10 add    
       background [0.200 0.050 0.015]  /drop]
      } repeat
% quadrant 3
   50 {
      [rand 500 mod neg
       rand 500 mod neg  %
       rand 30 mod 10 add    
       background [0.023 0.145 0.451]  /drop]
      } repeat
% quadrant 4
   50 {
      [rand 500 mod 
       rand 500 mod neg 
       rand 30 mod 10 add  
       background [0.866 0.353 0.050]  /drop]
      } repeat
 [ 0 0 [ 200 ] 10 -60 30 /stir ]
 [ 0 0 [ 400 ] 10 60 30 /stir ]
   }](10,10)
\end{pspicture}
\end{document}


 La documentation étant incluse dans le package, je me contente de donner ci-dessous quelques images extraites de celle-ci:


\documentclass[pstricks]{standalone}
\usepackage{pst-marble}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
\psMarble[
    colors={
     [0.22 0.27 0.4]
     [0.49 0.75 0.79]
     [0.9 0.8 0.47]
     [0.98 0.27 0.317]
          },
     actions={
     0  0   50         8        concentric-bands
    [ 90 [ -400 200 600 {} for ] 40 200 31 /rake]
    [-90 [ -500 200 600 {} for ] 40 200 31 /rake]
    [ 45 {2.5 mul sin 50 mul} /wiggle]
    }](10,10)
\end{pspicture}
\end{document}




La compilation d'un exemple s'effectuera avec la procédure habituelle :
LaTeX->dvips->ps2pdf



Aucun commentaire:

Enregistrer un commentaire