jeudi 24 décembre 2015
dimanche 20 décembre 2015
Pantographe : projet d'une simulation avec PSTricks
C'est une ébauche de code PSTricks, pour simuler l'animation d'un pantographe, soit pour un agrandissement, soit pour une réduction. Le principe que j'utilise est celui décrit dans le manuel de mathématiques de la classe de troisième de C.Lebossé et C.Hémery, programme du 31 juillet 1958, à la page 262 dans les problèmes de révision.
Tous les fichiers sont dans l'archive :
pantographe.zip
l'animation est réalisée grâce au package animate d'Alexander Grahn.
Le contour de l'esperluette a été obtenu avec la commande :
\psCharPath[text=&,file=esperluette]
du package pst-crayon :
http://pstricks.blogspot.fr/2015/08/pst-crayon-version-3.html
J'obtiens le Gif animé à partir des images créées dans le fichier Gif-pantographe-animation-esperluette.pdf en compilant le fichier Gif-pantographe-animation-esperluette.tex.
En affichant le pdf, on peut faire défiler les images avec la roulette de la souris.
PS1 : si vous avez des idées pour améliorer le code, créer une commande etc. n'hésitez pas à m'en faire part.
PS2 : extrait de l'ouvrage de C.Lebossé et C.Hémery :
Tous les fichiers sont dans l'archive :
pantographe.zip
l'animation est réalisée grâce au package animate d'Alexander Grahn.
Le contour de l'esperluette a été obtenu avec la commande :
\psCharPath[text=&,file=esperluette]
du package pst-crayon :
http://pstricks.blogspot.fr/2015/08/pst-crayon-version-3.html
J'obtiens le Gif animé à partir des images créées dans le fichier Gif-pantographe-animation-esperluette.pdf en compilant le fichier Gif-pantographe-animation-esperluette.tex.
En affichant le pdf, on peut faire défiler les images avec la roulette de la souris.
PS1 : si vous avez des idées pour améliorer le code, créer une commande etc. n'hésitez pas à m'en faire part.
PS2 : extrait de l'ouvrage de C.Lebossé et C.Hémery :
jeudi 10 décembre 2015
Électrolyse d'une solution d'acide sulfurique : illustrations
\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage{pstricks,pst-plot}
\input random
\definecolor{Bluea}{cmyk}{.2,0,0,0}
\makeatletter
\newdimen{\BulleX}
\newdimen{\BulleY}
\newdimen{\hauteur}
\hauteur=2pt
\def\pstbulles#1{{%
\multido{\iBulle=1+1}{#1}{%
\setrandim{\BulleX}{-0.15pt}{0.15pt}
\setrandim{\BulleY}{0pt}{\hauteur}
\pst@dimh=\BulleY
\ifdim\BulleY>1.25pt \pst@dimh=1pt \fi
\psdot[dotscale=\pointless\pst@dimh,dotstyle=o](! \pointless\BulleX\space
\pointless\BulleY\space 1 mul)}}}
\makeatother
\begin{document}
\begin{center}
\begin{pspicture}(-4,0)(4,10)
\psclip{\pspolygon[linestyle=none](-2,7)(-1.5,5)(1.5,5)(2,7)}
\psframe[fillstyle=solid,fillcolor=Bluea](-3,4)(3,6.5)
\endpsclip%
\psline[linewidth=2\pslinewidth](-2,7)(-1.5,5)(1.5,5)(2,7)
\psline[linewidth=2\pslinewidth](-0.75,5)(-1,4)
\psline[linewidth=2\pslinewidth](0.75,5)(1,4)
\psframe[linewidth=2\pslinewidth](-2,3.5)(2,4)
\pscustom[linewidth=2\pslinewidth]{%
\psline(-0.8,5.25)(-0.8,9.5)
\psarcn(-0.5,9.5){0.3}{180}{0}
\psline(-0.2,9.5)(-0.2,5.25)
\fill[fillstyle=solid,fillcolor=Bluea]}
\pscustom[linewidth=2\pslinewidth]{%
\psline(0.2,5.25)(0.2,9.5)
\psarcn(0.5,9.5){0.3}{180}{0}
\psline(0.8,9.5)(0.8,5.25)\fill[fillstyle=solid,fillcolor=Bluea]}
\psline[linewidth=4\pslinewidth,linearc=0.25](-1.5,4.6)(-1.5,4.8)(-3,4.8)(-3,2)
\psline[linewidth=4\pslinewidth,linearc=0.25](1.5,4.6)(1.5,4.8)(3,4.8)(3,2)
\psline[linewidth=3\pslinewidth,linecolor=red,linearc=0.25](-1.5,4.6)(-1.5,4.8)(-3,4.8)(-3,2)
\psframe*(-0.55,5)(-0.45,6)\psframe*(0.55,5)(0.45,6)
\psframe[fillstyle=solid,fillcolor=red](-1.8,4)(-1.2,4.2)
\psframe*(1.8,4)(1.2,4.2)
\psframe[fillstyle=solid,fillcolor=red](-1.6,4.2)(-1.4,4.6)
\psframe*(1.6,4.2)(1.4,4.6)
\psline[linestyle=dashed,linewidth=2\pslinewidth,linearc=0.25](-0.5,5)(-0.5,3.7)(-1.5,3.7)(-1.5,4)
\psline[linestyle=dashed,linewidth=2\pslinewidth,linearc=0.25](0.5,5)(0.5,3.7)(1.5,3.7)(1.5,4)
\psdots[dotsize=5\pslinewidth](-3,2)(3,2)
\psline(-3,2)(3,2)
\pscircle[fillstyle=solid](0,2){0.45}\rput(0,2){V}
\psline[linewidth=2\pslinewidth](-0.1,0.5)(-0.1,1.5)
\psline[linewidth=3\pslinewidth](0.1,0.75)(0.1,1.25)
\psdot(-1,1)
\psline(-2,1)(-3,1)(-3,2)
\psline(-1,1)(-0.1,1)
\psline(0.1,1)(3,1)(3,2)
\rput(-2,1){\psline[linewidth=2\pslinewidth](1;30)\pscircle[fillstyle=solid](0,0){0.1}}
\end{pspicture}
\begin{pspicture}(-4,0)(4,10)
\psclip{\pspolygon[linestyle=none](-2,7)(-1.5,5)(1.5,5)(2,7)}
\psframe[fillstyle=solid,fillcolor=Bluea](-3,4)(3,6.5)
\endpsclip%
\psline[linewidth=2\pslinewidth](-2,7)(-1.5,5)(1.5,5)(2,7)
\psline[linewidth=2\pslinewidth](-0.75,5)(-1,4)
\psline[linewidth=2\pslinewidth](0.75,5)(1,4)
\psframe[linewidth=2\pslinewidth](-2,3.5)(2,4)
% les deux tubes
\psclip{\pscustom[linestyle=none]{%
\psline(-0.8,5.25)(-0.8,9.7)
\psarcn(-0.5,9.7){0.3}{180}{0}
\psline(-0.2,9.7)(-0.2,5.25)}}
%\psframe[fillstyle=solid,fillcolor=Bluea](-1,5)(0,8.5)
\pscustom[fillstyle=solid,fillcolor=Bluea,linewidth=0.01]{%
\psline(-1,8.5)(-1,5)(0,5)(0,8.5)
\psplot[algebraic]{0}{-1}{0.025*sin(6.28*x/0.25)+8.5}}%
\endpsclip%
\pscustom[linewidth=2\pslinewidth]{
\psline(-0.8,5.25)(-0.8,9.7)
\psarcn(-0.5,9.7){0.3}{180}{0}
\psline(-0.2,9.7)(-0.2,5.25)}%
\psclip{\pscustom[linestyle=none]{%
\psline(0.8,5.25)(0.8,9.7)
\psarcn(0.5,9.7){0.3}{180}{0}
\psline(0.2,9.7)(0.2,5.25)}}
\pscustom[fillstyle=solid,fillcolor=Bluea,linewidth=0.01]{%
\psline(0,7)(0,5)(1.,5)(1,7)
\psplot[algebraic]{1}{0}{0.025*sin(6.28*x/0.25)+7}
}%
\endpsclip%
\pscustom[linewidth=2\pslinewidth]{%
\psline(0.2,5.25)(0.2,9.7)
\psarcn(0.5,9.7){0.3}{180}{0}
\psline(0.8,9.7)(0.8,5.25)}
% les fils
\psline[linewidth=4\pslinewidth,linearc=0.25](-1.5,4.6)(-1.5,4.8)(-3,4.8)(-3,2)
\psline[linewidth=4\pslinewidth,linearc=0.25](1.5,4.6)(1.5,4.8)(3,4.8)(3,2)
\psline[linewidth=3\pslinewidth,linecolor=red,linearc=0.25](-1.5,4.6)(-1.5,4.8)(-3,4.8)(-3,2)
\psframe*(-0.55,5)(-0.45,6)\psframe*(0.55,5)(0.45,6)
\psframe[fillstyle=solid,fillcolor=red](-1.8,4)(-1.2,4.2)
\psframe*(1.8,4)(1.2,4.2)
\psframe[fillstyle=solid,fillcolor=red](-1.6,4.2)(-1.4,4.6)
\psframe*(1.6,4.2)(1.4,4.6)
\psline[linestyle=dashed,linewidth=2\pslinewidth,linearc=0.25](-0.5,5)(-0.5,3.7)(-1.5,3.7)(-1.5,4)
\psline[linestyle=dashed,linewidth=2\pslinewidth,linearc=0.25](0.5,5)(0.5,3.7)(1.5,3.7)(1.5,4)
\psdots[dotsize=5\pslinewidth](-3,2)(3,2)
\psline(-3,2)(3,2)
\pscircle[fillstyle=solid](0,2){0.45}\rput(0,2){V}
\psline[linewidth=2\pslinewidth](-0.1,0.5)(-0.1,1.5)
\psline[linewidth=3\pslinewidth](0.1,0.75)(0.1,1.25)
\psdot(-1,1)
\psline(-2,1)(-3,1)(-3,2)
\psline(-1,1)(-0.1,1)
\psline(0.1,1)(3,1)(3,2)
\rput(-2,1){\psline[linewidth=2\pslinewidth](1;0)\pscircle[fillstyle=solid](0,0){0.1}}
\randomi=12578452
\rput(.5,5){\pstbulles{50}}
\hauteur=3.65pt
\rput(-.5,5){\pstbulles{25}}
\hauteur=1.5pt
\rput(-.5,5){\pstbulles{10}}
\end{pspicture}
\end{center}
\end{document}
mercredi 9 décembre 2015
Électrolyse d'une solution de bromure de cuivre : illustrations
\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
%\usepackage[garamond]{mathdesign}
\usepackage{pstricks,multido,pst-grad}
\definecolor{Orange}{rgb}{1,0.65,0}
% le tube en U de diamètre 1cm
% de hauteur 5 cm
\def\psTubeU{%
\pscustom[linestyle=none]{%
\psline(-2,3)(-2,0)
\psarc(0,0){2}{180}{0}
\psline(2,0)(2,3)(1,3)(1,0)
\psarcn(0,0){1}{0}{180}
\psline(-1,0)(-1,3)(-2,3)}}
\def\psContourTubeU{%
\pscustom[linewidth=2\pslinewidth]{%
\psline(-2,3)(-2,0)
\psarc(0,0){2}{180}{0}
\psline(2,0)(2,3)}
\pscustom[linewidth=2\pslinewidth]{%
\psline(1,3)(1,0)
\psarcn(0,0){1}{0}{180}
\psline(-1,0)(-1,3)}}
%%%%%%%%%%%%%%%%%
\def\electrode{
\psframe*[linecolor=black](-0.1,0)(0.1,4.5)
\psframe*[linecolor=Orange](-0.15,4.2)(0.15,4.5)}
\psset{dimen=middle}
\begin{document}
\begin{center}
\begin{pspicture}[showgrid=false](-3,-4)(3,7)
\begin{psclip}{\psTubeU}
% liquide
\psframe*[linecolor=cyan!20](-3,-2)(3,1.5)
\end{psclip}
\psContourTubeU
\rput(-1.5,0){\electrode}
\rput(1.5,0){\electrode}
\psline[linewidth=3\pslinewidth](-0.1,6.3)(-0.1,6.7)
\psline(0.1,6)(0.1,7)
\uput[45](0.1,6.5){$+$}
\uput[135](-0.1,6.5){$-$}
\psline(-1.5,4.5)(-3,4.5)(-3,6.5)(-0.1,6.5)
\psline(1.5,4.5)(3,4.5)(3,6.5)%(0.1,6.5)
\psline(0.1,6.5)(1,6.5)
\psline(2,6.5)(3,6.5)
\psline[linewidth=2\pslinewidth](1,6.5)(2.1,6.7)
\psdot(2,6.5)
\pscircle[fillstyle=solid](1,6.5){0.1}
\pscircle[fillstyle=solid](-3,5.5){0.5}
\rput(-3,5.5){mA}
\psline{*-*}(-3,4.75)(3,4.75)
\pscircle[fillstyle=solid](0,4.75){0.5}
\rput(0,4.75){V}
\uput[135](-0.5,4.75){\footnotesize \textsc{com}}
\uput[135](-3,6){\footnotesize \textsc{com}}
\psline{->}(0.75,2)(1.4,2)
\psline{->}(-0.75,2)(-1.4,2)
\rput(0,2){\shortstack{électrodes\\ de graphite}}
\psline{-*}(0,-2.5)(0,-1.5)
\uput[d](0,-2.5){\small \shortstack{solution\\ de bromure\\ de cuivre(II)}}
\end{pspicture}
\end{center}
\begin{center}
\begin{pspicture}[showgrid=false](-3,-4)(3,7)
\begin{psclip}{\psTubeU}
% liquide
\psframe*[linecolor=cyan!20](-3,-2)(3,1.5)
\psframe*[linecolor=Orange](0,0.5)(3,1.5)
\psframe[linestyle=none,fillstyle=gradient,gradbegin=Orange,gradend=cyan!20,gradmidpoint=1](0,-0.2)(3,0.5)
\end{psclip}
\psContourTubeU
\rput(-1.5,0){\electrode}
\rput(1.5,0){\electrode}
\psline[linewidth=3\pslinewidth](-0.1,6.3)(-0.1,6.7)
\psline(0.1,6)(0.1,7)
\uput[45](0.1,6.5){$+$}
\uput[135](-0.1,6.5){$-$}
\psline(-1.5,4.5)(-3,4.5)(-3,6.5)(-0.1,6.5)
\psline(1.5,4.5)(3,4.5)(3,6.5)%(0.1,6.5)
\psline(0.1,6.5)(1,6.5)
\psline(2,6.5)(3,6.5)
\psline[linewidth=2\pslinewidth](1,6.5)(2.1,6.5)
\psdot(2,6.5)
\pscircle[fillstyle=solid](1,6.5){0.1}
\pscircle[fillstyle=solid](-3,5.5){0.5}
\rput(-3,5.5){mA}
\psline{*-*}(-3,4.75)(3,4.75)
\pscircle[fillstyle=solid](0,4.75){0.5}
\rput(0,4.75){V}
\uput[135](-0.5,4.75){\footnotesize \textsc{com}}
\uput[135](-3,6){\footnotesize \textsc{com}}
\psline{->}(2.5,0.75)(1.7,0.75)
\uput[0](2.5,0.75){\shortstack{formation de\\ $\mathrm{Br_2}$ (orangé)}}
\rput(-1.5,0){\psframe*[linecolor=red](-0.1,0)(0.1,1.5)}
\psline{->}(-2.5,0.75)(-1.6,0.75)
\uput[l](-2.3,0.75){\shortstack{dépôt \\de cuivre}}
\end{pspicture}
\end{center}
\end{document}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
%\usepackage[garamond]{mathdesign}
\usepackage{pstricks,multido,pst-grad}
\definecolor{Orange}{rgb}{1,0.65,0}
% le tube en U de diamètre 1cm
% de hauteur 5 cm
\def\psTubeU{%
\pscustom[linestyle=none]{%
\psline(-2,3)(-2,0)
\psarc(0,0){2}{180}{0}
\psline(2,0)(2,3)(1,3)(1,0)
\psarcn(0,0){1}{0}{180}
\psline(-1,0)(-1,3)(-2,3)}}
\def\psContourTubeU{%
\pscustom[linewidth=2\pslinewidth]{%
\psline(-2,3)(-2,0)
\psarc(0,0){2}{180}{0}
\psline(2,0)(2,3)}
\pscustom[linewidth=2\pslinewidth]{%
\psline(1,3)(1,0)
\psarcn(0,0){1}{0}{180}
\psline(-1,0)(-1,3)}}
%%%%%%%%%%%%%%%%%
\def\electrode{
\psframe*[linecolor=black](-0.1,0)(0.1,4.5)
\psframe*[linecolor=Orange](-0.15,4.2)(0.15,4.5)}
\psset{dimen=middle}
\begin{document}
\begin{center}
\begin{pspicture}[showgrid=false](-3,-4)(3,7)
\begin{psclip}{\psTubeU}
% liquide
\psframe*[linecolor=cyan!20](-3,-2)(3,1.5)
\end{psclip}
\psContourTubeU
\rput(-1.5,0){\electrode}
\rput(1.5,0){\electrode}
\psline[linewidth=3\pslinewidth](-0.1,6.3)(-0.1,6.7)
\psline(0.1,6)(0.1,7)
\uput[45](0.1,6.5){$+$}
\uput[135](-0.1,6.5){$-$}
\psline(-1.5,4.5)(-3,4.5)(-3,6.5)(-0.1,6.5)
\psline(1.5,4.5)(3,4.5)(3,6.5)%(0.1,6.5)
\psline(0.1,6.5)(1,6.5)
\psline(2,6.5)(3,6.5)
\psline[linewidth=2\pslinewidth](1,6.5)(2.1,6.7)
\psdot(2,6.5)
\pscircle[fillstyle=solid](1,6.5){0.1}
\pscircle[fillstyle=solid](-3,5.5){0.5}
\rput(-3,5.5){mA}
\psline{*-*}(-3,4.75)(3,4.75)
\pscircle[fillstyle=solid](0,4.75){0.5}
\rput(0,4.75){V}
\uput[135](-0.5,4.75){\footnotesize \textsc{com}}
\uput[135](-3,6){\footnotesize \textsc{com}}
\psline{->}(0.75,2)(1.4,2)
\psline{->}(-0.75,2)(-1.4,2)
\rput(0,2){\shortstack{électrodes\\ de graphite}}
\psline{-*}(0,-2.5)(0,-1.5)
\uput[d](0,-2.5){\small \shortstack{solution\\ de bromure\\ de cuivre(II)}}
\end{pspicture}
\end{center}
\begin{center}
\begin{pspicture}[showgrid=false](-3,-4)(3,7)
\begin{psclip}{\psTubeU}
% liquide
\psframe*[linecolor=cyan!20](-3,-2)(3,1.5)
\psframe*[linecolor=Orange](0,0.5)(3,1.5)
\psframe[linestyle=none,fillstyle=gradient,gradbegin=Orange,gradend=cyan!20,gradmidpoint=1](0,-0.2)(3,0.5)
\end{psclip}
\psContourTubeU
\rput(-1.5,0){\electrode}
\rput(1.5,0){\electrode}
\psline[linewidth=3\pslinewidth](-0.1,6.3)(-0.1,6.7)
\psline(0.1,6)(0.1,7)
\uput[45](0.1,6.5){$+$}
\uput[135](-0.1,6.5){$-$}
\psline(-1.5,4.5)(-3,4.5)(-3,6.5)(-0.1,6.5)
\psline(1.5,4.5)(3,4.5)(3,6.5)%(0.1,6.5)
\psline(0.1,6.5)(1,6.5)
\psline(2,6.5)(3,6.5)
\psline[linewidth=2\pslinewidth](1,6.5)(2.1,6.5)
\psdot(2,6.5)
\pscircle[fillstyle=solid](1,6.5){0.1}
\pscircle[fillstyle=solid](-3,5.5){0.5}
\rput(-3,5.5){mA}
\psline{*-*}(-3,4.75)(3,4.75)
\pscircle[fillstyle=solid](0,4.75){0.5}
\rput(0,4.75){V}
\uput[135](-0.5,4.75){\footnotesize \textsc{com}}
\uput[135](-3,6){\footnotesize \textsc{com}}
\psline{->}(2.5,0.75)(1.7,0.75)
\uput[0](2.5,0.75){\shortstack{formation de\\ $\mathrm{Br_2}$ (orangé)}}
\rput(-1.5,0){\psframe*[linecolor=red](-0.1,0)(0.1,1.5)}
\psline{->}(-2.5,0.75)(-1.6,0.75)
\uput[l](-2.3,0.75){\shortstack{dépôt \\de cuivre}}
\end{pspicture}
\end{center}
\end{document}
mardi 8 décembre 2015
Électrolyse d'une solution de chlorure de sodium : illustrations
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
%\usepackage[garamond]{mathdesign}
\usepackage{pstricks,multido,pst-grad}
\input random
\definecolor{Orange}{rgb}{1,0.65,0}
\makeatletter
\newdimen{\BulleX}
\newdimen{\BulleY}
\newdimen{\hauteur}
\hauteur=2pt % hauteur maxi atteinte par les bulles les pts sont convertis en cm ensuite
\def\pstbulles#1{{% #1 = nombre de bulles
\multido{\iBulle=1+1}{#1}{%
\setrandim{\BulleX}{-0.15pt}{0.15pt}
\setrandim{\BulleY}{0pt}{\hauteur}
\pst@dimh=\BulleY
\ifdim\BulleY>1.25pt \pst@dimh=1pt \fi
\psdot[dotscale=\pointless\pst@dimh,dotstyle=o](! \pointless\BulleX\space
\pointless\BulleY)}}}
\makeatother
\psset{dimen=middle}
\begin{document}
% le tube en U de diamètre 1cm
% de hauteur 5 cm
\def\psTubeU{%
\pscustom[linestyle=none]{%
\psline(-2,3)(-2,0)
\psarc(0,0){2}{180}{0}
\psline(2,0)(2,3)(1,3)(1,0)
\psarcn(0,0){1}{0}{180}
\psline(-1,0)(-1,3)(-2,3)}}
\def\psContourTubeU{%
\pscustom[linewidth=2\pslinewidth]{%
\psline(-2,3)(-2,0)
\psarc(0,0){2}{180}{0}
\psline(2,0)(2,3)}
\pscustom[linewidth=2\pslinewidth]{%
\psline(1,3)(1,0)
\psarcn(0,0){1}{0}{180}
\psline(-1,0)(-1,3)}}
%%%%%%%%%%%%%%%%%
\def\electrode{
\psframe*[linecolor=black](-0.1,0)(0.1,4.5)
\psframe*[linecolor=Orange](-0.15,4.2)(0.15,4.5)}
\def\psVerrerie{
% tube à essais retourné
{\pscustom[linewidth=2\pslinewidth]{
\psline(-1.45,3.6)(-1.45,6.35)
\psarcn(-1.2,6.35){0.25}{180}{0}
\psline(-0.95,6.35)(-0.95,3.6)}
\psContourTubeU}
% tube à dégagement
\psline[doubleline=true,doublesep=1mm](-1.2,2)(-1.2,4.5)
% bouchon
\pspolygon[fillstyle=solid,fillcolor=gray!50,linewidth=0.025](-2.1,3.5)(-1.9,2.5)(-1.1,2.5)(-0.9,3.5)}
%
\begin{center}
\begin{pspicture}(-3,-2)(3,7)
\begin{psclip}{\psTubeU}
% liquide
\psframe*[linecolor=gray!20](-3,-2)(3,1.5)
\end{psclip}
\rput(-1.75,0){\electrode}
\psVerrerie
\psline(-1.7,4.5)(-3,4.5)
\psline(1.5,4.5)(3,4.5)
\rput(-3,4.5){\pscirclebox[fillstyle=solid]{$-$}}
\rput(3,4.5){\pscirclebox[fillstyle=solid]{$+$}}
\psframe[linestyle=none,fillstyle=solid,fillcolor=blue!50!magenta!50](1.025,0)(1.975,1.5)
\rput(1.5,0){\electrode}
\psline[linewidth=3\pslinewidth,linecolor=red]{->}(2.6,4.5)(2,4.5)
\uput[u](2.4,4.5){\red$I$}
\psline{->}(-3.1,0.75)(-1.25,0.75)
\uput[l](-3,0.75){phénolphtaléine}
\psline{->}(3.1,0.75)(2,0.75)
\uput[r](3,0.75){indigo}
\psline{->}(0,-2.5)(0,-1.5)
\uput[d](0,-2.5){solution de $\mathrm{Na^++Cl^-}$}
\end{pspicture}
\end{center}
\begin{center}
\begin{pspicture}(-3,-2)(3,8)
\begin{psclip}{\psTubeU}
% liquide
\psframe*[linecolor=gray!20](-3,-2)(3,1.5)
% dégagement de dichlore dans le tube
\psframe[linestyle=none,fillstyle=gradient,gradbegin=green!20,gradend=white,gradmidpoint=0](0,1.5)(3,3)
\end{psclip}
\rput(-1.75,0){\electrode}
\rput(1.5,0){\electrode}
\psVerrerie
\psline(-1.7,4.5)(-3,4.5)
\psline(1.5,4.5)(3,4.5)
\rput(-3,4.5){\pscirclebox[fillstyle=solid]{$-$}}
\rput(3,4.5){\pscirclebox[fillstyle=solid]{$+$}}
\psframe[linestyle=none,fillstyle=solid,fillcolor=blue!50!magenta!50](1.025,0)(1.975,1.5)
\pscustom[linecolor=gray!20]{\pscurve(1.3,1.5)(1.2,1)(1.3,-0.2)(1.4,-0.4)(1.7,0)(1.75,1)(1.7,1.5)\fill[fillstyle=solid,fillcolor=gray!20]}
\pscustom[linecolor=magenta]{\pscurve(-1.9,1.5)(-1.9,1)(-1.8,-0.2)(-1.4,0)(-1.5,1)(-1.5,1.5)\fill[fillstyle=solid,fillcolor=magenta]}%
\psframe*[linecolor=black](-1.85,0)(-1.65,1.5)
\psframe*[linecolor=black](1.4,0)(1.6,1.5)
\rput(-1.75,0){\hauteur=1.5pt\pstbulles{25}}
\rput(1.5,0){\psset{fillstyle=solid,fillcolor=green!20}\hauteur=1.5pt\pstbulles{25}}
\psline{->}(-1.2,4.6)(-1.2,5.5)\uput[u](-1.2,5.5){\small$\mathrm{H_2}$}
\psline[linewidth=3\pslinewidth,linecolor=red]{->}(2.6,4.5)(2,4.5)
\uput[u](2.4,4.5){\red$I$}
\psline{->}(-3.1,0.75)(-2,0.75)
\uput[l](-3,0.75){\shortstack{virage de la\\ phénolphtaléine}}
\psline{->}(3.1,0.75)(2,0.75)
\uput[r](3,0.75){\shortstack{décoloration de\\l'indigo}}
\psline{->}(3,2)(1.6,1.25)
\uput[r](3,2){dégagement de $\mathrm{Cl_2}$}
\psline{->}(-3,2)(-1.8,1.25)
\uput[l](-3,2){dégagement de $\mathrm{H_2}$}
\end{pspicture}
\end{center}
\end{document}
vendredi 4 décembre 2015
Les décodeurs
Une rubrique du site du journal Le Monde :
http://www.lemonde.fr/les-decodeurs/
se présente ainsi : « Les décodeurs du Monde.fr vérifient déclarations, assertions et rumeurs en tous genres ; ils mettent l’information en forme et la remettent dans son contexte ; ils répondent à vos questions. »
En fait ce n’est pas le contenu de cette rubrique qui fait l’objet de cet article, mais son aspect graphique. Je me suis demandé comment réaliser le logo ainsi que les illustrations des titres des différentes parties, avec PSTricks de façon pas très compliquée. On remarque qu’à partir d’un mot, on lui superpose le même mot mais dont chaque lettre a subi une symétrie(un retournement) d’axe vertical ou horizontal. Les deux mots étant de couleurs différentes, dans leur superposition les parties communes sont en noir. Le résultat est plaisant, mais laisse néanmoins deviner le titre de la rubrique et ce logo me semble bien en adéquation avec l’objectif des auteurs.
Dans le logo du Monde, les lettres sont de 3 couleurs différentes, rouge, jaune et bleu. Dans cet essai, les lettres n’auront que deux couleurs, mais suivant la méthode choisie une autre couleur apparaîtra lors de la superposition.
Les différentes versions proposées utilisent l’option blendmode et deux des modes possibles /Multiply et /Difference. Pour le choix de la typographie j’ai opté pour les caractères AvantGarde.
Et puis pour terminer une animation au format Gif.
Les fichiers(l'animation est incluse dans le pdf, grâce au package animate) :
http://www.lemonde.fr/les-decodeurs/
se présente ainsi : « Les décodeurs du Monde.fr vérifient déclarations, assertions et rumeurs en tous genres ; ils mettent l’information en forme et la remettent dans son contexte ; ils répondent à vos questions. »
En fait ce n’est pas le contenu de cette rubrique qui fait l’objet de cet article, mais son aspect graphique. Je me suis demandé comment réaliser le logo ainsi que les illustrations des titres des différentes parties, avec PSTricks de façon pas très compliquée. On remarque qu’à partir d’un mot, on lui superpose le même mot mais dont chaque lettre a subi une symétrie(un retournement) d’axe vertical ou horizontal. Les deux mots étant de couleurs différentes, dans leur superposition les parties communes sont en noir. Le résultat est plaisant, mais laisse néanmoins deviner le titre de la rubrique et ce logo me semble bien en adéquation avec l’objectif des auteurs.
Dans le logo du Monde, les lettres sont de 3 couleurs différentes, rouge, jaune et bleu. Dans cet essai, les lettres n’auront que deux couleurs, mais suivant la méthode choisie une autre couleur apparaîtra lors de la superposition.
Les différentes versions proposées utilisent l’option blendmode et deux des modes possibles /Multiply et /Difference. Pour le choix de la typographie j’ai opté pour les caractères AvantGarde.
Et puis pour terminer une animation au format Gif.
mardi 24 novembre 2015
2015->2016
L'animation a été réalisée avec le package pst-crayon. La dernière version du package est ici :
http://pstricks.blogspot.fr/2015/08/pst-crayon-version-3.html
Voici les liens des versions précédentes :
http://pstricks.blogspot.fr/2015/08/crayon-bicolore.html
http://pstricks.blogspot.fr/2015/08/pst-crayon-une-suggestion-dherbert-voss.html
http://pstricks.blogspot.fr/2015/08/pst-crayon-dessin-de-bart-simpson.html
http://pstricks.blogspot.fr/2015/07/obtenir-le-chemin-dun-caracter-dun-mot.html
http://pstricks.blogspot.fr/2015/07/pst-crayon-le-b-chancery.html
http://pstricks.blogspot.fr/2015/07/pst-crayon-dessiner-le-b.html
http://pstricks.blogspot.fr/2015/07/pst-crayon-dessiner-un-avion.html
http://pstricks.blogspot.fr/2015/07/pst-crayon-dessin-du-minuscule-en-times.html
http://pstricks.blogspot.fr/2015/07/pst-crayon-dessiner-un-a.html
http://pstricks.blogspot.fr/2015/07/pst-crayon-dessiner-lesperluette.html
http://pstricks.blogspot.fr/2015/07/pst-crayon-aiguiser-des-crayons-de_4.html
http://pstricks.blogspot.fr/2015/07/pst-crayon-aiguiser-des-crayons-de.html
Pour créer les fichiers des chemins des années 2015 et 2016 (LaTeX->DVIPS->GS)
\documentclass{article}
\usepackage{pst-crayon}
\begin{document}
Les fichiers des chemins de 2015 et 2016
% générer les fichiers des chemins (2015 puis 2016)
\psCharPath[text=2015,fontsize=150,setflat=2,PSfont=NewCenturySchlbk-Roman]
\psCharPath[text=2016,fontsize=150,setflat=2,PSfont=NewCenturySchlbk-Roman]
\end{document}
Le code pour créer un fichier pdf contenant toutes les images pour l'animation :
\documentclass{article}
\usepackage[paperwidth=12cm,paperheight=8.3cm,hmargin={0cm,0cm},vmargin={0cm,0cm},dvips]{geometry}
\usepackage{pst-crayon}
\pagestyle{empty}
\begin{document}
\psset{RotSequence=yxz}
% générer les fichiers des chemins (2015 puis 2016)
%\begin{center}
%\psCharPath[text=2016,fontsize=150,setflat=2,PSfont=NewCenturySchlbk-Roman]
%\end{center}
\def\DATASF{%2015
/tabF0 [(2015-0-68.dat) run] def
/tabF1 [(2015-1-33.dat) run] def
/tabF2 [(2015-2-29.dat) run] def
/tabF3 [(2015-3-37.dat) run] def
/tabF4 [(2015-4-91.dat) run] def
}%
\def\DATASS{%2016
/tabS0 [(2016-0-68.dat) run] def
/tabS1 [(2016-1-33.dat) run] def
/tabS2 [(2016-2-29.dat) run] def
/tabS3 [(2016-3-37.dat) run] def
/tabS4 [(2016-4-61.dat) run] def
/tabS5 [(2016-5-21.dat) run] def
}%
\begin{center}
\begin{pspicture}(-3.5,-5.8)(8.5,2.5)
\psframe[fillstyle=solid,fillcolor={[rgb]{0.47 0.71 1}}](-3.5,-5.8)(8.5,2.5)
\psset{lightsrc=viewpoint,viewpoint=100 20 30 rtp2xyz,Decran=50,solidmemory}
\psSolid[object=grille,base=-4 1 -1 13,ngrid=5 10,linewidth=0.01,linecolor=blue,RotY=90](0,0,0)
\psSolid[object=plan,definition=equation,args={[1 0 0 0] 90},name=P0,base=-4 4 -4 6,action=none]
\psProjection[object=texte,PSfont=NewCenturySchlbk-Roman,
fontsize=150,linecolor=yellow!50,
text=2015,
pos=br,
plan=P0](0.15,0)%
\pstVerb{\DATASF}%
\psset{object=line,plan=P0,linecolor={[rgb]{0 0.5 0}},linewidth=0.05}
\multido{\iB=0+1}{5}{\psProjection[args=tabF\iB\space aload pop]}%
\end{pspicture}\newpage
\begin{pspicture}(-3.5,-5.8)(8.5,2.5)
\psframe[fillstyle=solid,fillcolor={[rgb]{0.47 0.71 1}}](-3.5,-5.8)(8.5,2.5)
\psset{lightsrc=viewpoint,viewpoint=100 20 30 rtp2xyz,Decran=50,solidmemory}
\psSolid[object=grille,base=-4 1 -1 13,ngrid=5 10,linewidth=0.01,linecolor=blue,RotY=90](0,0,0)
\psSolid[object=plan,definition=equation,args={[1 0 0 0] 90},name=P0,base=-4 4 -4 6,action=none]
\psProjection[object=texte,PSfont=NewCenturySchlbk-Roman,
fontsize=150,linecolor=yellow!50,
text=201,
pos=br,
plan=P0](0.15,0)%
\pstVerb{\DATASF}%
\psset{object=line,plan=P0,linecolor={[rgb]{0 0.5 0}},linewidth=0.05}
\multido{\iB=0+1}{5}{\psProjection[args=tabF\iB\space aload pop]}%
\end{pspicture}
\newpage
\multido{\i=182+-2}{90}{% défaire le 5
\begin{pspicture}(-3.5,-5.8)(8.5,2.5)
\psframe[fillstyle=solid,fillcolor={[rgb]{0.47 0.71 1}}](-3.5,-5.8)(8.5,2.5)
\psset{lightsrc=viewpoint,viewpoint=100 20 30 rtp2xyz,Decran=50,solidmemory}
\psSolid[object=grille,base=-4 1 -1 13,ngrid=5 10,linewidth=0.01,linecolor=blue,RotY=90](0,0,0)
\psSolid[object=plan,definition=equation,args={[1 0 0 0] 90},name=P0,base=-4 4 -4 6,action=none]
\psProjection[object=texte,PSfont=NewCenturySchlbk-Roman,
fontsize=150,linecolor=yellow!50,
text=201,
pos=br,
plan=P0](0.15,0)%
\pstVerb{\DATASF /II \i\space 2 sub def }%
\psset{object=line,plan=P0,linecolor={[rgb]{0 0.5 0}},linewidth=0.05}
%%
\multido{\iB=0+1}{4}{\psProjection[args=tabF\iB\space aload pop]}
% \fi
\psProjection[args=tabF4\space 0 II getinterval aload pop]
\psCrayonC[RotY=90,RotX=10,pencolor={[rgb]{0.95 0.95 0.95}},grid,h=10,r=0.5,phi=10]%
(0,tabF4\space II 2 sub get,tabF4\space II 1 sub get)
\end{pspicture}\newpage}
%
\newpage
\multido{\i=0+2}{61}{% faire le 6
\begin{pspicture}(-3.5,-5.8)(8.5,2.5)
\psframe[fillstyle=solid,fillcolor={[rgb]{0.47 0.71 1}}](-3.5,-5.8)(8.5,2.5)
\psset{lightsrc=viewpoint,viewpoint=100 20 30 rtp2xyz,Decran=50,solidmemory}
\psSolid[object=grille,base=-4 1 -1 13,ngrid=5 10,linewidth=0.01,linecolor=blue,RotY=90](0,0,0)
\psSolid[object=plan,definition=equation,args={[1 0 0 0] 90},name=P0,base=-4 4 -4 6,action=none]
\psProjection[object=texte,PSfont=NewCenturySchlbk-Roman,
fontsize=150,linecolor=yellow!50,
text=201,
pos=br,
plan=P0](0.15,0)%
\pstVerb{\DATASS /II \i\space 2 add def }%
\psset{object=line,plan=P0,linecolor={[rgb]{0 0.5 0}},linewidth=0.05}
%%
\multido{\iB=0+1}{4}{\psProjection[args=tabS\iB\space aload pop]}
% \fi
\psProjection[args=tabS4 0 II getinterval aload pop]
\psCrayonC[RotY=90,RotX=10,pencolor={[rgb]{0 0.5 0}},grid,h=15,r=0.5]%
(0,tabS4\space II 2 sub get,tabS4\space II 1 sub get)
\end{pspicture}\newpage}
%
\multido{\i=0+2}{21}{% faire l'intérieur du 6
\begin{pspicture}(-3.5,-5.8)(8.5,2.5)
\psframe[fillstyle=solid,fillcolor={[rgb]{0.47 0.71 1}}](-3.5,-5.8)(8.5,2.5)
\psset{lightsrc=viewpoint,viewpoint=100 20 30 rtp2xyz,Decran=50,solidmemory}
\psSolid[object=grille,base=-4 1 -1 13,ngrid=5 10,linewidth=0.01,linecolor=blue,RotY=90](0,0,0)
\psSolid[object=plan,definition=equation,args={[1 0 0 0] 90},name=P0,base=-4 4 -4 6,action=none]
\psProjection[object=texte,PSfont=NewCenturySchlbk-Roman,
fontsize=150,linecolor=yellow!50,
text=201,
pos=br,
plan=P0](0.15,0)%
\pstVerb{\DATASS /II \i\space 2 add def }%
\psset{object=line,plan=P0,linecolor={[rgb]{0 0.5 0}},linewidth=0.05}
%%
\multido{\iB=0+1}{5}{\psProjection[args=tabS\iB\space aload pop]}
% \fi
\psProjection[args=tabS5 0 II getinterval aload pop]
\psCrayonC[RotY=90,RotX=10,pencolor={[rgb]{0 0.5 0}},grid,h=15,r=0.5]%
(0,tabS5\space II 2 sub get,tabS5\space II 1 sub get)
\end{pspicture}\newpage}
%
\begin{pspicture}(-3.5,-5.8)(8.5,2.5)
\psframe[fillstyle=solid,fillcolor={[rgb]{0.47 0.71 1}}](-3.5,-5.8)(8.5,2.5)
\psset{lightsrc=viewpoint,viewpoint=100 20 30 rtp2xyz,Decran=50,solidmemory}
\psSolid[object=grille,base=-4 1 -1 13,ngrid=5 10,linewidth=0.01,linecolor=blue,RotY=90](0,0,0)
\psSolid[object=plan,definition=equation,args={[1 0 0 0] 90},name=P0,base=-4 4 -4 6,action=none]
\psProjection[object=texte,PSfont=NewCenturySchlbk-Roman,
fontsize=150,linecolor=yellow!50,
text=2016,
pos=br,
plan=P0](0.15,0)%
\pstVerb{\DATASS}%
\psset{object=line,plan=P0,linecolor={[rgb]{0 0.5 0}},linewidth=0.05}
\multido{\iB=0+1}{6}{\psProjection[args=tabS\iB\space aload pop]}%
\end{pspicture}
\end{center}
\end{document}
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}
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}
samedi 31 octobre 2015
Hélice tournant autour de son axe et son image dans un miroir
C'est une actualisation d'un fichier déposé sur :
http://melusine.eu.org/syracuse/pstricks/pst-solides3d/animations/a61/
\documentclass{article}
\usepackage[paperwidth=10cm,paperheight=7cm,hmargin={0cm,0cm},vmargin={0cm,0cm},dvips]{geometry}
\usepackage{pst-solides3d}
% Jean-Paul Vignault
% Manuel Luque
\pagestyle{empty}
\begin{document}
\psset{lightsrc=75 -63 17 rtp2xyz,viewpoint=100 -50 10 rtp2xyz,Decran=50}
\begin{center}
\multido{\iRotZ=0+10}{36}{
\begin{pspicture}(-5,-3)(5,4)
\psframe(-5,-3)(5,4)
\pstVerb{/iRotZ \iRotZ\space def /ncases 14 def}%
\psSolid[object=grille,base=-7 7 -7 7,ngrid=ncases ncases,linewidth=0.001,action=draw](0,0,-3.5)
\defFunction[algebraic]{helix}(u,v)%
{2*(0.5*cos(v)-1)*cos(u)}
{2*(0.5*cos(v)-1)*sin(u)}
{0.5*sin(v)+0.3*u}
\codejps{
/helice
-10 10 0 2 pi mul [200 0.314] {helix} newsurfaceparametree
{0 0 iRotZ rotateOpoint3d} solidtransform
{0 -4 0 translatepoint3d} solidtransform
dup solidfacesreverse
def
/helicesym
helice dupsolid exch pop
{[0 1 0 0] symplan3d} solidtransform
dup solidfacesreverse
def
/solidgrid false def
0.0001 setlinewidth
solidlightOn
helicesym dup [0 1 0.5 1] solidputhuecolors dup (White) inputcolors
drawsolid**
.5 setfillopacity
[0 1 0 0] eq2plan
dup [-7 7 -5 3.5] planputrange
dup [14. 8.5] planputngrid
newplan
dup (0.744 0.764 0.92 setrgbcolor) dup inoutputcolors
drawsolid**
helice dup [0 1 0.5 1] solidputhuecolors dup (White) inputcolors
1 setfillopacity
drawsolid**}%
\end{pspicture}\newpage}
\end{center}
\end{document}
Une des méthodes(celle que j'ai utilisée) pour produire le Gif animé est la suivante :
Ce fichier est compilé de manière à obtenir un fichier pdf de 36 pages par la séquence :
LaTeX -> dvips -> ps2pdf
Puis les pages sont séparées avec pdfsam(PDF Split And Merge):
http://www.pdfsam.org/
Ensuite avec The Gimp, les 36 images au format pdf sont converties au format png(ou gif) avec le plugin "Batch processes multiple images" :
http://members.ozemail.com.au/~hodsond/dbp.html
Dernière étape, le Gif animé est créé avec ImageMagick par la commande :
convert -delay 20 -loop 0 *.png helice.gif
http://www.imagemagick.org/script/binary-releases.php
http://melusine.eu.org/syracuse/pstricks/pst-solides3d/animations/a61/
\documentclass{article}
\usepackage[paperwidth=10cm,paperheight=7cm,hmargin={0cm,0cm},vmargin={0cm,0cm},dvips]{geometry}
\usepackage{pst-solides3d}
% Jean-Paul Vignault
% Manuel Luque
\pagestyle{empty}
\begin{document}
\psset{lightsrc=75 -63 17 rtp2xyz,viewpoint=100 -50 10 rtp2xyz,Decran=50}
\begin{center}
\multido{\iRotZ=0+10}{36}{
\begin{pspicture}(-5,-3)(5,4)
\psframe(-5,-3)(5,4)
\pstVerb{/iRotZ \iRotZ\space def /ncases 14 def}%
\psSolid[object=grille,base=-7 7 -7 7,ngrid=ncases ncases,linewidth=0.001,action=draw](0,0,-3.5)
\defFunction[algebraic]{helix}(u,v)%
{2*(0.5*cos(v)-1)*cos(u)}
{2*(0.5*cos(v)-1)*sin(u)}
{0.5*sin(v)+0.3*u}
\codejps{
/helice
-10 10 0 2 pi mul [200 0.314] {helix} newsurfaceparametree
{0 0 iRotZ rotateOpoint3d} solidtransform
{0 -4 0 translatepoint3d} solidtransform
dup solidfacesreverse
def
/helicesym
helice dupsolid exch pop
{[0 1 0 0] symplan3d} solidtransform
dup solidfacesreverse
def
/solidgrid false def
0.0001 setlinewidth
solidlightOn
helicesym dup [0 1 0.5 1] solidputhuecolors dup (White) inputcolors
drawsolid**
.5 setfillopacity
[0 1 0 0] eq2plan
dup [-7 7 -5 3.5] planputrange
dup [14. 8.5] planputngrid
newplan
dup (0.744 0.764 0.92 setrgbcolor) dup inoutputcolors
drawsolid**
helice dup [0 1 0.5 1] solidputhuecolors dup (White) inputcolors
1 setfillopacity
drawsolid**}%
\end{pspicture}\newpage}
\end{center}
\end{document}
Une des méthodes(celle que j'ai utilisée) pour produire le Gif animé est la suivante :
Ce fichier est compilé de manière à obtenir un fichier pdf de 36 pages par la séquence :
LaTeX -> dvips -> ps2pdf
Puis les pages sont séparées avec pdfsam(PDF Split And Merge):
http://www.pdfsam.org/
Ensuite avec The Gimp, les 36 images au format pdf sont converties au format png(ou gif) avec le plugin "Batch processes multiple images" :
http://members.ozemail.com.au/~hodsond/dbp.html
Dernière étape, le Gif animé est créé avec ImageMagick par la commande :
convert -delay 20 -loop 0 *.png helice.gif
http://www.imagemagick.org/script/binary-releases.php
dimanche 11 octobre 2015
Ce que voit un poisson du mode aérien
C'est en quelque sorte, un complément à tous les articles précédents concernant la réfraction.
Tous les fichiers : document pdf, sources etc. sont archivés dans le dossier (refraction3d-2.zip) dans :
Ce sujet a été traité dans la revue Pour la Science, mai 1984 n◦79 dans la rubrique “Expériences d’amateur” : Comment les poissons voient les pêcheurs et leurs appâts, par Jearl Walker. et par Iakov Perelman, dans le tome 2 de Physique récréative qui a écrit sur ce sujet un chapitre intitulé : “Le monde tel qu’on le voit d’au dessous l’eau”.
Voici un aperçu du contenu du dossier :
La “fenêtre” de vision du poisson :
Quelques images de ce que pourrait voir un poisson du monde aérien, calculées avec PSTricks et le package pst-solides3d.
Des bâtons verticaux : la partie bleue est immergée.
Ces bâtons en vison directe :
Le premier dessin représente la vue du poisson, le deuxième les positions des cylindres disposés sur une même droite mais à la même distance que dans le dessin précédent, ainsi que le cône de vison.
Une araignée d’eau se déplaçant à la surface de l’eau, elle est vue par un poisson situé à 8 cm de profondeur. Le cercle représente la fenêtre de vision.
L’araignée paraît plus petite, mais la déformation n’est pas très appréciable. Cependant, si on observe la scène d’un autre point de vue avec les coordonnées calculées, la déformation(l’anamorphose) existe bien, mais de son point de vue, le poisson, dans cet effet de perspective conique, perçoit peu cette déformation. Cette déformation apparaît dans le deuxième dessin, toujours à droite, l’image observée sans réfraction.
Dans cette série de dessins, un cafard de promène sur une toile quadrillée horizontale située au-dessus de l’eau et soutenue par quatre piliers. La hauteur des piliers et donc de la toile pourra être choisie. Voici le dessin en perspective du dispositif (le cafard a été, pour ce dessin, exagérément grossi).
Cette fois-ci la déformation du quadrillage est évidente. Elle sera d’autant plus marquée que la toile sera proche de la surface de l’eau, autrement dit plus elle s’étendra au-delà du cône de vision et plus la déformation sur les bords sera grande. On peut donc dire que le poisson a une vision anamorphosée du monde aérien. Voici un autre exemple, la toile sur laquelle se déplace le cafard a été rabaissée à 5 cm et le cafard éloigné du centre.
Maintenant, un ballon traverse l'étendue de l'étang, en roulant à la surface, sur laquelle a été déposé un quadrillage(très légèrement au-dessus de l'eau).
Les fichiers (animation-ballon.tex et animation-ballon.pdf)à compiler par LaTeX -> DVIPS -> ps2pdf :
Tous les fichiers : document pdf, sources etc. sont archivés dans le dossier (refraction3d-2.zip) dans :
Ce sujet a été traité dans la revue Pour la Science, mai 1984 n◦79 dans la rubrique “Expériences d’amateur” : Comment les poissons voient les pêcheurs et leurs appâts, par Jearl Walker. et par Iakov Perelman, dans le tome 2 de Physique récréative qui a écrit sur ce sujet un chapitre intitulé : “Le monde tel qu’on le voit d’au dessous l’eau”.
Voici un aperçu du contenu du dossier :
La “fenêtre” de vision du poisson :
Quelques images de ce que pourrait voir un poisson du monde aérien, calculées avec PSTricks et le package pst-solides3d.
Des bâtons verticaux : la partie bleue est immergée.
Ces bâtons en vison directe :
Le premier dessin représente la vue du poisson, le deuxième les positions des cylindres disposés sur une même droite mais à la même distance que dans le dessin précédent, ainsi que le cône de vison.
Une araignée d’eau se déplaçant à la surface de l’eau, elle est vue par un poisson situé à 8 cm de profondeur. Le cercle représente la fenêtre de vision.
L’araignée paraît plus petite, mais la déformation n’est pas très appréciable. Cependant, si on observe la scène d’un autre point de vue avec les coordonnées calculées, la déformation(l’anamorphose) existe bien, mais de son point de vue, le poisson, dans cet effet de perspective conique, perçoit peu cette déformation. Cette déformation apparaît dans le deuxième dessin, toujours à droite, l’image observée sans réfraction.
Dans cette série de dessins, un cafard de promène sur une toile quadrillée horizontale située au-dessus de l’eau et soutenue par quatre piliers. La hauteur des piliers et donc de la toile pourra être choisie. Voici le dessin en perspective du dispositif (le cafard a été, pour ce dessin, exagérément grossi).
Cette fois-ci la déformation du quadrillage est évidente. Elle sera d’autant plus marquée que la toile sera proche de la surface de l’eau, autrement dit plus elle s’étendra au-delà du cône de vision et plus la déformation sur les bords sera grande. On peut donc dire que le poisson a une vision anamorphosée du monde aérien. Voici un autre exemple, la toile sur laquelle se déplace le cafard a été rabaissée à 5 cm et le cafard éloigné du centre.
Maintenant, un ballon traverse l'étendue de l'étang, en roulant à la surface, sur laquelle a été déposé un quadrillage(très légèrement au-dessus de l'eau).
Les fichiers (animation-ballon.tex et animation-ballon.pdf)à compiler par LaTeX -> DVIPS -> ps2pdf :
samedi 26 septembre 2015
Phénomènes de réfraction en 3D - version 2 (Refraction of Water)
C'est la suite des articles :
http://pstricks.blogspot.fr/2015/09/phenomenes-de-refracction-en-3d.html
et :
http://pstricks.blogspot.fr/2015/09/phenomenes-dus-la-refraction-mise-jour-1.html
La macro \refraction permet maintenant de gérer les valeurs de zA positives.
L’expérience du bâton brisé dans l’eau : nous aurons l’illusion que le bâton se brise dans l’eau en changeant le point de vue.
Les nouveaux fichiers sont ici :
Pour simuler les phénomènes d’optique, POVRAY est un outil idéal, aucun calcul n’est à coder, il suffit de donner l’indice de réfraction du milieu (ior=1.33) et je l’ai déjà utilisé à plusieurs reprises dans ce blog :
http://pstricks.blogspot.fr/
par exemple ici :
http://pstricks.blogspot.fr/2011/12/dispersion-par-un-prisme-simulation.html
et plus généralement :
http://pstricks.blogspot.fr/2011/08/pov-ray-vs-pstricks.html
L’expérience du bâton brisé dans l’eau a été représentée avec POVRAY en particulier par Friedrich Lohmueller :
http://www.f-lohmueller.de/pov_tut/backgrnd/p_wat5f.htm
et dans le blog(dont je ne connais pas le nom de l’auteur) :
http://blog.biophysengr.net/2012/07/tutorial-refraction-in-povray.html
Ces deux exemples sont très bien réalisés, et de plus le code est fourni par les auteurs.
Remarque :
on pourra ajouter un petit poison rouge dans le bassin, en incorporant les fichiers suivants dans le répertoire de compilation :
fish-couleurs.dat
fish-faces.dat
fish-io.dat
fish-sommets.dat
qui sont dans le répertoire :
et en ajoutant, à la fin du dernier environnement \begin{pspicture}...\end{pspicture} le code suivant (en gras) :
\psSolid[object=load,name=Cyl1,fillcolor={[rgb]{0.88 0.8 0.6 }}]
\psSolid[object=datfile,file=fish,transform=\refraction,
color1=red!50,
color2=red,hue=(color1) (color2),grid]
\psSolid[object=cylindre,r=0.25,h=16,fillcolor={[rgb]{0.88 0.8 0.6 }},RotX=alpha](0,-4,1)
http://pstricks.blogspot.fr/2015/09/phenomenes-de-refracction-en-3d.html
et :
http://pstricks.blogspot.fr/2015/09/phenomenes-dus-la-refraction-mise-jour-1.html
La macro \refraction permet maintenant de gérer les valeurs de zA positives.
L’expérience du bâton brisé dans l’eau : nous aurons l’illusion que le bâton se brise dans l’eau en changeant le point de vue.
Les nouveaux fichiers sont ici :
http://pstricks.blogspot.fr/
par exemple ici :
http://pstricks.blogspot.fr/2011/12/dispersion-par-un-prisme-simulation.html
et plus généralement :
http://pstricks.blogspot.fr/2011/08/pov-ray-vs-pstricks.html
L’expérience du bâton brisé dans l’eau a été représentée avec POVRAY en particulier par Friedrich Lohmueller :
http://www.f-lohmueller.de/pov_tut/backgrnd/p_wat5f.htm
et dans le blog(dont je ne connais pas le nom de l’auteur) :
http://blog.biophysengr.net/2012/07/tutorial-refraction-in-povray.html
Ces deux exemples sont très bien réalisés, et de plus le code est fourni par les auteurs.
Remarque :
on pourra ajouter un petit poison rouge dans le bassin, en incorporant les fichiers suivants dans le répertoire de compilation :
fish-couleurs.dat
fish-faces.dat
fish-io.dat
fish-sommets.dat
qui sont dans le répertoire :
et en ajoutant, à la fin du dernier environnement \begin{pspicture}...\end{pspicture} le code suivant (en gras) :
\psSolid[object=load,name=Cyl1,fillcolor={[rgb]{0.88 0.8 0.6 }}]
\psSolid[object=datfile,file=fish,transform=\refraction,
color1=red!50,
color2=red,hue=(color1) (color2),grid]
\psSolid[object=cylindre,r=0.25,h=16,fillcolor={[rgb]{0.88 0.8 0.6 }},RotX=alpha](0,-4,1)
mercredi 23 septembre 2015
Phénomènes de réfraction en 3D (Refraction of Water)
Que voyons-nous d’un objet en 3 dimensions plongé dans l’eau ? Dans cette étude simplifiée, l’oeil de l’observateur est placé sur l’axe vertical Oz, le centre de la pupille est repéré par les coordonnées (0, 0, zB) et son rayon noté r. L’objet observé est à une certaine profondeur et l’on s’intéresse à l’un de ses points A(xA, yA, zA < 0). On suit le trajet des rayons réfractés dans l’air depuis A et qui aboutissent aux 2 bords diamétralement opposés de la pupille situés dans le plan vertical passant par B et A et situés sur une horizontale. Dans ce cas les rayons réfractés appartiennent à ce plan vertical et leur prolongement dans l’eau se coupent en un point V qui est l’image de A, c’est ce point image V qui est vu par l’observateur. Cette façon simplifiée de déterminer le point virtuel V permet de s’affranchir des problèmes d’astigmatisme et ainsi de rendre les calculs plus simples.
Les explications complémentaires sont dans le document (refraction3d.pdf et refraction3d.tex) situé dans le répertoire :
Des objets sont placés dans une piscine et voici ce que l'observateur devrait voir et ce qu'il verrait si la piscine était vidée :
Les coordonnées d’un objet de pst-solides3d vu par réfraction, sont calculées avec l’option transform=\refraction. Il faut s’assurer que la coordonnée z est bien strictement négative.
Voir la mise-à-jour :
http://pstricks.blogspot.fr/2015/09/phenomenes-de-refraction-en-3d-version-2.html
samedi 12 septembre 2015
Phénomènes dus à la réfraction - mise à jour 1 (Refraction of Water)
Nouvelle commande : \listplotR
Le tracé d'un contour polygonal est fonctionnel : \pspolygonR[...](x0,y0)(x1,y1)(...)(xn,yn)
Ce sont des exemples d’utilisation de la commande \listplotR[...]{x0 y0 x1 y1 ...}, qui est l’analogue de la commande PSTricks \listplot[...]{x0 y0 x1 y1 ...}, mais dont les coordonnées sont calculées pour obtenir l’image par réfraction d’un objet, ici une amphore, ou d’un poisson.
Quelques images illustrant cette commande.
L’amphore dont seul le contour est dessiné est dans sa position réelle, l’amphore colorée est l’image vue par le spectateur.
L’amphore couchée au fond de l’eau et un poisson. La première image représente les positions réelles, la seconde les images vues.
Cette dernière image illustre le tracé d'une paire de rayons réfractés issus d'un point de la sardine.
Les fichiers sont regroupés dans cette archive (refraction.zip) du répertoire :
Image d'un damier :
\begin{pspicture}(0,-10)(10,6)
\psframe*[linecolor=eau](0,-10)(10,0)
\psframe*[linecolor=white](1.75,-9.25)(8.25,-2.75)
\multido{\ry=-8.75+1,\rY=-8.25+1}{6}{
\multido{\n=2.25+1.00,\N=2.75+1.00}{6}{%
\psframe*[linecolor=red](\n,\ry)(\N,\rY)}
}
\multido{\ry=-9.25+1,\rY=-8.75+1}{7}{
\multido{\n=1.75+1.00,\N=2.25+1.00}{7}{%
\psframe*[linecolor=blue](\n,\ry)(\N,\rY)}
}
\psframe(1.75,-9.25)(8.25,-2.75)
\psframe(0,-10)(10,6)
\end{pspicture}
\begin{pspicture}(0,-10)(10,6)
\psset{xObserver=5,yObserver=1,SizeObserver=0.5,abscisseDirectionRegard=5.01}
\EyeDraw
\psframe*[linecolor=eau](0,-10)(10,0)
\psframeR*[linecolor=white](1.75,-9.25)(8.25,-2.75)
\multido{\ry=-8.75+1,\rY=-8.25+1}{6}{
\multido{\n=2.25+1.00,\N=2.75+1.00}{6}{%
\psframeR*[linecolor=red](\n,\ry)(\N,\rY)}
}
\multido{\ry=-9.25+1,\rY=-8.75+1}{7}{
\multido{\n=1.75+1.00,\N=2.25+1.00}{7}{%
\psframeR*[linecolor=blue](\n,\ry)(\N,\rY)}
}
\psframeR(1.75,-9.25)(8.25,-2.75)
\psframe(0,-10)(10,6)
\end{pspicture}
Le tracé d'un contour polygonal est fonctionnel : \pspolygonR[...](x0,y0)(x1,y1)(...)(xn,yn)
Ce sont des exemples d’utilisation de la commande \listplotR[...]{x0 y0 x1 y1 ...}, qui est l’analogue de la commande PSTricks \listplot[...]{x0 y0 x1 y1 ...}, mais dont les coordonnées sont calculées pour obtenir l’image par réfraction d’un objet, ici une amphore, ou d’un poisson.
Quelques images illustrant cette commande.
L’amphore dont seul le contour est dessiné est dans sa position réelle, l’amphore colorée est l’image vue par le spectateur.
L’amphore couchée au fond de l’eau et un poisson. La première image représente les positions réelles, la seconde les images vues.
Cette dernière image illustre le tracé d'une paire de rayons réfractés issus d'un point de la sardine.
Les fichiers sont regroupés dans cette archive (refraction.zip) du répertoire :
Image d'un damier :
\begin{pspicture}(0,-10)(10,6)
\psframe*[linecolor=eau](0,-10)(10,0)
\psframe*[linecolor=white](1.75,-9.25)(8.25,-2.75)
\multido{\ry=-8.75+1,\rY=-8.25+1}{6}{
\multido{\n=2.25+1.00,\N=2.75+1.00}{6}{%
\psframe*[linecolor=red](\n,\ry)(\N,\rY)}
}
\multido{\ry=-9.25+1,\rY=-8.75+1}{7}{
\multido{\n=1.75+1.00,\N=2.25+1.00}{7}{%
\psframe*[linecolor=blue](\n,\ry)(\N,\rY)}
}
\psframe(1.75,-9.25)(8.25,-2.75)
\psframe(0,-10)(10,6)
\end{pspicture}
\begin{pspicture}(0,-10)(10,6)
\psset{xObserver=5,yObserver=1,SizeObserver=0.5,abscisseDirectionRegard=5.01}
\EyeDraw
\psframe*[linecolor=eau](0,-10)(10,0)
\psframeR*[linecolor=white](1.75,-9.25)(8.25,-2.75)
\multido{\ry=-8.75+1,\rY=-8.25+1}{6}{
\multido{\n=2.25+1.00,\N=2.75+1.00}{6}{%
\psframeR*[linecolor=red](\n,\ry)(\N,\rY)}
}
\multido{\ry=-9.25+1,\rY=-8.75+1}{7}{
\multido{\n=1.75+1.00,\N=2.25+1.00}{7}{%
\psframeR*[linecolor=blue](\n,\ry)(\N,\rY)}
}
\psframeR(1.75,-9.25)(8.25,-2.75)
\psframe(0,-10)(10,6)
\end{pspicture}
mercredi 9 septembre 2015
Phénomènes dus à la réfraction (Refraction of Water)
Du bord d'un étang, d'une rivière, lorsqu’il nous arrive de regarder dans l’eau, les images que nous percevons du monde aquatique, poissons et objets qui s’y trouvent nous apparaissent différentes de ce qu’ils sont en réalité, ils nous semblent plus proches, plus petits, distordus. Le but de ce modeste article est d’essayer d’interpréter ce phénomène.
Pour dessiner les illustrations de ce document, qui est une mise à jour d'un premier essai datant de 2003 et qui avait servi pour rédiger un article dans la revue Tangente n° HS 35, j'ai utilisé un package : pst-refraction. Le document , fichier pdf, source et package sont téléchargeables ici (refraction.zip) dans le répertoire :
Quelques images obtenues avec le package et qui sont incluses dans le document (refraction_doc_version_2015.pdf) du dossier précédent :
J'ai représenté en gris, la position réelle du poisson et du fond de l'étang, les images virtuelles, celles qui sont perçues par l'observateur, sont en couleurs.
Remarque : pour calculer et dessiner la caustique du prolongement des rayons rayons réfractés, un observateur n’est point nécessaire.
La caustique est l’enveloppe de ces rayons, il suffit, dans un premier temps, de connaître l’équation d’un rayon réfracté issu d’un point de l’eau. Soit A ce point et H la profondeur à laquelle il est situé. L’axe vertical Oy passe par ce point et l’axe horizontal Ox est sur la surface de l’eau.
La suite : explications et calculs dans le fichier (.tex et .pdf)
caustique-refraction-2.tex et caustique-refraction-2.pdf du répertoire indiqué au début :
Pour dessiner les illustrations de ce document, qui est une mise à jour d'un premier essai datant de 2003 et qui avait servi pour rédiger un article dans la revue Tangente n° HS 35, j'ai utilisé un package : pst-refraction. Le document , fichier pdf, source et package sont téléchargeables ici (refraction.zip) dans le répertoire :
J'ai représenté en gris, la position réelle du poisson et du fond de l'étang, les images virtuelles, celles qui sont perçues par l'observateur, sont en couleurs.
À l'inverse, ce que devrait percevoir un poisson du monde aérien.
L'image d'un texte.
Une autre scène, en gris les positions réelles, les images virtuelles sont en couleurs.
La caustique des rayons réfractés.
Remarque : pour calculer et dessiner la caustique du prolongement des rayons rayons réfractés, un observateur n’est point nécessaire.
La caustique est l’enveloppe de ces rayons, il suffit, dans un premier temps, de connaître l’équation d’un rayon réfracté issu d’un point de l’eau. Soit A ce point et H la profondeur à laquelle il est situé. L’axe vertical Oy passe par ce point et l’axe horizontal Ox est sur la surface de l’eau.
La suite : explications et calculs dans le fichier (.tex et .pdf)
caustique-refraction-2.tex et caustique-refraction-2.pdf du répertoire indiqué au début :
mercredi 2 septembre 2015
La synthèse soustractive des couleurs et l’option blendmode de PSTricks
C’est grâce à un article très élogieux, que lui a consacré le magazine Lire du mois de septembre 2015, que j’ai découvert le livre de Jérémie Fischer : “Wild about shapes”. Dans la version française, celui-ci s’appelle “Animaux” tout simplement.
Lorsqu’on ouvre le livre à une page quelconque, on trouve à gauche des aplats d’une seule couleur cyan, aux formes vagues et indistinctes et à droite un transparent d’une couleur unique soit jaune soit magenta, aux formes elles aussi vagues et indistinctes. Lorsqu’on rabat le transparent sur la page de gauche, un animal apparaît d’une couleur qui est le résultat de la superposition de celles du transparent et de la page. Par exemple : cyan+jaune =vert et un animal, girafe, tortue, pieuvre ou papillon, apparaît en vert. On aura reconnu la synthèse soustractive des couleurs.
Dans ce document (bendmode-exemples.pdf, bendmode-exemples.tex) de l'archive :
j'essaye d'analyser le procédé utilisé par l'auteur en utilisant 2 exemples qui n'ont aucune prétention artistique, pour cela achetez le livre de Jérémie Fischer. Dans le document les animations ont été réalisées avec le package animate d'Alexander Grahn.
J'extrais quelques images du document qui servent à illustrer les explications, par exemple le dessin de la silhouette du requin, et la séparation en 2 parties pour les couleurs.
Les animations au format Gif :
En ce qui concerne l'option blendmode avec PSTricks, voici les liens qui se rapportaient à ce thème :
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 (pstricks_blendmode.pdf, pstricks_blendmode.tex) inclus dans l'archive :
Un essai(le contour est simplement polygonal) d'animation en 3D avec le package pst-solides3d avec les fichiers (animate-shark-3d.pdf, animate-shark-3d.tex) de l'archive ci-dessus.
Lorsqu’on ouvre le livre à une page quelconque, on trouve à gauche des aplats d’une seule couleur cyan, aux formes vagues et indistinctes et à droite un transparent d’une couleur unique soit jaune soit magenta, aux formes elles aussi vagues et indistinctes. Lorsqu’on rabat le transparent sur la page de gauche, un animal apparaît d’une couleur qui est le résultat de la superposition de celles du transparent et de la page. Par exemple : cyan+jaune =vert et un animal, girafe, tortue, pieuvre ou papillon, apparaît en vert. On aura reconnu la synthèse soustractive des couleurs.
Dans ce document (bendmode-exemples.pdf, bendmode-exemples.tex) de l'archive :
j'essaye d'analyser le procédé utilisé par l'auteur en utilisant 2 exemples qui n'ont aucune prétention artistique, pour cela achetez le livre de Jérémie Fischer. Dans le document les animations ont été réalisées avec le package animate d'Alexander Grahn.
J'extrais quelques images du document qui servent à illustrer les explications, par exemple le dessin de la silhouette du requin, et la séparation en 2 parties pour les couleurs.
Les animations au format Gif :
En ce qui concerne l'option blendmode avec PSTricks, voici les liens qui se rapportaient à ce thème :
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 (pstricks_blendmode.pdf, pstricks_blendmode.tex) inclus dans l'archive :
Un essai(le contour est simplement polygonal) d'animation en 3D avec le package pst-solides3d avec les fichiers (animate-shark-3d.pdf, animate-shark-3d.tex) de l'archive ci-dessus.
Inscription à :
Articles (Atom)