samedi 8 décembre 2018

Lignes nodales d’une membrane carrée vibrante (2)

Suite de : http://pstricks.blogspot.com/2018/12/lignes-nodales-dune-membrane-carree.html

Henri Bouasse dans le chapitre XII intitulé ``Membranes planes''  du livre ``Cordes et Membranes'' paru en 1926 à la librairie Delagrave à Paris, cite les expériences de Bourget et Bernard, en voici un résumé :
« Les membranes sont collées sur des cadres qui doivent résister à la tension sans se déformer : le bois convient. La membrane est en papier. On la plonge dans l'eau, puis on la met entre les feuilles d'une main de papier buvard pour enlever l'excèdent d'eau.
n enduit de colle les bords du cadre qu'on applique sur la membrane étendue sur une table [...] Il faut laisser sécher lentement pour que le papier n'éprouve pas un retrait rapide sur la colle encore fluide.
On tient le cadre à la main au-dessus du tuyau, assez loin pour ne pas altérer le son, assez près pour que l'ébranlement soit intense. Le mouvement de la membrane est décelé par celui du sable fin, sec et tamisé, répandu uniformément sur la membrane. »
La commande \psSquareMembrane[options] permet d’obtenir une topographie des nœuds et des lignes nodales, là où les dépôts de sable sont les plus importants. Par défaut la membrane est un carré de côté égal à π.
La documentation est avec celle de l'article précédent :

Les images :

On pourra rapprocher ces simulations des figures acoustiques de Chladni (réalisées elles aussi avec PSTricks) :
ou




Lignes nodales d’une membrane carrée vibrante (PSTricks)

Ce sont des illustrations des lignes nodales et des états vibratoires d'une membrane carrée, d’épaisseur uniforme, parfaitement flexible, tendue sur un contour rigide.  Le document pdf et son fichier source TeX, sont inclus dans le répertoire :


Le package utilisé, pst-contourplot, est dans ce répertoire. Le fichier zippé contient tous les fichiers. Le code des figures est inclus dans le fichier source.
Voici quelques illustrations extraites de la documentation :

Ces figures présentent des allures de mosaïques, on pourra faire un rapprochement avec les mosaïques obtenues avec d'autres procédés, dans les pages indiquées ci-après :
http://pstricks.blogspot.com/2016/11/des-mosaiques-avec-pstricks.html

http://pstricks.blogspot.com/2016/11/mosaiques-geantes-avec-pst-mosaic.html

http://pstricks.blogspot.fr/2017/03/mosaiques-en-spirale.html

http://pstricks.blogspot.com/2017/03/mosaiques-en-spirale.html

jeudi 22 novembre 2018

pst-moire : mise à jour et compléments

Le package pst-moire https://ctan.org/pkg/pst-moire a été mis à jour et complété, par exemple de la reproduction de la couverture du volume 2 de "The Theory of the Moire Phenomenon" de Isaac Amidror (Springer).
Voici les deux feuilles, la feuille de fond et le transparent que l'on posera dessus :
et le résultat de la superposition :
J'ai complété la commande pour pouvoir séparer les 2 couches, vous la trouverez dans le fichier psGlassPattern-blog.tex du répertoire :
Le fichier zippé contient tous les fichiers.
Dans ce même répertoire il y a un fichier  psRandomDotPatterns.tex avec une commande permettant de calculer et d'afficher les moirés illustrant les articles de Leon Glass et Matthew A. Smith :
http://www.scholarpedia.org/article/Glass_patterns
http://www.medicine.mcgill.ca/physio/glasslab/pub_pdf/dots_mi_2002.pdf
Voici le début de l'article :
« Les moirés formés par la superposition de deux motifs de points aléatoires : un motif original et un deuxième motif généré par une transformation linéaire ou non linéaire de l’original. Bien que chaque ensemble soit aléatoire, une variété de modèles spatiaux différents tels que cercles, spirales, hyperboles, etc. peuvent être générés en introduisant des corrélations entre les deux ensembles de points. Dans l’image de la figure 1, pour chaque point, il y a un point “partenaire” correspondant qui se trouve sur la circonférence d’un cercle centré au point de rotation des deux images. Le système visuel est capable de décoder ces corrélations, percevant ainsi la transformation globale sous-jacente.»
et d'autres illustrations avec des paramètres différents :
En séparant les deux feuilles :











samedi 10 novembre 2018

Moirés : superposition d'une plaque percée de trous sur une feuille couverte de symboles

Emin Gabrielyan propose dans :
https://docs.switzernet.com/people/emin-gabrielyan/070212-random-moire/
un moiré étonnant.
Le principe est le suivant : une plaque est percée de trous, elle posée sur une feuille remplie de "2" et peut tourner dessus.
Les trous sont disposés au hasard, mais les "2" sont disposés sur la feuille de fond aux mêmes endroits, la taille des "2" est plus grande que celle des trous. Les deux, feuille et plaque, sont corrélées et d'après Isaac Amidror c'est la condition pour l'existence du phénomène de moiré aléatoire.
On apparaître dans un halo un "2" fantôme aux contours très flous avec un effet grossissant en fonction de l'angle de rotation et qui est à l'endroit ou à l'envers selon le signe de l'angle.

Quelle est l'explication de ce phénomène ? Les trous découvrent une partie des motifs et ces parties reconstituent un 2 agrandi ? De plus, pour obtenir un "2" droit il faut que la feuille des symboles et la plaque percée de trous soient tournées de -90 degrés.
Isaac Amidror traite ce problème dans le chapitre 7 du volume 2  (Aperiodic Layers) de  "The Theory of the Moiré Phenomenon ainsi que dans l'article :
 Moiré patterns between aperiodic layers: quantitative analysis and synthesis

Voici par exemple deux images obtenues avec la commande \psRandomDot(basée sur le code d'Emin Gabrielyan), que l'on peut télécharger ici  :

Cette commande sera peut-être intégrée à une nouvelle version du package pst-moire.
https://ctan.org/pkg/pst-moire

samedi 3 novembre 2018

Les phénomènes de moiré aléatoire illustrés avec PSTricks

J'ai déjà indiqué, dans les articles précédents, que Isaac Amidror a publié deux livres sur les phénomènes de moiré aux éditions Springer :
"The Theory of the Moiré Phenomenon"
- volume 1 : "Periodic Layers"
- volume 2 : "Aperiodic Layers"
Dans le second, il y a de très nombreux exemples de création de moirés par superposition de calques constitués de points distribués de manière aléatoire sur la surface. Si les motifs des deux calques sont corrélés des moirés apparaissent. Le chapitre 2 de "Aperiodic Layers" étudie différents cas, qui illustrent aussi la quatrième de couverture du livre.
Emin Gabrielyan dans :
https://docs.switzernet.com/people/emin-gabrielyan/070212-random-moire/
fait un exposé illustré de ce phénomène, dans le cas où les 2 transparents forment un petit angle autour du centre de rotation, on observe des moirés composés de points disposés sur de cercles concentriques.
Une petite différence d'échelle dans les 2 calques et les points se disposent suivant des rayons.
Toujours avec une petite différence d'échelle dans les 2 calques et une petite rotation entre les deux calques et les points se disposent suivant des spirales.
Jürgen Gilg propose une adaptation de ces cas en utilisant les outils de PSTricks.
Dans les exemples qui vont illustrer cette page les 2 transparents sont constitués de motifs identiques. Les listings sont à la fin des dessins.
\documentclass[pstricks]{standalone}
\usepackage{pstricks-add}

\def\myPattern{%
\psRandom[randInit=42,randomPoints=4200,dotsize=1.5pt](-5,-5)(5,5){%
           \psframe(-5,-5)(5,5)}}%
\begin{document}
\begin{pspicture}(-6,-6)(6,6)
\psset{linecolor=red}
\rput(0,5.5){Concentric circles}
\rput{2.5}(0,0){\myPattern}
\rput{-2.5}(0,0){\myPattern}
\end{pspicture}

\begin{pspicture}(-6,-6)(6,6)
\rput(0,5.5){Spiral}
\rput{-2.5}(0,0){\myPattern}
\rput{2.5}(0,0){\psscalebox{1.05}{\myPattern}}
\end{pspicture}

\begin{pspicture}(-6,-6)(6,6)
\rput(0,5.5){Radial}
\rput{0}(0,0){\myPattern}
\rput{0}(0,0){\psscalebox{1.05}{\myPattern}}
\end{pspicture}
\end{document}

On peut aussi créer des animations comme celle que propose Emin Gabrielyan pour des cercles concentriques,  mais le phénomène est trompeur car l’œil s'attache au calque en rotation et les points du calque tournent effectivement !
Le listing pour obtenir les images :

\documentclass[pstricks]{standalone}
\usepackage{pstricks-add}
\def\myPattern{%
    \psRandom[randInit=50,
     randomPoints=5000,
     dotsize=1.25pt](-4,-4)(4,4){%
     \psframe(-4,-4)(4,4)}}
\begin{document}

\multido{\rA=0+0.4}{25}{%
\begin{pspicture}(-5,-5)(5,5)
\myPattern
\rput{\rA}{\myPattern}
\end{pspicture}
}
\multido{\rA=10+-0.4}{25}{%
\begin{pspicture}(-5,-5)(5,5)
\myPattern
\rput{\rA}{\myPattern}
\end{pspicture}
}
\end{document}

Celui avec le package animate d'Alexander Grahn, qui permet d'intégrer l'animation au pdf (LaTeX->dvips->ps2pdf) :

\documentclass{article}
\usepackage{pstricks-add,animate}
\def\myPattern{%
    \psRandom[randInit=50,
     randomPoints=5000,
     dotsize=1.25pt](-4,-4)(4,4){%
     \psframe(-4,-4)(4,4)}}
\begin{document}
\begin{center}
\begin{animateinline}[controls,palindrome,
                     begin={\begin{pspicture}(-5,-5)(5,5)},
                     end={\end{pspicture}}]{5}% 5 images/s
\multiframe{25}{rA=0+0.4}{%
\myPattern
\rput{\rA}{\myPattern}}
\end{animateinline}
\end{center}
\end{document}
\documentclass[pstricks]{standalone}
\usepackage{pstricks-add}
\def\myPattern{%
\psRandom[randInit=50,linecolor=blue,randomPoints=5000,dotsize=1pt](-4,-4)(4,4){\psframe(-4,-4)(4,4)}}
\begin{document}
\multido{\rA=0+0.2}{20}{%
\begin{pspicture}(-5,-5)(5,5)
\rput{0}(0,0){\myPattern}
\rput{\rA}(0,0){\psscalebox{1.05}{\myPattern}}
\end{pspicture}}
\multido{\rA=4+-0.2}{20}{%
\begin{pspicture}(-5,-5)(5,5)
\rput{0}(0,0){\myPattern}
\rput{\rA}(0,0){\psscalebox{1.05}{\myPattern}}
\end{pspicture}}
\end{document}

\documentclass{article}
\usepackage{pstricks-add,animate}
\def\myPattern{%
\psRandom[randInit=50,linecolor=blue,randomPoints=5000,dotsize=1pt](-4,-4)(4,4){\psframe(-4,-4)(4,4)}}
\begin{document}
\begin{animateinline}[%
    controls,palindrome,
    begin={\begin{pspicture}(-5,-5)(5,5)},
    end={\end{pspicture}}
    ]{5}% 5 images/s
\multiframe{20}{rA=0+0.2}{%
\rput{0}(0,0){\myPattern}
\rput{\rA}(0,0){\psscalebox{1.05}{\myPattern}}
}
\end{animateinline}
\end{document}











mercredi 31 octobre 2018

Moirés avec pst-contourplot

Ce sont deux moirés qui illustrent la quatrième de couverture du premier livre de Isaac Amidror : "The Theory of the Moiré Phenomenon" volume 1 : "Periodic Layers" (voir la page précédente).

Le tracé comprend 2 étapes :

Écriture des données de toutes les courbes sur le disque :

\documentclass[pstricks]{standalone}
\usepackage{pst-contourplot,multido}
\begin{document}
% enregistrement des données
% de chaque courbe
\begin{pspicture}(-6,-6)(6,6)
\multido{\r=3+-0.05,\i=1+1}{120}{%
\pstVerb{/isovalue \r\space def}%
\psContourPlot[algebraic,unit=2,function=y-Ex(-(x^2+y^2)/4)+isovalue,WriteData,FileName=f\i](-3,-3)(3,3)
}%
\end{pspicture}
\end{document}

Deuxième étape : lecture données et tracé des courbes (il y a une version noir et blanc et une en couleurs) :

\documentclass{article}
\usepackage{pst-contourplot,multido}
\begin{document}
\begin{center}
\begin{pspicture}(-6,-6)(6,6)
\psset{linewidth=1.5\pslinewidth}
\psframe*[linecolor=orange!50](-6.75,-6.5)(6.5,6.75)
\multido{\i=1+1}{120}{%
\psReadData[FileName=f\i]
}%
\psframe(-6,-6)(6,6)
\rput{0}(-.5,.5){\multido{\i=1+1}{120}{%
\psReadData[FileName=f\i]
}}%
\rput{0}(-0.5,0.5){\psframe(-6,-6)(6,6)}
\end{pspicture}
\end{center}

\begin{center}
\begin{pspicture}(-6,-6)(6,6)
\psset{linewidth=1.25\pslinewidth}
\psframe*[linecolor=orange!50](-6.75,-6.5)(6.5,6.75)
\multido{\i=1+1}{120}{%
\psReadData[FileName=f\i]
}%
\psframe(-6,-6)(6,6)
\rput{5}(-0.5,0.5){\multido{\i=1+1}{120}{%
\psReadData[FileName=f\i]
}}%
\rput{5}(-0.5,0.5){\psframe(-6,-6)(6,6)}
\end{pspicture}
\end{center}

\begin{center}
\begin{pspicture}(-6,-6)(6,6)
\psset{linewidth=1.25\pslinewidth}
\psframe*[linecolor=orange!50](-6.75,-6.5)(6.5,6.75)
\multido{\i=1+1}{120}{%
\psReadData[FileName=f\i,linecolor=blue]
}%
\psframe[linecolor=blue](-6,-6)(6,6)
\rput{0}(-.5,.5){\multido{\i=1+1}{120}{%
\psReadData[FileName=f\i,linecolor=red]
}}%
\rput{0}(-0.5,0.5){\psframe[linecolor=red](-6,-6)(6,6)}
\end{pspicture}
\end{center}

\begin{center}
\begin{pspicture}(-6,-6)(6,6)
\psset{linewidth=1.25\pslinewidth}
\psframe*[linecolor=orange!50](-6.75,-6.5)(6.5,6.75)
\multido{\i=1+1}{120}{%
\psReadData[FileName=f\i,linecolor=blue]
}%
\psframe[linecolor=blue](-6,-6)(6,6)
\rput{5}(-0.5,0.5){\multido{\i=1+1}{120}{%
\psReadData[FileName=f\i,linecolor=red]
}}%
\rput{5}(-0.5,0.5){\psframe[linecolor=red](-6,-6)(6,6)}
\end{pspicture}
\end{center}
\end{document}

Les images :
Le package pst-contourplot est disponible sur le serveur du CTAN :
Mais vous trouverez une version mise à jour ici (je n'ai pas encore actualisé celle du CTAN, mais elle est opérationnelle pour les exemples ci-dessus) :
Le fichier zippé contient package, exemples et documentation. Voir les pages :
http://pstricks.blogspot.com/2018/07/un-exemple-pour-illustrer-lutilisation.html
http://pstricks.blogspot.com/2018/07/pst-contourplot-fonctions-complexes.html
http://pstricks.blogspot.com/2018/07/mise-jour-de-pst-contourplot-et-pst.html






Package pst-moire

Le package pst-moire a été déposé sur le CTAN.
Sa documentation contient de nombreuses références sur le phénomène des moirés, mais il en manquait, que nous ne connaissions pas et  une qui pourrait bien être LA réference dans ce domaine,  ce sont les deux livres écrits par Isaac Amidror "The Theory of the Moiré Phenomenon" : "Periodic Layers" et  "Aperiodic Layers".
Pour expérimenter l'auteur fournit une sélection de figures pour imprimer des transparents et observer ainsi des moirés qui illustrent ses deux livres :
Emin Gabrielyan a réalisé un long et très intéressant exposé s'inspirant des travaux de Isaac Amidror :

Concernant le package pst-moire, comme exemple, voici un gif réalisé par Jürgen utilisant le package pst-moire et les outils : https://ctan.org/pkg/arara

 


% arara: latex
% arara: dvips
% arara: ps2pdf
% arara: animate: { density: 200, delay: 10, program: 'C:\Program Files (x86)\ImageMagick-7.0.8-Q16\convert.exe' }
% arara: clean: { extensions: [ log, aux, dvi, ps ] }
\documentclass[pstricks]{standalone}
\usepackage{pst-moire,multido}

\definecolor{moire1}{rgb}{0.98,0.89,0.56}
\definecolor{moire2}{rgb}{0.357,0.525,0.13}
\definecolor{moire3}{rgb}{0.2,0.05,0.015}
\definecolor{moire4}{rgb}{0.070.41 0.255}

\begin{document}

\multido{\rA=0+0.025}{20}{%
\begin{pspicture}(-6,-6)(6,6)
\psset{linewidth=2.5pt}
\psmoire[type=circle,linecolor=moire1](0,\rA)
\psmoire[type=circle,linecolor=moire2](0,-\rA)
\psmoire[type=circle,linecolor=moire3](\rA,0)
\psmoire[type=circle,linecolor=moire4](-\rA,0)
\end{pspicture}
}
\end{document}



 



mercredi 24 octobre 2018

pst-marble-1.0 : exemples


\documentclass[pstricks]{standalone}
\usepackage{pst-marble}
\begin{document}
\begin{pspicture}(-5,-7)(5,7)
\psMarble[
  background=1 1 0.9,
      colors={
[0.98 0.89 0.56]
[0.357 0.525 0.13]
[0.2 0.05 0.015]
[0.07 0.41 0.255]
[0.87 0.63 0.051]
[0.98 0.89 0.56]
},
    actions={
0 100 50 5  concentric-bands
 /signe 1 def
  100 100 1000 {/radius exch def
  [0 0 [radius] 10 60 signe mul 50 /stir]
    /signe signe neg def
    } for
    [ 90 [ -400 200 600 {} for ] 40 200 31 /rake]
    [-90 [ -500 200 600 {} for ] 40 200 31 /rake]
    [ 0 {2 mul sin 20 mul} /wiggle]
   }](10,14)
\end{pspicture}
\end{document}

Envoyé par Jürgen Gilg.

\documentclass[pstricks]{standalone}
\usepackage{pst-marble}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
\psMarble[
colors={
[0.98 0.89 0.56]
[0.357 0.525 0.13]
[0.2 0.05 0.015]
[0.07 0.41 0.255]
[0.87 0.63 0.051]
[0.98 0.89 0.56]
},
actions={
0 0 45 6 concentric-bands
[0 500 -32e3 15 /vortex]
[500 0 -32e3 15 /vortex]
[-500 0 -32e3 15 /vortex]
[0 -500 -32e3 15 /vortex]
[-350 350 -32e3 15 /vortex]
[350 -350 -32e3 15 /vortex]
[350 350 -32e3 15 /vortex]
[-350 -350 -32e3 15 /vortex]
[0 0 -32e3 15 /vortex]
}](10,10)
\end{pspicture}
\end{document}
 Envoyé par Jürgen Gig.
\documentclass{article}
\usepackage{pst-marble}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,
    background=1 1 1,
    actions={
40 [0 0 1] 30 random-drops
25 [1 0 0] 40 random-drops
30 [1 1 1] 25 random-drops
[45 [-500 100 500 {} for] 50 100 30 /rake]
[-45 {5 mul sin 50 mul} /wiggle]
[45 {5 mul sin 50 mul} /wiggle]
[250 250 [275] -10 60 30 /stir]
[-250 -250 [275] 10 60 30 /stir]
   }](10,10)
\end{pspicture}
\end{document}
 Envoyé par Jürgen Gig.
\documentclass[pstricks]{standalone}
\usepackage{pst-marble}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
\psMarble[
actions={
    150{rand srand
    /n {rrand 360 mod} def
     [n sin 350 rrand 200 mod sub mul
      n cos 350 rrand 200 mod sub mul
      rrand 25 mod 5 add
      background [0.98 0.89 0.56] /drop]
    } repeat
    150{rand srand
    /n {rrand 360 mod} def
     [n sin 350 rrand 200 mod sub mul
      n cos 350 rrand 200 mod sub mul
      rrand 15 mod 7 add
      background [0.357 0.525 0.13] /drop]
    } repeat
    150{rand srand
    /n {rrand 360 mod} def
     [n sin 350 rrand 200 mod sub mul
      n cos 350 rrand 200 mod sub mul
      rrand 10 mod 8 add
      background [0.2 0.05 0.015] /drop]
    } repeat
    150{rand srand
    /n {rrand 360 mod} def
     [n sin 350 rrand 200 mod sub mul
      n cos 350 rrand 200 mod sub mul
      rrand 10 mod 3 add
      background [0.07 0.41 0.255] /drop]
    } repeat
[0 0 -32e3 17 /vortex]
}](10,10)
\end{pspicture}
\end{document} 
 Envoyé par Jürgen Gig.
\documentclass{article}
\usepackage{pst-marble}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
\psMarble[viscosity=1000,
    background=1 1 1,
    actions={
40 [0 0 0] 30 random-drops
30 [1 0 0] 25 random-drops
25 [1 1 0] 40 random-drops
[45 [-500 100 500 {} for] 50 100 30 /rake]
[-45 {5 mul sin 50 mul} /wiggle]
[250 250 -32e3 10 /vortex]
[-250 -250 32e3 10 /vortex]
   }](10,10)
\end{pspicture}
\end{document} 


lundi 22 octobre 2018

The marbled paper with PSTricks: new version

Aubrey Jaffer has improved the model that was presented within the last version of pst-marble. Now it is closer to reality and more consistent in the choice of units. This version allows to perform more accurate simulations, however with some new parameters. Unfortunately for all those who already used the last version, this new version is almost incompatible to the last version, but we kept most of the example files and translated them into the new syntax.
The new version 1.0 is available on CTAN:
A copy of that version with some examples is also uploaded here (the zip file contains all necessary):
pst-marble is PSTricks package containing the work of Aubrey Jaffer and collaborated with Jürgen Gilg and Manuel Luque with the agreement of Aubrey Jaffer. On his website you'll find numerous documents and links for the theory of marbling.
Initially in a tank filled with a liquid, there are drops of colors that the artist projects with a brush on the surface (a little random, even if we can locate them on a given region) and whose size depends on the brush. He performs the operation several times with other colors and also brushes of different sizes. Then with a stylus the artist can draw lines, circles, ripples, effects of swirls. Depending on the speed, the viscosity of the medium, and the diameter of the stylet, the drops undergo deformations that will create a marbling. The artist then places a sheet of paper on the surface to get the marbled paper. Instead of a stylus, he can use a comb with a variable number of teeth to perform the same operations as with the stylus. With each action, the state of the surface is memorized. The drawing can thus be modified by depositing new drops and then performing other actions.
It is by applying the laws of fluid mechanics that Aubrey Jaffer and other computer scientists have attempted to model the formation of marblings.

For example;
Randomly distribute 1000 drops with variable radii and colors on the surface of a liquid,
trace with a stylus some bows of a circle with the center at O and increasing radii which alternate in their directions :

\documentclass[pstricks]{standalone}
\usepackage{pst-marble}
\begin{document}
\begin{pspicture}(-5,-7)(5,7)
\psMarble[
  background=1 1 0.9,
  viscosity=1000,
    actions={
  12 1000 random-drops-colors
 /signe 1 def
  100 100 1000 {/radius exch def
  [0 0 [radius] 10 60 signe mul 50 /stir]
    /signe signe neg def
    } for
   }](10,14)
\end{pspicture}
\begin{pspicture}(-5,-7)(5,7)
\psMarble[
  background=1 1 0.9,
  viscosity=1000,
    actions={
  12 1000 random-drops-colors
 /signe 1 def
  100 100 1000 {/radius exch def
  [0 0 [radius] 10 60 signe mul 50 /stir]
    /signe signe neg def
    } for
    [ 90 [ -400 200 600 {} for ] 40 200 31 /rake]
    [-90 [ -500 200 600 {} for ] 40 200 31 /rake]
    [ 0 {2 mul sin 20 mul} /wiggle]
   }](10,14)
\end{pspicture}
\end{document}

The documentation is part of the package and following are presented a few example from it:








 The compilation of the examples will be done according to the usual procedure:
LaTeX->dvips->ps2pdf



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