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