jeudi 12 novembre 2015

Le mode /Difference de blendmode utilisé pour réaliser, au choix, la synthèse additive ou soustractive des couleurs.

J'ai déjà employé divers modes de l'option blendmode de PSTricks pour réaliser plusieurs animations et illustrer les synthèses additive et soustractive des couleurs :

http://pstricks.blogspot.fr/2012/09/loption-blendmode-de-pstricks-pour.html
http://pstricks.blogspot.fr/2012/09/loption-blendmodelighten-de-pstricks-et.html
http://pstricks.blogspot.fr/2012/08/loption-bendmodemultiply-de-pstricks-et.html

J'ai fait une mise à jour mineure ici (voir les fichiers pstricks_blendmode.pdf et pstricks_blendmode.tex ) :

On peut avec le mode /Difference réaliser, au choix, la synthèse additive ou soustractive des couleurs.
Le code ci-dessous, vous permettra après compilation de réaliser le pdf de la synthèse soustractive incluant l'animation grâce au package animate d'Alexander Grahn.

\documentclass{article}
\usepackage{pst-node,animate}
\newpsstyle{blendmode0}{fillstyle=shape,blendmode=0,shapealpha=1,linestyle=none}
\newpsstyle{blendmode1}{fillstyle=shape,blendmode=1,shapealpha=1,linestyle=none}
\newpsstyle{blendmode2}{fillstyle=shape,blendmode=2,shapealpha=1,linestyle=none}
\newpsstyle{blendmode3}{fillstyle=shape,blendmode=3,shapealpha=1,linestyle=none}
\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}
% /Normal     0
% /Compatible 1
% /Screen     2
% /Multiply   3
% /HardLight  4
% /Darken     5
% /Lighten    6
% /Difference 7
\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
\begin{document}
\begin{center}
\psset{style=blendmode7}
\def\nFrames{51 }% 51 images, 50 pas de déplacements
\begin{animateinline}[controls,palindrome,
                     begin={\begin{pspicture}(-5.1,-6.1)(5.1,6.1)},
                     end={\end{pspicture}}]{5}% 5 images/s
\multiframe{\nFrames}{i=0+1}{
\pstVerb{/a_ 5 def
         /radius a_ 2 div def
         /yA a_ 3 div 3 sqrt mul def % a*sqrt(3)/3
         /xB radius neg def
         /yB a_ 6 div 3 sqrt mul neg def % -a*sqrt(3)/6
         /xC radius def
         /yC yB def
         /yF yA radius add def
         /xB2 radius def
         /yB2 yB neg def
         /xC2 radius neg def
         /yC2 yB2 def
         /xA2 0 def
         /yA2 yA neg def %
         /Npoints \nFrames 1 sub def % nombre de déplacements
         /xCyan 0 def
         /yCyan yA \i\space Npoints div yA mul 2 mul sub def
         /xYellow radius neg \i\space a_ mul Npoints div add def
         /yYellow xYellow 3 sqrt div def
         /xMagenta radius -\i\space a_ mul Npoints div add def
         /yMagenta xMagenta 3 sqrt div neg def
% le cadre
         /xD a_ neg def
         /yD yA2 radius sub def
         /xE a_ def
         /yE yD def
         /xF xE def
         /xG xE neg def
         /yG yF def
         }%
\pnode(!xD yD){D}
\pnode(!xE yE){E}
\pnode(!xF yF){F}
\pnode(!xG yG){G}
\pnode(!0 yCyan){C}
\pnode(!xYellow yYellow){Y}
\pnode(!xMagenta yMagenta){M}
\pspolygon[linestyle=solid,fillcolor=white,blendmode=0](D)(E)(F)(G)
\rput(C){\pspolygon[fillcolor=red](!radius neg radius neg)(!radius radius neg)(!radius radius)(!radius neg radius)}
\rput(Y){\pspolygon[fillcolor=blue](!radius neg radius neg)(!radius radius neg)(!radius radius)(!radius neg radius)}
\rput(M){\pspolygon[fillcolor=green](!radius neg radius neg)(!radius radius neg)(!radius radius)(!radius neg radius)}
}%
\end{animateinline}
\end{center}
\end{document}


Le code ci-dessous, vous permettra après compilation de réaliser le pdf de la synthèse additive incluant l'animation grâce au package animate d'Alexander Grahn.

\documentclass{article}
\usepackage{pst-node,animate}
\newpsstyle{blendmode0}{fillstyle=shape,blendmode=0,shapealpha=1,linestyle=none}
\newpsstyle{blendmode1}{fillstyle=shape,blendmode=1,shapealpha=1,linestyle=none}
\newpsstyle{blendmode2}{fillstyle=shape,blendmode=2,shapealpha=1,linestyle=none}
\newpsstyle{blendmode3}{fillstyle=shape,blendmode=3,shapealpha=1,linestyle=none}
\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}
% /Normal     0
% /Compatible 1
% /Screen     2
% /Multiply   3
% /HardLight  4
% /Darken     5
% /Lighten    6
% /Difference 7
\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
\begin{document}
\begin{center}
\def\nFrames{51 }% 51 images, 50 pas de déplacements
\begin{animateinline}[controls,palindrome,
                     begin={\begin{pspicture}(-5,-6)(5,6)},
                     end={\end{pspicture}}]{5}% 5 images/s
\multiframe{\nFrames}{i=0+1}{
\psset{style=blendmode7}
\pstVerb{/a_ 5 def
         /radius a_ 2 div def
         /yA a_ 3 div 3 sqrt mul def % a*sqrt(3)/3
         /xB radius neg def
         /yB a_ 6 div 3 sqrt mul neg def % -a*sqrt(3)/6
         /xC radius def
         /yC yB def
         /yF yA radius add def
         /xB2 radius def
         /yB2 yB neg def
         /xC2 radius neg def
         /yC2 yB2 def
         /xA2 0 def
         /yA2 yA neg def %
         /Npoints \nFrames 1 sub def % nombre de déplacements
         /xRouge 0 def
         /yRouge yA \i\space Npoints div yA mul 2 mul sub def
         /xVert radius neg \i\space a_ mul Npoints div add def
         /yVert xVert 3 sqrt div def
         /xBleu radius -\i\space a_ mul Npoints div add def
         /yBleu xBleu 3 sqrt div neg def
% le cadre
         /xD a_ neg def
         /yD yA2 radius sub def
         /xE a_ def
         /yE yD def
         /xF xE def
         /xG xE neg def
         /yG yF def
         }%
\pnode(!0 yRouge){R}
\pnode(!xBleu yBleu){B}
\pnode(!xVert yVert){V}
\pscircle[fillcolor=red](R){!radius}
\pscircle[fillcolor=blue](B){!radius}
\pscircle[fillcolor=green](V){!radius}
\pnode(!xD yD){D}
\pnode(!xE yE){E}
\pnode(!xF yF){F}
\pnode(!xG yG){G}
\pspolygon[linestyle=solid](D)(E)(F)(G)
}%
\end{animateinline}
\end{center}
\end{document}

Aucun commentaire:

Enregistrer un commentaire