Retour

Source de refraction_doc_version_dichotomie.tex

Fichier TeX
% mluque5130@aol.com
% 30 juin 2003-2 août 2003
% révision 8 juillet 2008
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[garamond]{mathdesign}
\renewcommand{\ttdefault}{lmtt}
\usepackage[a4paper,dvips,hmargin=2cm,vmargin=3cm]{geometry}
\usepackage[colorlinks=true,dvips]{hyperref}
\usepackage[frenchb]{babel}
\usepackage{pst-slpe}
\usepackage{graphicx}
\usepackage{pst-grad}
\usepackage{framed}
\usepackage{arrayjob}% Zhuhan Jiang : Zhuhan@turing.une.edu.au
% documentation de Denis Girou
\usepackage{pst-refraction}
\input poissons.tex
\input mesange.tex
\input poisson_spectateur.tex
\makeatletter
% pour dessiner les herbes folles
\def\pNodeIrand{\@ifnextchar[{\pst@pNodeIrand}{\pst@pNodeIrand[]}}
\def\pst@pNodeIrand[#1](#2,#3)#4{{%
\pst@killglue
\psset{#1}%
\pnode(! %
 /xa #2 \psk@pstRefraction@xPos\space add rand sin 0.2 mul add def % valeur de xa abscisse réelle du point observé
 /ya #3 \psk@pstRefraction@yPos\space add rand sin 0.5 mul add def % valeur de ya ordonnée réelle du point observé <0 !
 /xb \psk@pstRefraction@xObservateur\space def % valeur de xb
 /yb \psk@pstRefraction@yObservateur\space def % valeur de yb
 /eyewidth \psk@pstRefraction@eyewidth\space def % dimension de l'oeil
 /xMilieu \psk@abscisseDirectionRegard\space def
% chercher B1 et B2 limites de l'oeil
 /DistanceYB1YB2 eyewidth xMilieu xb sub dup mul
      xMilieu xb sub dup mul yb dup mul add
      div sqrt mul def
 /yB1 yb DistanceYB1YB2 sub def
 /yB2 yb DistanceYB1YB2 add def
 /xB1 yb yB1 yb sub mul xMilieu xb sub div xb add def
 /xB2 yb yB2 yb sub mul xMilieu xb sub div xb add def
 /n \psk@pstRefraction@indice\space def % indice de l'eau
      tx@RefractionDict begin Coor_Virtuel end){#4}
}}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Jean-Michel Sarlat et Guillaume Connan
\newenvironment{gbar}{%
  \def\FrameCommand{{\color{red}\vrule width 2pt}\colorbox{yellow!30}}%
  \MakeFramed {\advance\hsize-\width \FrameRestore}}%
{\endMakeFramed}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{Images vues par réfraction\\
version dichotomie}
\date{2 août 2003}
\begin{document}
\maketitle
\tableofcontents
\psset{SizeObserver=0.75}
\section{Présentation du problème}
Lorsqu'il nous arrive de regarder dans l'eau, les images que nous percevons
 des objets et des poissons 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 de comprendre ce phénomène.

Nous allons considérer dans une première étape un point lumineux
$A$ dans l'eau et un point $B$ dans l'air. Parmi tous les rayons
lumineux émis (ou diffusés) par ce point $A$, essayons de
déterminer la trajectoire du rayon qui après avoir traversé la
surface de l'eau passera par $B$. Ensuite, dans une deuxième étape
nous considérerons un objet ou un poisson dans l'eau et un
spectateur au-dessus de l'eau dont nous essayerons de reconstituer
l'image qu'il en perçoit. La position de l'observateur et du
poisson sera laissée à l'appréciation du lecteur.

Cette version utilise la méthode de bissection (dichotomie) pour trouver
l'abscisse du point d'incidence.
\section{Détermination du point d'incidence}
\begin{center}
\begin{pspicture}(0,-5)(10.5,5.5)
\psset{xObservateur=2,yObservateur=4}
\psframe*[linecolor=eau](0,-5)(10,0)
\psline{->}(10.5,0)
\psline{->}(0,-5)(0,5.5)
\pNodeI(8,-4){V}
\pnode(! xa ya){A}
\pnode(! xI1 0){I1}
\pnode(! xB1 yB1){B1}
\pnode(! xB1 0){Q}
\pnode(! xa 0){P}
\psline[linestyle=dotted](! xI1 -5)(! xI1 5)
\psarc(I1){1}{90}{133}
\rput(I1){\uput[111.5](1;111.5){$i_2$}}
\psarc[doubleline=true](I1){1}{270}{302}
\rput(I1){\uput[286](1;286){$i_1$}}
\psline[linecolor=red](A)(I1)(B1)
\psline[linestyle=dashed](B1)(Q)
\psline[linestyle=dashed](A)(P)
\uput[0](0,5.5){$y$}
\uput[0](10.5,0){$x$}
\uput[180](0,0){$O$}
\uput[45](I1){$I$}
\qdisk(A){1.5pt}
\uput[0](A){$A$}
\qdisk(B1){1.5pt}
\uput[90](B1){$B$}
\uput[-90](2,0){$Q$}
\uput[90](8,0){$P$}
\end{pspicture}
\end{center}
Il s'agit de calculer les coordonnées du point d'intersection
$I(x_I,y_I)$ d'un rayon lumineux émis par un point $A(x_A,y_A)$ situé dans la
piscine avec la surface de l'eau, pour qu'après réfraction en $I$(en
suivant les lois de \textsc{Descartes} $n_1\sin i_1=n_2\sin i_2$), ce rayon
parvienne au point $B(x_B,y_B)$ censé représenté un observateur. On
prendra $n_2=1$ pour l'air et $n_1=1.33$ pour l'eau. $i_1$ et
$i_2$ sont les angles mesurés par rapport à la normale.
\par
Les données sont donc $A(x_A,y_A)$ et $B(x_B,y_B)$. Il
s'agit de trouver $I(x_I,y_I)$. Si $P$ et $Q$ sont les projections
orthogonales de $A$ et $B$ sur la surface de l'eau $(\Pi)$, le point d'incidence $I$ appartient au segment $[PQ]$ :
 $$\overrightarrow{PI}=t\overrightarrow{PQ}\ \textrm{avec } t\in[0,1]$$
La figure précédente est dans le plan vertical passant par les points $A$ et $B$.
Le problème est donc de trouver $I$ aligné avec les projections
de $A$ et $B$ sur $(\Pi)$.
 $n=n_1/n_2$ est l'indice de l'eau par rapport à l'air. On peut modifier ce paramètre.
 \begin{equation}
 n\sin
 i_1=\frac{n|x_I-x_A|}{\sqrt{(x_I-x_A)^2+y_A^2}}=\frac{|x_I-x_B|}{\sqrt{(x_I-x_B)^2+y_B^2}}=\sin i_2
 \end{equation}
On cherche par la méthode de la bissection, adaptée de celle
exposée dans le livre de R.\textsc{Dony} : \textit{Graphisme
scientifique sur micro-ordinateur} publié chez Masson 1984/1985,
la racine de l'équation :
\begin{equation}
\frac{n|x_I-x_A|}{\sqrt{(x_I-x_A)^2+y_A^2}}-\frac{|x_I-x_B|}{\sqrt{(x_I-x_B)^2+y_B^2}}=0
 \end{equation}
comprise dans l'intervalle $[x_A,x_B]$. C'est une méthode qui
semble, apparemment, donner moins de problèmes de mise au point que celle de
\textsc{Newton}.
\section{Détermination de l'image virtuelle}
\subsection{Principe}
Il s'agit maintenant de placer un observateur terrestre (ou plutôt la
pupille de l'un de ses yeux dont on pourra paramétrer le diamètre en fonction de la luminosité) par les
coordonnées du centre de la pupille et de faire diriger le regard vers un
point du bassin qui pourra lui aussi être librement choisi.
\begin{center}
\begin{pspicture}(0,-7)(15,5)
\psframe*[linecolor=eau](0,-7)(15,0)
\psline{->}(15,0)
\psline{->}(0,-5)(0,5)
\psset{xObservateur=1,yObservateur=4}
\EyeDraw
\RefractionPsline[linecolor=blue,linewidth=0.5mm](8,-5)(13,-5)(13,-1)(8,-1)(8,-5)
\psline[linecolor=red,linewidth=0.5mm](8,-5)(13,-5)(13,-1)(8,-1)(8,-5)
\psgrid[subgriddiv=0,gridlabels=0,gridcolor=red,gridwidth=0.2mm](8,-5)(13,-1)
\multido{\iY=-5+1}{5}{%
\RefractionPsline[linecolor=blue,linewidth=0.2mm](8,\iY)(13,\iY)}
\multido{\iX=8+1}{6}{%
\RefractionPsline[linecolor=blue,linewidth=0.2mm](\iX,-5)(\iX,-1)}
\pNodeI(8,-5){V}
{\psset{linecolor=blue}\qdisk(V){2pt}}
\pnode(! xa ya ){A}
{\psset{linecolor=red}\qdisk(A){2pt}}
\pnode(! xb yb ){B}
\pnode(! xB1 yB1){B1}
\pnode(! xB2 yB2){B2}
\pnode(! xI1 0){I1}
\pnode(! xI2 0){I2}
\psline[linecolor=red](B1)(I1)(A)
\psline[linecolor=red](B2)(I2)(A)
\psset{arrowsize=0.2}
\pcline[nodesepB=2cm,linecolor=red]{->}(A)(I1)
\pcline[nodesepB=2cm,linecolor=red]{->>}(A)(I2)
\pcline[nodesepB=3cm,linecolor=red]{->}(I1)(B1)
\pcline[nodesepB=3cm,linecolor=red]{->>}(I2)(B2)
\psline[linestyle=dashed,linecolor=red](I2)(V)
\psline[linestyle=dashed,linecolor=red](I1)(V)
\RefractionPscircle[linecolor=blue,fillstyle=solid,fillcolor=CercleEau](10,-6){1}
\pscircle[linecolor=red,fillstyle=solid,fillcolor=CercleAir](10,-6){1}
\end{pspicture}
\end{center}
En rouge, la forme et la taille réelle des objets (grille et disque), en
bleu les objets tels qu'ils seraient perçus par le spectateur dans le plan
vertical. L'\oe{}il ne voit pas la ligne brisée, il interprète ce qu'il voit comme si les trajectoires des rayons étaient
rectilignes, d'où les illusions observées. Il faudrait bien sûr se placer dans un univers en trois dimensions
pour simuler de façon réaliste ce phénomène, peut-être dans un
prochain article ? Ne cachons pas qu'il y a des difficultés qui n'ont pu être
encore résolues !
\subsection{Influence du diamètre de la pupille}
Nous observons le coin opposé d'un rectangle, en élargissant progressivement
le diamètre d'ouverture de la pupille.
\begin{center}
\begin{pspicture}(0,-6)(15,8)
\psframe*[linecolor=eau](0,-6)(15,0)
\psset{xObservateur=0,yObservateur=7}
\multido{\nLargeurOeil=0.1+0.2}{10}{%
\psset{eyewidth=\nLargeurOeil}
\RefractionPsline[linecolor=blue](3,-5)(14,-5)(14,-1)(3,-1)(3,-5)
\psline[linecolor=red](3,-5)(14,-5)(14,-1)(3,-1)(3,-5)
\pNodeI(14,-5){V}
\qdisk(V){2pt}
\pnode(! xB1 yB1){B1}
\pnode(! xB2 yB2){B2}
%\psline[linecolor=red](B1)(B2)
\pnode(! xa ya ){A}
{\psset{linecolor=red}\qdisk(A){2pt}}
\pnode(! xb yb ){B}
\pnode(! xI1 0){I1}
\pnode(! xI2 0){I2}
\psline[linecolor=red](B1)(I1)(A)
\psline[linecolor=red](B2)(I2)(A)
\psline[linecolor=yellow](I1)(V)
\psline[linecolor=yellow](I2)(V)}
\end{pspicture}
\end{center}
Il apparaît que le diamètre d'ouverture a une faible incidence sur le point
virtuel image. L'image d'un point reste sensiblement toujours le même point
quelle que soit l'ouverture de la pupille.
\section{Applications}
Nous avons maintenant une méthode permettant par une transformation point par
point, de construire l'image de n'importe quel élément aquatique.

Certaines figures géométriques simples ont été pré-calculées. Dans ce
tableau, on trouve dans la première colonne la commande spéciale et dans la deuxième l'analogue de
PSTricks.
\begin{center}
\begin{tabular}{ll}
\verb+\pNodeI(xA,yA){V}+&\verb+\pnode(x,y){A}+\\
\verb+\RefractionPsline[...](x0,y0)(x1,y1)(...)(xn,yn)+&\verb+\psline[...](x0,y0)(x1,y1)(...)(xn,yn)+\\
\verb+\RefractionPscircle[...](xC,yC){R}+&\verb+\pscircle[...](xC,yC){R}+\\
\verb+\RefractionPsarc[...](xC,yC){R}{begin}{end}+&\verb+\psarc[...](xC,yC){R}{begin}{end}+\\
\verb+\RefractionPsframe[...](x1,y1)(x2,y2)+&\verb+\psframe[...](x1,y1)(x2,y2)+\\
\end{tabular}
\end{center}
\verb+\pNodeI(xA,yA){V}+ permet de déterminer l'image $V$ du point
$A(x_A,y_A)$. On n'oubliera pas qu'impérativement $y_A<0$.

Il y a aussi une commande permettant de tracer un polygone, elle n'est pas
finalisée mais fonctionne. Elle s'écrit :
\verb+\RefractionPspolygon[...]{(x0,y0)(x1,y1)(...)(xn,yn)}+

Ces simples commandes de base ont permis de réaliser les dessins
suivants.
\subsection{Carrelage et transparence}
\input carrelage
\begin{center}
\begin{pspicture}(0,-8)(15,5.5)
\psset{xObservateur=3,yObservateur=5}
\EyeDraw
\randomi=2568792
\psframe*[linecolor=eaupale](2,-8)(15,0)
\RefractionPsframe*[linecolor=eau](2,-8)(15,-0.1)
\RefractionDessinFond
  \psclip{\RefractionPscircle[linestyle=none](5,-5){2.5}}
\RefractionDessinTransparent
  \endpsclip
  \psclip{\RefractionPscircle[linestyle=none](12,-5){2.5}}
\RefractionDessinTransparent
  \endpsclip
\end{pspicture}
\end{center}
\subsection{Poisson tropical}
\begin{center}
\psset{unit=0.75}
\begin{pspicture}(0,-16)(17,8.5)
% xPos=-6,yPos=-1 permettent de déplacer le poisson et son image
% faire attention à ce que y calculé soit <0
% en grisé la position réelle du poisson
% en couleurs l'image observée
\psset{xObservateur=2,yObservateur=8,xPos=-4,yPos=-10}
\psframe*[linecolor=eau](0,-16)(17,0)
\EyeDraw
\psset{xPos=4,yPos=-10}
\pscircleXY[fillstyle=gradient,gradbegin=lightgray,gradend=white,linestyle=none](4,-2.5){0.15}
\pscircleXY[fillstyle=gradient,gradbegin=lightgray,gradend=white,linestyle=none](4,-2){0.2}
\pscircleXY[fillstyle=gradient,gradbegin=lightgray,gradend=white,linestyle=none](4,-1.5){0.25}
\makeatletter
\RefractionPscircle[fillstyle=gradient,gradbegin=eau,gradend=cyan,linestyle=none]%
                    (!4 \psk@pstRefraction@xPos\space add -2.5 \psk@pstRefraction@yPos\space add){0.15}
\RefractionPscircle[fillstyle=gradient,gradbegin=eau,gradend=cyan,linestyle=none]%
                    (!4 \psk@pstRefraction@xPos\space add -2 \psk@pstRefraction@yPos\space add){0.2}
\RefractionPscircle[fillstyle=gradient,gradbegin=eau,gradend=cyan,linestyle=none]%
                    (!4 \psk@pstRefraction@xPos\space add -1.5 \psk@pstRefraction@yPos\space add){0.25}
\makeatother
\poissonPosXY
\RefractionPoisson
\end{pspicture}
\end{center}
\subsection{Poulpe}
\begin{center}
\begin{pspicture}(0,-16)(17,5)
\psset{fillcolor=green}
\psframe*[linecolor=eau](0,-16)(17,0)
\psset{xObservateur=4,yObservateur=3,xPos=2,yPos=-6}
\EyeDraw
{\psset{fillstyle=solid,fillcolor=MonGris,linestyle=none}
\Poulpe}
\RefractionPoulpe
\end{pspicture}
\end{center}
\section{Les différents paramètres et leur rôle}
\begin{itemize}
  \item \texttt{n=1.333} : indice optique moyen de l'eau. On peut
  choisir une autre valeur pourvu qu'elle soit $>1$. Si on prend
  \texttt{n=1.001} image et objet sont pratiquement identiques.
  \item \texttt{eyewidth=0.2}, valeur par défaut du rayon de la pupille, ce qui donne une
  pupille de diamètre 4~mm.
  \item \texttt{SizeObserver=1}, valeur par défaut de la taille de
  la tête de l'observateur. L'option \texttt{[linewidth=...]}
  reste valable.
  \item \texttt{xObservateur=0,yObservateur=3} : ce sont les valeurs par défaut (en cm) de la position du
  milieu de la pupille.
  \item \texttt{abscisseDirectionRegard=7.5}, c'est en cm
  l'abscisse du point de la surface de l'eau vers lequel le regard
  est dirigé.

Nous allons promener l'observateur au-dessus de la surface de
l'eau, lui faisant décrire un demi-cercle. Son regard pointe vers
le point d'abscisse $x=7.5$, les éléments du décor sont immobiles.
\begin{center}
\begin{tabular}{cc}
\includegraphics[scale=0.7]{observateur1.eps}&\includegraphics[scale=0.7]{observateur2.eps}\\
\includegraphics[scale=0.7]{observateur3.eps}&\includegraphics[scale=0.7]{observateur4.eps}\\
\includegraphics[scale=0.7]{observateur5.eps}&\includegraphics[scale=0.7]{observateur6.eps}\\
\end{tabular}
\end{center}
% pour la conversion html
%
%\includegraphics[scale=1.5]{observateur1.eps}
%
%\includegraphics[scale=1.5]{observateur2.eps}
%
%\includegraphics[scale=1.5]{observateur3.eps}
%
%\includegraphics[scale=1.5]{observateur4.eps}
%
%\includegraphics[scale=1.5]{observateur5.eps}
%
%\includegraphics[scale=1.5]{observateur6.eps}
  \item \texttt{xPos=0,yPos=0}, avec des valeurs différentes, on peut
  modifier la position d'un point déjà calculé, ces valeurs se rajoutent à celles de base. On fera attention
  que lors de l'addition des ordonnées, l'ordonnée finale soit
  $<0$. Cette possibilité est utilisée pour placer un élément à
  différents endroits, sans avoir besoin de recalculer les
  nouvelles coordonnées.
\begin{center}
\begin{pspicture}(0,-16)(17,5)
\psset{fillcolor=yellow}
\psframe*[linecolor=eau](0,-16)(17,0)
\psset{xObservateur=4,yObservateur=4,xPos=-1,yPos=-6}
\EyeDraw
\pNodeI(2,-5){V}
\pnode(! xb yb){E}
\psline(E)(7.5,0)
{\psset{fillstyle=solid,fillcolor=MonGris,linestyle=none}
\Poulpe}
\RefractionPoulpe
\psset{fillcolor=green}
\psset{xObservateur=4,yObservateur=4,xPos=4,yPos=0}
{\psset{fillstyle=solid,fillcolor=MonGris,linestyle=none}
\Poulpe}
\RefractionPoulpe
\end{pspicture}
\end{center}
\end{itemize}
\section{Une vue d'ensemble de la scène avec tous les éléments du
décor}
La pieuvre a été re-dessinée en utilisant une nouvelle commande
paramétrable
\verb+\PstCurveVaryingWidth+ écrite par Denis~\textsc{Girou}
permettant de tracer des lignes d'épaisseur variable. En couleurs
grisées ou très pâles : le décor réel, en couleurs : les positions
et les dimensions apparentes.
\begin{center}
\begin{pspicture}(0,-16)(17,6)
\psframe*[linecolor=eaupale](0,-16)(17,0)
\psset{xObservateur=2,yObservateur=5,abscisseDirectionRegard=4}
\RefractionPsframe*[linecolor=eau](0,-16)(17,-0.1)
\EyeDraw
\pNodeI(2,-5){V}
\pnode(! xb yb){E}
\psline(E)(4,0)
\bgroup
\psset{xPos=-3.5,yPos=-5}
\pscircleXY[fillstyle=gradient,gradbegin=lightgray,gradend=white,linestyle=none](4,-2.5){0.15}
\pscircleXY[fillstyle=gradient,gradbegin=lightgray,gradend=white,linestyle=none](4,-2){0.2}
\pscircleXY[fillstyle=gradient,gradbegin=lightgray,gradend=white,linestyle=none](4,-1.5){0.25}
\makeatletter
\RefractionPscircle[fillstyle=gradient,gradbegin=eau,gradend=cyan,linestyle=none]%
                    (!4 \psk@pstRefraction@xPos\space add -2.5 \psk@pstRefraction@yPos\space add){0.15}
\RefractionPscircle[fillstyle=gradient,gradbegin=eau,gradend=cyan,linestyle=none]%
                    (!4 \psk@pstRefraction@xPos\space add -2 \psk@pstRefraction@yPos\space add){0.2}
\RefractionPscircle[fillstyle=gradient,gradbegin=eau,gradend=cyan,linestyle=none]%
                    (!4 \psk@pstRefraction@xPos\space add -1.5 \psk@pstRefraction@yPos\space add){0.25}
\makeatother
\poissonPosXY
\RefractionPoisson
\egroup
\bgroup
\psset{linecolor=lightgray,xPos=2}
\PoulpeC{lightgray}
\egroup
\RefractionPoulpeC{yellow}
\psset{linewidth=0.2,LineWidthStep=-0.07,linecolor=MonGris}
\multido{\rX=0+0.25}{68}{%
  \pnode(! \rX\space -16){h1}
  \pnode(! \rX\space rand sin 0.2 mul add -15 rand sin 0.5 mul add ){h2}
  \pnode(! \rX\space rand sin 0.2 mul add -14 rand sin 0.5 mul add ){h3}
  \pnode(! \rX\space rand sin 0.2 mul add -13 rand sin 1 mul add ){h4}
  \PstCurveVaryingWidth(h1)(h2)(h3)(h4)}
\psset{linecolor=green}
\multido{\rX=0+0.25}{68}{%
  \pNodeI(\rX,-16){h1}
  \pNodeIrand(\rX, -15){h2}
  \pNodeIrand(\rX,-14){h3}
  \pNodeIrand(\rX,-13){h4}
  \PstCurveVaryingWidth(h1)(h2)(h3)(h4)}
\end{pspicture}
\end{center}
\section{Comment un poisson voit-il le monde aérien ?}
\subsection{Si le phénomène de réfraction n'existait pas}
\psset{n=0.75}
\begin{center}
\begin{pspicture}(0,-10)(15,8)
\psframe*[linecolor=eau](0,-10)(15,0)
\psset{xObservateur=7,yObservateur=-6,eyewidth=0.10}
\EyePoisson
\psline[linecolor=red,linewidth=0.5mm](2,5)(13,5)(13,1)(2,1)(2,5)
\psgrid[subgriddiv=0,gridlabels=0,gridcolor=red,gridwidth=0.2mm](2,5)(13,1)
\Datas\Branche\Mesange
\pscircle[linecolor=red,fillstyle=solid,fillcolor=CercleAir](10,2){1}
%\psgrid
\end{pspicture}
\end{center}
\subsection{Avec le phénomène de réfraction}
\begin{center}
\begin{pspicture}(0,-10)(15,10)
\psframe*[linecolor=eau](0,-10)(15,0)
\psset{xObservateur=7,yObservateur=-5,eyewidth=0.10}
\pscircle*[linecolor=lightgray](10,2){1}
\RefractionPscircle[linecolor=blue,fillstyle=solid,fillcolor=CercleEau](10,2){1}
\EyePoisson
\RefractionPsline[linecolor=blue,linewidth=0.5mm](2,5)(13,5)(13,1)(2,1)(2,5)
\psline[linecolor=red,linewidth=0.5mm](2,5)(13,5)(13,1)(2,1)(2,5)
\psgrid[subgriddiv=0,gridlabels=0,gridcolor=red,gridwidth=0.2mm](2,5)(13,1)
\multido{\iY=5+-1}{5}{%
\RefractionPsline[linecolor=blue,linewidth=0.2mm](2,\iY)(13,\iY)}
\multido{\iX=2+1}{12}{%
\RefractionPsline[linecolor=blue,linewidth=0.2mm](\iX,5)(\iX,1)}
\pNodeI(13,5){V}
{\psset{linecolor=blue}\qdisk(V){2pt}}
\pnode(! xa ya ){A}
{\psset{linecolor=red}\qdisk(A){2pt}}
\pnode(! xb yb ){B}
\pnode(! xB1 yB1){B1}
\pnode(! xB2 yB2){B2}
\pnode(! xI1 0){I1}
\pnode(! xI2 0){I2}
\psline[linecolor=red](B1)(I1)(A)
\psline[linecolor=red](B2)(I2)(A)
\psset{arrowsize=0.2}
\pcline[nodesepB=2cm,linecolor=red]{->}(A)(I1)
\pcline[nodesepB=2cm,linecolor=red]{->>}(A)(I2)
\pcline[nodesepB=3cm,linecolor=red]{->}(I1)(B1)
\pcline[nodesepB=3cm,linecolor=red]{->>}(I2)(B2)
\psline[linestyle=dashed,linecolor=red](I2)(V)
\psline[linestyle=dashed,linecolor=red](I1)(V)
\Datas\ghostBranche\ghostMesange
\RefractionBranche\RefractionMesange
\end{pspicture}
\end{center}
Et puis on peut imaginer toutes les situations : que l'indice de l'eau par
rapport à l'air est 0.75 par  exemple. Voici ce que verrait notre poisson :
\psset{n=1.5}
\begin{center}
\begin{pspicture}(0,-10)(15,10)
\psframe*[linecolor=eau](0,-10)(15,0)
\psset{xObservateur=7,yObservateur=-5,eyewidth=0.10}
\pscircle*[linecolor=lightgray](10,2){1}
\RefractionPscircle[linecolor=blue,fillstyle=solid,fillcolor=CercleEau](10,2){1}
\EyePoisson
\RefractionPsline[linecolor=blue,linewidth=0.5mm](2,5)(13,5)(13,1)(2,1)(2,5)
\psline[linecolor=red,linewidth=0.5mm](2,5)(13,5)(13,1)(2,1)(2,5)
\psgrid[subgriddiv=0,gridlabels=0,gridcolor=red,gridwidth=0.2mm](2,5)(13,1)
\multido{\iY=5+-1}{5}{%
\RefractionPsline[linecolor=blue,linewidth=0.2mm](2,\iY)(13,\iY)}
\multido{\iX=2+1}{12}{%
\RefractionPsline[linecolor=blue,linewidth=0.2mm](\iX,5)(\iX,1)}
\pNodeI(13,5){V}
{\psset{linecolor=blue}\qdisk(V){2pt}}
\pnode(! xa ya ){A}
{\psset{linecolor=red}\qdisk(A){2pt}}
\pnode(! xb yb ){B}
\pnode(! xB1 yB1){B1}
\pnode(! xB2 yB2){B2}
\pnode(! xI1 0){I1}
\pnode(! xI2 0){I2}
\psline[linecolor=red](B1)(I1)(A)
\psline[linecolor=red](B2)(I2)(A)
\psset{arrowsize=0.2}
\pcline[nodesepB=2cm,linecolor=red]{->}(A)(I1)
\pcline[nodesepB=2cm,linecolor=red]{->>}(A)(I2)
\pcline[nodesepB=3cm,linecolor=red]{->}(I1)(B1)
\pcline[nodesepB=3cm,linecolor=red]{->>}(I2)(B2)
\psline[linestyle=dashed,linecolor=red](I2)(V)
\psline[linestyle=dashed,linecolor=red](I1)(V)
\Datas\ghostBranche\ghostMesange
\RefractionBranche\RefractionMesange
\end{pspicture}
\end{center}
\section{Image d'un texte par réfraction}
C'est la commande \verb+\textRefraction+ qui permet d'afficher le texte.
\begin{gbar}
\begin{verbatim}
\begin{center}
\begin{pspicture}(-1,-5)(10,6)
\psset{xObservateur=2,yObservateur=5,abscisseDirectionRegard=5}
\psframe*[linecolor=eau](0,-5)(10,0)
\EyeDraw
\psgrid[subgriddiv=0,gridlabels=0,gridcolor=red](0,-5)(10,-1)
\multido{\iY=-5+1}{5}{%
\RefractionPsline[linecolor=blue](-1,\iY)(10,\iY)}
\multido{\iX=-1+1}{12}{%
\RefractionPsline[linecolor=blue](\iX,-5)(\iX,-1)}
\textRefraction[fillstyle=solid,fillcolor=blue,linecolor=blue](4,-4){Tangente}
\rput(4,-4){\color{red}\fontfamily{ptm}\fontsize{56.90}{56.90}\selectfont Tangente}
\end{pspicture}
\end{center}
\end{verbatim}
\end{gbar}
\begin{center}
\begin{pspicture}(-1,-5)(10,6)
\psset{xObservateur=2,yObservateur=5,abscisseDirectionRegard=5}
\psframe*[linecolor=eau](-1,-5)(10,0)
\EyeDraw
\psgrid[subgriddiv=0,gridlabels=0,gridcolor=red](-1,-5)(10,-1)
\multido{\iY=-5+1}{5}{%
\RefractionPsline[linecolor=blue](-1,\iY)(10,\iY)}
\multido{\iX=-1+1}{12}{%
\RefractionPsline[linecolor=blue](\iX,-5)(\iX,-1)}
\textRefraction[fillstyle=solid,fillcolor=blue,linecolor=blue](4,-4){Réfraction}
\rput(4,-4){\color{red}\fontfamily{ptm}\fontsize{56.90}{56.90}\selectfont Réfraction}
\end{pspicture}
\end{center}
Les paramètres :
\begin{gbar}
\begin{itemize}
\item \texttt{PSfont=Times-Roman} : type de fonte postscript.
\item \texttt{fontscale=2} : taille des caractères en cm.
\end{itemize}
\end{gbar}
\end{document}