summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pst-optic/pst-optic.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-optic/pst-optic.tex')
-rw-r--r--Master/texmf-dist/tex/generic/pst-optic/pst-optic.tex1836
1 files changed, 1836 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pst-optic/pst-optic.tex b/Master/texmf-dist/tex/generic/pst-optic/pst-optic.tex
new file mode 100644
index 00000000000..88c7cfb7aec
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pst-optic/pst-optic.tex
@@ -0,0 +1,1836 @@
+%%
+%% This is file `pst-optic.tex',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Package `pst-optic.tex'
+%%
+%% Manuel Luque <Mluque5130@aol.com> (France)
+%% Herbert Voss <voss@perce.de> (Germany)
+%%
+%% February 16, 2003
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-optic' is a PSTricks package to define lenses and mirrors
+%%
+\csname PSTopticLoaded\endcsname
+\let\PSTopticLoaded\endinput
+% Requires PSTricks, pst-node, pstcol, pst-plot, pst-3d, multido packages
+\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi
+\ifx\PSTplotLoaded\endinput\else\input pst-plot.tex\fi % parametric-plot
+\ifx\PSTthreeDLoaded\endinput\else\input pst-3d.tex\fi % symplan
+\ifx\PSTMultidoLoaded\endinput\else\input multido.tex\fi
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi
+%
+\def\fileversion{0.92}
+\def\filedate{2004/11/09}
+\message{`PST-Optic' v\fileversion, \filedate\space (Manuel Luque and Herbert Voss)}
+%
+% DPC interface to the `keyval' package (until keyval based version of PSTricks)
+%
+\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
+\pst@addfams{pst-optic}
+\SpecialCoor
+%
+%%%%%%%%%%%%%%%%%% Macrolist %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% \def\Arrows[#1](#2)(#3)
+%% \def\psOutLine[#1](#2)(#3)#4
+%% \def\psBeforeLine[#1](#2)(#3)#4
+%% \def\ABinterCD(#1)(#2)(#3)(#4)#5
+%% \def\Parallel[#1](#2)(#3)(#4)#5
+%% \def\arrowLine[#1](#2)(#3)#4
+%% \def\nodeBetween(#1)(#2)#3
+%% \def\rotateNode(#1)#2
+%% \def\rotateTriangle(#1)(#2)(#3)#4
+%% \def\rotateFrame(#1)(#2)(#3)(#4)#5
+%% \def\lensSPH[#1]
+%% \def\lensSPHRay[#1](#2)(#3)#4#5#6
+%% \def\ABinterSPHLens(#1)(#2)(#3)#4
+%% \def\lens[#1]
+%% \def\pslensDVG
+%% \def\pslensDVG@i#1#2
+%% \def\pslensDVG@ii
+%% \def\pslensCVG
+%% \def\pslensCVG@ii
+%% \def\lensCVG
+%% \def\lensDVG
+%% \def\Transform
+%% \def\rayInterLens(#1)(#2)#3#4
+%% \def\mirrorCVGRay[#1](#2)(#3)#4
+%% \def\mirrorCVG[#1]
+%% \def\mirrorDVG[#1]
+%% \def\mirrorDVGRay[#1](#2)(#3)#4
+%% \def\beamLight[#1]
+%% \def\mirrorTwo
+%% \def\telescope[#1]
+%% \def\planMirrorRay(#1)(#2)(#3)#4
+%% \def\symPlan(#1)(#2)
+%% \def\refractionRay[#1](#2)(#3)(#4)(#5)#6#7#8
+%% \def\reflectionRay[#1](#2)(#3)#4
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ---------------- the if's -----------------
+%
+\newif\ifPst@lensTwo% is a second lens present?
+\define@key[psset]{pst-optic}{lensTwo}[false]{\@nameuse{Pst@lensTwo#1}%
+}
+\newif\ifPst@lensGlass% draw a _real_ lens?
+\define@key[psset]{pst-optic}{lensGlass}[true]{\@nameuse{Pst@lensGlass#1}%
+}
+\newif\ifPst@drawing% draw the nodes and rays?
+\define@key[psset]{pst-optic}{drawing}[true]{\@nameuse{Pst@drawing#1}%
+}
+\newif\ifPst@rightRay% a ray on the right side?
+\define@key[psset]{pst-optic}{rightRay}[false]{\@nameuse{Pst@rightRay#1}%
+}
+%
+\psset{lensGlass=false}
+\psset{drawing=true}
+%
+% ------- the global definitions for the pspicture frame ------
+%
+\define@key[psset]{pst-optic}{xLeft}{\edef\psk@optic@xLeft{#1}}
+\define@key[psset]{pst-optic}{xRight}{\edef\psk@optic@xRight{#1}}
+\define@key[psset]{pst-optic}{yBottom}{\edef\psk@optic@yBottom{#1}}
+\define@key[psset]{pst-optic}{yTop}{\edef\psk@optic@yTop{#1}}
+\psset{xLeft=-7.5,xRight=7.5,yBottom=-3.0,yTop=3.0}
+%
+% ---------------- the lenses -----------------
+%
+\define@key[psset]{pst-optic}{lensType}{% CVG|DVG
+ \edef\psk@optic@lensType{#1}%
+}
+\define@key[psset]{pst-optic}{lensColor}{%
+ \edef\psk@optic@lensColor{#1}%
+}
+\define@key[psset]{pst-optic}{lensWidth}{% the thichness of the lens
+ \edef\psk@optic@lensWidth{#1}%
+}
+\define@key[psset]{pst-optic}{lensDepth}{%
+ \edef\psk@optic@lensDepth{#1}%
+}
+\define@key[psset]{pst-optic}{lensHeight}{% the TOTAL height of the lens
+ \edef\psk@optic@lensHeight{#1}%
+}
+\define@key[psset]{pst-optic}{lensScale}{% more or less obsolete
+ \edef\psk@optic@lensScale{#1}%
+}
+\define@key[psset]{pst-optic}{lensArrowSize}{% for the AB,... Arrows
+ \edef\psk@optic@lensArrowSize{#1}%
+}
+\define@key[psset]{pst-optic}{lensArrowInset}{%
+ \edef\psk@optic@lensArrowInset{#1}%
+}
+\psset{lensType=CVG}
+\def\Type{CVG}
+\psset{lensColor=lightgray}
+\psset{lensWidth=0.5}
+\psset{lensDepth=1}
+\psset{lensHeight=5}
+\psset{lensScale=1}
+\psset{lensArrowSize=0.2}
+\psset{lensArrowInset=0.5}
+%
+% ---------------- the mirrors -----------------
+%
+\define@key[psset]{pst-optic}{mirrorType}{% PLAN|PARAbolic|SPHerical
+ \edef\psk@optic@mirrorType{#1}%
+}
+\define@key[psset]{pst-optic}{mirrorDepth}{%
+ \edef\psk@optic@mirrorDepth{#1}%
+}
+\define@key[psset]{pst-optic}{mirrorHeight}{% it's the TOTAL height
+ \edef\psk@optic@mirrorHeight{#1}%
+}
+\define@key[psset]{pst-optic}{mirrorWidth}{%
+ \edef\psk@optic@mirrorWidth{#1}%
+}
+\define@key[psset]{pst-optic}{mirrorColor}{%
+ \edef\psk@optic@mirrorColor{#1}%
+}
+\define@key[psset]{pst-optic}{mirrorFocus}{%
+ \edef\psk@optic@mirrorFocus{#1}%
+}
+\define@key[psset]{pst-optic}{posMirrorTwo}{% a sencond mirror? (telescope)
+ \edef\psk@optic@posMirrorTwo{#1}%
+}
+\define@key[psset]{pst-optic}{mirrorTwoAngle}{% the angle for the 2. plan mirror (telescope)
+ \edef\psk@optic@mirrorTwoAngle{#1}%
+}
+\psset{mirrorType=CVG}% possible CVG|DVG
+\def\mirrorType{CVG}
+\psset{mirrorDepth=1}
+\psset{mirrorHeight=5}
+\psset{mirrorWidth=0.25}
+\psset{mirrorFocus=8}% only for LensTwo option
+\psset{mirrorTwoAngle=45}
+\psset{posMirrorTwo=6}
+\psset{mirrorColor=lightgray}
+%
+% -------------- the refrectionnumbers -------------
+%
+\define@key[psset]{pst-optic}{refractA}{%
+ \edef\psk@optic@refractA{#1}%
+}
+\define@key[psset]{pst-optic}{refractB}{%
+ \edef\psk@optic@refractB{#1}%
+}
+\psset{refractA=1}
+\psset{refractB=1.41}
+%
+% -------------- the length and node definitions -------------
+%
+\define@key[psset]{pst-optic}{XO}{% the X-offset
+ \edef\psk@optic@XO{#1}%
+}
+\define@key[psset]{pst-optic}{YO}{% the y-offset
+ \edef\psk@optic@YO{#1}%
+}
+\define@key[psset]{pst-optic}{posStart}{% where the arrows start
+ \edef\psk@optic@posStart{#1}%
+}
+\define@key[psset]{pst-optic}{length}{% the length of the before|outlines
+ \edef\psk@optic@length{#1}%
+}
+\define@key[psset]{pst-optic}{focus}{% for lenses/mirrors with a fixed focus
+ \edef\psk@optic@focus{#1}%
+}
+\define@key[psset]{pst-optic}{AB}{% the length of the object arrow
+ \edef\psk@optic@AB{#1}%
+}
+\define@key[psset]{pst-optic}{OA}{% the xcoordinate of the object arrow
+ \edef\psk@optic@OA{#1}%
+}
+\define@key[psset]{pst-optic}{arrowOffset}{% offset for \arrowLine
+ \edef\psk@optic@arrowOffset{#1}%
+}
+%
+\psset{XO=0,YO=0}
+\psset{OA=-3}
+\psset{posStart=0,length=2}
+\psset{focus=2}
+\psset{AB=1}
+\psset{arrowOffset=0}
+%
+\define@key[psset]{pst-optic}{nameA}{% start of the object arrow
+ \edef\psk@optic@nameA{#1}%
+}
+\define@key[psset]{pst-optic}{spotA}{% where to draw the label
+ \edef\psk@optic@spotA{#1}%
+}
+\define@key[psset]{pst-optic}{nameB}{%
+ \edef\psk@optic@nameB{#1}%
+}
+\define@key[psset]{pst-optic}{spotB}{%
+ \edef\psk@optic@spotB{#1}%
+}
+\define@key[psset]{pst-optic}{nameF}{%
+ \edef\psk@optic@nameF{#1}%
+}
+\define@key[psset]{pst-optic}{spotF}{%
+ \edef\psk@optic@spotF{#1}%
+}
+\define@key[psset]{pst-optic}{nameO}{%
+ \edef\psk@optic@nameO{#1}%
+}
+\define@key[psset]{pst-optic}{spotO}{%
+ \edef\psk@optic@spotO{#1}%
+}
+\define@key[psset]{pst-optic}{nameAi}{%
+ \edef\psk@optic@nameAi{#1}%
+}
+\define@key[psset]{pst-optic}{spotAi}{%
+ \edef\psk@optic@spotAi{#1}%
+}
+\define@key[psset]{pst-optic}{nameBi}{%
+ \edef\psk@optic@nameBi{#1}%
+}
+\define@key[psset]{pst-optic}{spotBi}{%
+ \edef\psk@optic@spotBi{#1}%
+}
+\define@key[psset]{pst-optic}{nameFi}{%
+ \edef\psk@optic@nameFi{#1}%
+}
+\define@key[psset]{pst-optic}{spotFi}{%
+ \edef\psk@optic@spotFi{#1}%
+}
+%
+\psset{nameA=A}
+\psset{spotA=270}
+\psset{nameB=B}
+\psset{spotB=90}
+\psset{nameF=F}
+\psset{spotF=270}
+\psset{nameO=O}
+\psset{spotO=225}
+\psset{nameAi=A'}
+\psset{spotAi=90}
+\psset{nameBi=B'}
+\psset{spotBi=270}
+\psset{nameFi=F'}
+\psset{spotFi=270}
+%
+% -------------------- colors/fillstyles -------------------
+%
+\definecolor{BleuVerre}{cmyk}{0.2,0,0,0}
+\definecolor{JauneVert}{rgb}{0.7,1,0}
+\newpsstyle{rayuresJaunes}{%
+ fillstyle=hlines,hatchsep=2\pslinewidth,hatchcolor=JauneVert%
+}
+\define@key[psset]{pst-optic}{rayColor}{%
+ \edef\psk@optic@rayColor{#1}%
+}
+\psset{rayColor=red}
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Utility stuff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% posStart=Starting point
+% length= Arrow length.
+\def\Arrows{\@ifnextchar[{\pst@Arrows}{\pst@Arrows[]}}
+\def\pst@Arrows[#1](#2)(#3){{%
+ \psset{#1}%
+ \pst@getcoor{#2}\pst@tempa
+ \pst@getcoor{#3}\pst@tempb
+ \pnode(!%
+ /StartArrow \psk@optic@posStart\space def
+ /LengthArrow \psk@optic@length\space def
+ \pst@tempa /YA exch \pst@number\psyunit div def
+ /XA exch \pst@number\psxunit div def
+ \pst@tempb /YB exch \pst@number\psyunit div def
+ /XB exch \pst@number\psxunit div def
+ /denominateur XB XA sub def
+ /numerateur YB YA sub def
+ /angleDirectionAB numerateur denominateur Atan def
+ /XD StartArrow angleDirectionAB cos mul XA add def
+ /YD StartArrow angleDirectionAB sin mul YA add def
+ /XF XD LengthArrow angleDirectionAB cos mul add def
+ /YF YD LengthArrow angleDirectionAB sin mul add def
+ XD YD ){ArrowStart}
+ \pnode(! XF YF){ArrowEnd}
+ \psset{arrows=->}
+ \psline[#1](ArrowStart)(ArrowEnd)%
+}}
+%
+% draw a line (===) outside: #2-----#3=======#4
+%
+\def\psOutLine{\@ifnextchar[{\pst@ToDrawOut}{\pst@ToDrawOut[]}}
+\def\pst@ToDrawOut[#1](#2)(#3)#4{{%
+ \psset{#1}%
+ \pst@getcoor{#2}\pst@tempa
+ \pst@getcoor{#3}\pst@tempb
+ \pnode(!%
+ /LengthArrow \psk@optic@length\space def
+ \pst@tempa /YA exch \pst@number\psyunit div def
+ /XA exch \pst@number\psxunit div def
+ \pst@tempb /YB exch \pst@number\psyunit div def
+ /XB exch \pst@number\psxunit div def
+ /denominateur XB XA sub def
+ /numerateur YB YA sub def
+ /angleDirectionAB numerateur denominateur Atan def
+ /Xend XB LengthArrow angleDirectionAB cos mul add def
+ /Yend YB LengthArrow angleDirectionAB sin mul add def
+ Xend Yend){#4}
+ \psline[#1](#3)(#4)
+}}
+%
+% draw a line (===) before: #4========#2-----#3
+%
+\def\psBeforeLine{\@ifnextchar[{\pst@BeforeLine}{\pst@BeforeLine[]}}
+\def\pst@BeforeLine[#1](#2)(#3)#4{{%
+ \psset{#1}%
+ \pst@getcoor{#2}\pst@tempa
+ \pst@getcoor{#3}\pst@tempb
+ \pnode(!%
+ /LengthArrow \psk@optic@length\space def
+ \pst@tempa /YA exch \pst@number\psyunit div def
+ /XA exch \pst@number\psxunit div def
+ \pst@tempb /YB exch \pst@number\psyunit div def
+ /XB exch \pst@number\psxunit div def
+ /denominateur XB XA sub def
+ /numerateur YB YA sub def
+ /angleDirectionAB numerateur denominateur Atan def
+ /Xstart XA LengthArrow angleDirectionAB cos mul sub def
+ /Ystart YA LengthArrow angleDirectionAB sin mul sub def
+ Xstart Ystart){#4}
+ \psline[#1](#4)(#2)%
+}}
+%
+% intersection de deux droites
+% 2 juillet 2001/ rewritten 2003-01-27 Herbert
+%
+\def\ABinterCD(#1)(#2)(#3)(#4)#5{%
+ \pst@getcoor{#1}\pst@tempa
+ \pst@getcoor{#2}\pst@tempb
+ \pst@getcoor{#3}\pst@tempc
+ \pst@getcoor{#4}\pst@tempd
+\pnode(!%
+ /YA \pst@tempa exch pop \pst@number\psyunit div def
+ /XA \pst@tempa pop \pst@number\psxunit div def
+ /YB \pst@tempb exch pop \pst@number\psyunit div def
+ /XB \pst@tempb pop \pst@number\psxunit div def
+ /YC \pst@tempc exch pop \pst@number\psyunit div def
+ /XC \pst@tempc pop \pst@number\psxunit div def
+ /YD \pst@tempd exch pop \pst@number\psyunit div def
+ /XD \pst@tempd pop \pst@number\psxunit div def
+ /dY1 YB YA sub def
+ /dX1 XB XA sub def
+ /dY2 YD YC sub def
+ /dX2 XD XC sub def
+ dX1 abs 0.01 lt {
+ /m2 dY2 dX2 div def
+ XA dup XC sub m2 mul YC add
+ }{
+ dX2 abs 0.01 lt {
+ /m1 dY1 dX1 div def
+ XC dup XA sub m1 mul YA add
+ }{%
+ /m1 dY1 dX1 div def
+ /m2 dY2 dX2 div def
+ m1 XA mul m2 XC mul sub YA sub YC add m1 m2 sub div dup
+ XA sub m1 mul YA add
+ } ifelse
+ } ifelse ){#5}
+}
+%
+% draw a parallel line
+% #2---------#3
+% #4----------#5(new)
+\def\Parallel{\@ifnextchar[{\pst@Parallel}{\pst@Parallel[]}}
+\def\pst@Parallel[#1](#2)(#3)(#4)#5{{%
+ \psset{#1}%
+ \pst@getcoor{#2}\pst@tempa
+ \pst@getcoor{#3}\pst@tempb
+ \pst@getcoor{#4}\pst@tempc
+ \pnode(!%
+ /LengthArrow \psk@optic@length\space def
+ \pst@tempa /YA exch \pst@number\psyunit div def
+ /XA exch \pst@number\psxunit div def
+ \pst@tempb /YB exch \pst@number\psyunit div def
+ /XB exch \pst@number\psxunit div def
+ \pst@tempc /YC exch \pst@number\psyunit div def
+ /XC exch \pst@number\psxunit div def
+ /denominateur XB XA sub def
+ /numerateur YB YA sub def
+ /angleDirectionAB numerateur denominateur Atan def
+ /XstartParallel XC LengthArrow angleDirectionAB cos mul add def
+ /YstartParallel YC LengthArrow angleDirectionAB sin mul add def
+ XstartParallel YstartParallel){#5}
+ \psline[#1](#4)(#5)
+}}
+%
+% arrowLine[options](A)(B){n}
+% #2---->---->---->---->----#3 #4-arrows inside
+\def\arrowLine{\@ifnextchar[{\pst@arrowLine}{\pst@arrowLine[]}}
+\def\pst@arrowLine[#1](#2)(#3)#4{{%
+ \psset{arrowsize=4pt,arrows=->}% the defaults
+ \psset{#1}%
+ \def\pst@optic@n{#4}
+ \pst@getcoor{#2}\pst@tempa
+ \pst@getcoor{#3}\pst@tempb
+ \pnode(!%
+ /YA \pst@tempa exch pop \pst@number\psyunit div def
+ /XA \pst@tempa pop \pst@number\psxunit div def
+ /YB \pst@tempb exch pop \pst@number\psyunit div def
+ /XB \pst@tempb pop \pst@number\psxunit div def
+ /dY YB YA sub \pst@optic@n\space 1 add div def
+ /dX XB XA sub \pst@optic@n\space 1 add div def
+ /Alpha dY dX atan def
+ /dYOffset \psk@optic@arrowOffset\space Alpha sin mul def
+ /dXOffset \psk@optic@arrowOffset\space Alpha cos mul def
+ XA YA ){tempArrowC}
+ \multido{\i=1+1}{#4}{%
+ \pnode(!%
+ XA dX \i\space mul add dXOffset add
+ YA dY \i\space mul add dYOffset add){tempArrowB}
+ \psline(tempArrowC)(tempArrowB)
+ \pnode(tempArrowB){tempArrowC}
+ }
+ \psline[arrows=-](tempArrowB)(#3)
+}}
+%
+% #1------#3------#2
+\def\nodeBetween(#1)(#2)#3{% Herbert 2003/01/05
+ \pst@getcoor{#1}\pst@tempa
+ \pst@getcoor{#2}\pst@tempb
+ \pnode(!%
+ /XA \pst@tempa pop \pst@number\psxunit div def
+ /YA \pst@tempa exch pop \pst@number\psyunit div def
+ /XB \pst@tempb pop \pst@number\psxunit div def
+ /YB \pst@tempb exch pop \pst@number\psyunit div def
+ XB XA add 2 div YB YA add 2 div){#3}
+}
+%
+% rotateNode(A)
+% (A) the node
+% #2 the angle
+% Herbert Voss <voss@perce.de> 2003-01-26
+\def\rotateNode{\pst@rotateNode}
+\def\pst@rotateNode(#1)#2{{%
+ \pst@getcoor{#1}\pst@tempa
+ \def\pst@optic@angle{#2} % the rotating angle
+ \pnode(!%
+ /YA \pst@tempa exch pop \pst@number\psyunit div def
+ /XA \pst@tempa pop \pst@number\psxunit div def
+ YA 0 eq XA 0 eq and {0 0}{
+ /r XA dup mul YA dup mul add sqrt def
+ /AlphaOld YA XA atan def
+ /AlphaNew AlphaOld \pst@optic@angle\space add def
+ r AlphaNew cos mul r AlphaNew sin mul
+ } ifelse ){temp}
+ \pnode(temp){#1}
+}}
+%
+\def\rotateTriangle{\pst@rotateTriangle}
+\def\pst@rotateTriangle(#1)(#2)(#3)#4{{%
+ \rotateNode(#1){#4}
+ \rotateNode(#2){#4}
+ \rotateNode(#3){#4}
+}}
+%
+\def\rotateFrame{\pst@rotateFrame}
+\def\pst@rotateFrame(#1)(#2)(#3)(#4)#5{{%
+ \rotateNode(#1){#5}
+ \rotateNode(#2){#5}
+ \rotateNode(#3){#5}
+ \rotateNode(#4){#5}
+}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% L E N S E S %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% A spherical lens is drawn only with a spherical bow
+%
+\def\lensSPH{\@ifnextchar[{\pst@lensSPH}{\pst@lensSPH[]}}
+\def\pst@lensSPH[#1]{{%
+ \psset{lensType=CVG,OA=-7,%
+ lensHeight=6,%
+ lensWidth=1.5,%
+ refractB=2}
+ \psset{#1}
+ \begin{pspicture*}(\psk@optic@xLeft ,\psk@optic@yBottom )
+ (\psk@optic@xRight ,\psk@optic@yTop)
+ \pnode(! \psk@optic@xLeft\space 0){xLeft}
+ \pnode(! \psk@optic@xRight\space 0){xRight}
+ \pstVerb{%
+ /Height \psk@optic@lensHeight\space 2.0 div def
+ /Depth \psk@optic@lensDepth\space def
+ /Width \psk@optic@lensWidth\space def
+ /Width2 Width 2.0 div def
+ }
+ \ifx\psk@optic@lensType\Type% CVG ?
+ \pnode(!%
+ /radius Width2 dup mul Height dup mul add Width2 div 2 div def
+ /XM Width2 radius sub def
+ /YM 0 def
+ XM YM){Center}
+ \else% DVG ?
+ \pnode(!%
+ /radius Depth dup mul Height dup mul add Depth div 2.0 div def
+ /XM Width2 radius add neg def
+ /YM 0 def
+ XM YM){Center}
+ \fi
+% and vice versa
+ \pnode(! XM neg 0){Center'}
+ \pnode(!%
+ /AB \psk@optic@AB\space def
+ /OA \psk@optic@OA\space def
+ /XO \psk@optic@XO\space def
+ /YO \psk@optic@YO\space def
+ OA XO add YO){A}
+ \pnode(! OA XO add AB YO add){B}
+ \pnode(! XO YO){O}
+ \pnode(! XO AB YO add){I}
+ \begingroup% for the fill option
+ \psset{fillstyle=solid,%
+ fillcolor=\psk@optic@lensColor,%
+ linecolor=\psk@optic@lensColor%
+ }
+ \rput(! XO YO){%
+ \ifx\psk@optic@lensType\Type% CVG
+ \pscustom{%
+ \parametricplot{\psk@optic@lensHeight}{-\psk@optic@lensHeight}{%
+ /arg t radius 2.0 mul div def
+ arg 1 arg dup mul sub sqrt atan
+ cos 1 sub radius mul neg Width2 sub
+ t 2.0 div
+ }
+ \parametricplot{-\psk@optic@lensHeight}{\psk@optic@lensHeight}{%
+ /arg t radius 2.0 mul div def
+ arg 1 arg dup mul sub sqrt atan
+ cos 1 sub radius mul neg Width2 sub neg
+ t 2.0 div
+ }
+ \fill
+ }%
+ \else
+ \pscustom{%
+ % (d+w/2,h/2)->(d-w,h/2)
+ \psline(! Depth Width2 add Height)(! Depth Width2 add neg Height)
+ % (-d-w/2,h/2)->(-d-w/2,-h/2)
+ \parametricplot{\psk@optic@lensHeight}{-\psk@optic@lensHeight}{%
+ /arg t 2.0 div radius div def
+ arg 1 arg dup mul sub sqrt atan cos 1 sub radius mul Width2 sub
+ t 2.0 div
+ }
+ % (-d-w/2,-h/2)(d+w/2,-h/2)
+ \psline(! Depth Width2 add neg Height neg)(! Depth Width2 add Height neg)
+ % (d+w/2,-h/2)->(d+w/2,h/2)
+ \parametricplot{-\psk@optic@lensHeight}{\psk@optic@lensHeight}{%
+ /arg t 2.0 div radius div def
+ 1 arg 1 arg dup mul sub sqrt atan cos sub radius mul Width2 add
+ t 2.0 div
+ }
+ \fill
+ }
+ \fi%
+ }%
+ \endgroup
+ \ifPst@drawing
+ % optical axes
+ \psline[linewidth=0.5pt](xLeft)(xRight)
+ \psset{dotstyle=|}
+ \psdots(Center')
+ \uput[-90](Center'){Center'}
+ \psdots(Center)
+ \uput[-90](Center){Center}
+ \psset{linecolor=\psk@optic@rayColor}
+ \psline[linewidth=1.5\pslinewidth,arrowinset=0]{->}(A)(B)
+ \ifx\psk@optic@lensType\Type
+ % the parallel ray
+ \lensSPHRay[lensType=CVG]%
+ (B)(I){\psk@optic@refractA}{\psk@optic@refractB}{PSPH}
+ \ABinterCD(PSPH')(PSPH'')(O)(xRight){F'}
+ \pst@getcoor{F'}\pst@tempf
+ \pnode(!%
+ /XF \pst@tempf pop \pst@number\psxunit div neg def
+ /YF \pst@tempf exch pop \pst@number\psyunit div def
+ XF YF){F}
+ \psline(B)(PSPH)(PSPH')(F')
+ \psOutLine[length=5](PSPH')(F'){PEnd}
+ % the center ray
+ \lensSPHRay[lensType=CVG]%
+ (B)(O){\psk@optic@refractA}{\psk@optic@refractB}{OSPH}
+ \ABinterCD(PSPH')(PSPH'')(OSPH')(OSPH''){B'}
+ \pnode(B'|0,0){A'}
+ \psOutLine[length=5](OSPH')(OSPH''){OEnd}
+ \psline(B)(OSPH)(OSPH')(OEnd)
+ % the focus ray
+ \lensSPHRay[lensType=CVG]%
+ (B)(F){\psk@optic@refractA}{\psk@optic@refractB}{FSPH}
+ \psOutLine[length=10](FSPH')(FSPH''){FEnd}
+ \psline(B)(FSPH)(FSPH')(FEnd)
+ \else % the DVG part
+ % the parallel ray
+ \lensSPHRay[lensType=DVG]%
+ (B)(I){\psk@optic@refractA}{\psk@optic@refractB}{PSPH}
+ \ABinterCD(PSPH')(PSPH'')(O)(xRight){F}
+ \pst@getcoor{F}\pst@tempf
+ \pnode(!%
+ /XF \pst@tempf pop \pst@number\psxunit div def
+ /YF \pst@tempf exch pop \pst@number\psyunit div def
+ XF neg YF){F'}
+ \psOutLine[linestyle=dashed,length=5](F)(PSPH'){PEnd'}
+ \psOutLine[linestyle=dashed,length=5](PEnd')(PSPH'){PEnd}
+ \psline(B)(PSPH)(PSPH')
+ % the center ray
+ \lensSPHRay[lensType=DVG]%
+ (B)(O){\psk@optic@refractA}{\psk@optic@refractB}{OSPH}
+ \ABinterCD(PSPH')(PSPH'')(OSPH')(OSPH''){B'}
+ \pnode(B'|0,0){A'}
+ \psOutLine(PSPH')(B'){PEnd}
+ \psline(B)(OSPH)(OSPH')
+ \psOutLine[linestyle=dashed,length=5](OSPH)(OSPH'){OEnd}
+ % the focus ray
+ \lensSPHRay[lensType=DVG]%
+ (B)(F'){\psk@optic@refractA}{\psk@optic@refractB}{FSPH}
+ \psline(B)(FSPH)(FSPH')(FSPH'')
+ \psOutLine[length=5](FSPH')(FSPH''){FEnd}
+ \psOutLine[linestyle=dashed,length=5](FSPH'')(FSPH'){FEnd'}
+ \psline[linestyle=dashed](FSPH')(F')
+ \fi
+ \psdots(F')
+ \uput[\psk@optic@spotFi](F'){$\mathrm{\psk@optic@nameFi}$}
+ \uput[\psk@optic@spotF](F){$\mathrm{\psk@optic@nameF}$}
+ \psline[linewidth=1.5\pslinewidth,arrowinset=0]{->}(A')(B')
+ \uput[\psk@optic@spotA](A){$\mathrm{\psk@optic@nameA}$}
+ \uput[\psk@optic@spotB](B){$\mathrm{\psk@optic@nameB}$}
+ \uput[\psk@optic@spotAi](A'){$\mathrm{\psk@optic@nameAi}$}
+ \uput[\psk@optic@spotBi](B'){$\mathrm{\psk@optic@nameBi}$}
+ \uput[\psk@optic@spotO](O){$\mathrm{\psk@optic@nameO}$}
+ \fi% ifdrawing
+\end{pspicture*}
+}}
+%
+% Herbert Voss 2003/02/02
+% [#1] : lensType=CVG/DVG
+% (#2)(#3): the ray coordinates
+% #4 #5: the refraction numbers IN and OUT
+% #6: the intersection point
+%
+\def\lensSPHRay{\@ifnextchar[{\pst@lensSPHRay}{\pst@lensSPHRay[]}}
+\def\pst@lensSPHRay[#1](#2)(#3)#4#5#6{{%
+ \psset{#1}
+ \ifx\psk@optic@lensType\Type% CVG
+ \ifPst@rightRay
+ \ABinterSPHLens(#2)(#3)(Center){#6}
+ \else
+ \ABinterSPHLens(#2)(#3)(Center'){#6}
+ \fi
+ \else
+ \ABinterSPHLens(#2)(#3)(Center){#6}
+ \fi
+% \psline(! Y mT sub X 1 sub neg)(! Y mT add X 1 add neg)
+ \refractionRay(#2)(#6)(! Y mT sub X 1 sub neg)(! Y mT add X 1 add neg){#4}{#5}{tempSPHRay}
+ \ifx\psk@optic@lensType\Type% CVG
+ \ifPst@rightRay
+ \ABinterSPHLens(#6)(tempSPHRay')(Center'){#6'}
+ \else
+ \ABinterSPHLens(#6)(tempSPHRay')(Center){#6'}
+ \fi
+ \else
+ \ABinterSPHLens(#6)(tempSPHRay')(Center'){#6'}
+ \fi
+% \psline(! Y mT sub X 1 sub neg)(! Y mT add X 1 add neg)
+ \refractionRay(#6)(#6')(! Y mT sub X 1 sub neg)%
+ (! Y mT add X 1 add neg){#5}{#4}{tempSPHRay}
+ \pnode(tempSPHRay'){#6''}
+}}
+%
+% Intersection Point of ray and sperical lense
+% 2003-02-03 Herbert
+% (#1)(#2): the ray coordinates
+% (#3): The center of the sperical
+% #4: the intersection point
+%
+\def\ABinterSPHLens(#1)(#2)(#3)#4{%
+ \pst@getcoor{#1}\pst@tempa
+ \pst@getcoor{#2}\pst@tempb
+ \pst@getcoor{#3}\pst@tempm
+ % calculate the intersection point. we change the coordinates
+ \ifx\psk@optic@lensType\Type% CVG
+ \pnode(!%
+ /YA \pst@tempa pop \pst@number\psxunit div def
+ /XA \pst@tempa exch pop \pst@number\psyunit div neg def
+ /YB \pst@tempb pop \pst@number\psxunit div def
+ /XB \pst@tempb exch pop \pst@number\psyunit div neg def
+ /YM \pst@tempm pop \pst@number\psxunit div def
+ /XM \pst@tempm exch pop \pst@number\psyunit div neg def
+% /radius YM abs Width2 add def
+ /dX XB XA sub def
+ dX abs 0.01 lt {
+% a horizontal line
+ /Y YM radius dup mul XA dup mul sub sqrt YM 0 gt {sub}{add}ifelse def
+ /YSecond YM radius dup mul XA dup mul sub sqrt YM 0 gt {add}{sub}ifelse def
+ /X XA def
+ /XSecond XA def
+ /mT XA radius dup mul XA dup mul sub sqrt div YM 0 lt {neg}if def
+ Y X neg
+ }{
+ /dY YB YA sub def
+ /m dY dX div def
+ /m21 m dup mul 1 add def
+ /klammer YM m XA mul add YA sub def
+ /p2neg klammer m mul m21 div def
+ /q klammer dup mul radius dup mul sub m21 div def
+ /root p2neg dup mul q sub sqrt def
+ /X p2neg root YM m mul 0 gt {sub}{add}ifelse def
+ /XSecond p2neg root YM m mul 0 gt {add}{sub}ifelse def
+ /Y m X XA sub mul YA add def
+ /YSecond m XSecond XA sub mul YA add def
+ /mT X radius dup mul X dup mul sub sqrt div YM 0 lt {neg}if def
+ Y X neg
+ } ifelse){#4}
+ \else% DVG
+ \pnode(!%
+ /YA \pst@tempa pop \pst@number\psxunit div def
+ /XA \pst@tempa exch pop \pst@number\psyunit div neg def
+ /YB \pst@tempb pop \pst@number\psxunit div def
+ /XB \pst@tempb exch pop \pst@number\psyunit div neg def
+ /YM \pst@tempm pop \pst@number\psxunit div def
+ /XM \pst@tempm exch pop \pst@number\psyunit div neg def
+% /radius YM abs Width2 add def
+ /dX XB XA sub def
+ dX abs 0.01 lt {
+% a horizontal line
+ /Y YM radius dup mul XA dup mul sub sqrt YM 0 gt {sub}{add}ifelse def
+ /YSecond YM radius dup mul XA dup mul sub sqrt YM 0 gt {add}{sub}ifelse def
+ /X XA def
+ /mT XA radius dup mul XA dup mul sub sqrt div YM 0 lt {neg}if def
+ /XSecond XA def
+ Y X neg
+ }{
+ /dY YB YA sub def
+ /m dY dX div def
+ /m21 m dup mul 1 add def
+ /klammer YM m XA mul add YA sub def
+ /p2neg klammer m mul m21 div def
+ /q klammer dup mul radius dup mul sub m21 div def
+ /root p2neg dup mul q sub sqrt def
+ /X p2neg root YM m mul 0 gt {sub}{add}ifelse def
+ /XSecond p2neg root YM m mul 0 gt {add}{sub}ifelse def
+ /Y m X XA sub mul YA add def
+ /YSecond m XSecond XA sub mul YA add def
+ /mT X radius dup mul X dup mul sub sqrt div YM 0 lt {neg}if def
+ Y X neg
+ } ifelse){#4}
+ \fi
+ \pnode(! YSecond XSecond neg){#4'}
+%\arrowLine[linecolor=blue,arrows=->](#4)(#4'){2}
+}
+%
+%fin 26 juin 2001
+%Lentille convergente : CVG
+%(#2) est l'abscisse du centre optique
+\def\lens{\@ifnextchar[{\pst@lens}{\pst@lens[]}}
+\def\pst@lens[#1]{{%
+ \psset{xLeft=-7.5,xRight=7.5,yBottom=-3,yTop=3}%
+ \psset{#1}%
+ \pst@killglue
+%
+% trace les rayons
+% calcule la position de l'image
+ \begin{pspicture*}(\psk@optic@xLeft,\psk@optic@yBottom)(\psk@optic@xRight,\psk@optic@yTop)
+ \pnode(! \psk@optic@xLeft\space 0){xLeft}
+ \pnode(! \psk@optic@xRight\space 0){xRight}
+ \ifPst@lensTwo
+ \pnode(!%
+ /OF' \psk@optic@focus\space def
+ %/AB \psk@optic@AB\space def
+ /AB A'1B'1 def
+ %/OA \psk@optic@OA\space def
+ /XO \psk@optic@XO\space def
+ /YO \psk@optic@YO\space def
+ /OA XO neg XO1 add O1A1' add def
+ /TesT OA OF' add def
+ TesT 0 eq {/OA OF' neg 0.001 add def} if
+ /OA' OA OF' mul OA OF' add div def
+ /Gamma OA' OA div def
+ /A'B' Gamma AB mul def
+ OA' XO add YO){A'}
+ \pnode(! OA XO add YO){A}
+ \pnode(! OA XO add AB YO add){B}
+ \pnode(! OF' XO add YO){F'}
+ \pnode(! OF' neg XO add YO){F}
+ \pnode(! OA' XO add A'B' YO add){B'}
+ \pnode(! XO YO){O}
+ \pnode(! XO AB YO add){I}
+ \pnode(! XO A'B' YO add){I'}
+ \pnode(! \psk@optic@xRight\space A'B' YO add){I1}
+ \pnode(! \psk@optic@xRight\space neg A'B' YO add){I2}
+ \else
+ \pnode(!%
+ /OF' \psk@optic@focus\space def
+ /AB \psk@optic@AB\space def
+ /OA \psk@optic@OA\space def
+ /XO \psk@optic@XO\space def
+ /YO \psk@optic@YO\space def
+ /TesT OA OF' add def
+ TesT 0 eq {/OA OF' neg 0.001 add def} if
+ /OA' OA OF' mul OA OF' add div def
+ /Gamma OA' OA div def
+ /A'B' Gamma AB mul def
+ OA' XO add YO){A'}
+ \pnode(! OA XO add YO){A}
+ \pnode(! OA XO add AB YO add){B}
+ \pnode(! OF' XO add YO){F'}
+ \pnode(! OF' neg XO add YO){F}
+ \pnode(! OA' XO add A'B' YO add){B'}
+ \pnode(! XO YO){O}
+ \pnode(! XO AB YO add){I}
+ \pnode(! XO A'B' YO add){I'}
+ \pnode(! \psk@optic@xRight\space A'B' YO add){I1}
+ \pnode(! \psk@optic@xRight\space neg A'B' YO add){I2}
+ \fi
+ \begingroup
+ \ifPst@lensGlass
+ \rput(! XO YO){\ifx\psk@optic@lensType\Type\lensCVG\else\lensDVG\fi}%
+ \else
+ \ifx\psk@optic@lensType\Type
+ \psset{arrows=<->}
+ \else
+ \psset{arrows=>-<}
+ \fi
+ \psline[linecolor=\psk@optic@lensColor,
+ linewidth=\psk@optic@lensWidth,arrowsize=\psk@optic@lensArrowSize,
+ arrowinset=\psk@optic@lensArrowInset]%
+ (! XO -0.5 \psk@optic@lensHeight\space mul
+ \psk@optic@lensScale\space mul YO add)%
+ (! XO 0.5 \psk@optic@lensHeight\space mul
+ \psk@optic@lensScale\space mul YO add)
+ \fi
+ \endgroup%
+\ifPst@drawing
+% axe optique
+ \psline(! \psk@optic@xLeft\space YO)(! \psk@optic@xRight\space YO)
+ \ifx\psk@optic@lensType\Type
+% Position des foyers
+ \psdots[dotstyle=|](F')
+ \uput[\psk@optic@spotFi](F'){$\mathrm{\psk@optic@nameFi}$}
+ \psdots[dotstyle=|](F)
+ \uput[\psk@optic@spotF](F){$\mathrm{\psk@optic@nameF}$}
+%dessin de l'objet
+ \psline[linewidth=1.5\pslinewidth,arrowinset=0]{->}(A)(B)
+% dessin de l'image
+ \psline[linewidth=1.5\pslinewidth,arrowinset=0]{->}(A')(B')
+%dessin des rayons
+ \psset{linecolor=\psk@optic@rayColor}
+ \pcline(B)(B')
+ \Arrows[length=16,arrows=-](B)(O)
+ \Arrows(B)(I)
+ \psline(B)(I)
+ \Arrows[length=10,posStart=0,arrows=-](I)(F')
+ \Arrows[posStart=1,arrows=->](I)(F')
+ \Arrows[arrows=->>](B)(I')
+ \psline(B)(I')(B')
+ \Arrows[length=10,arrows=-](I')(B')
+ \Arrows[length=2,posStart=0.5,arrows=->>](I')(B')
+ %\uput[-45](I'){I'}
+ %\uput[45](I){I}
+ \uput[\psk@optic@spotA](A){$\mathrm{\psk@optic@nameA}$}
+ \uput[\psk@optic@spotB](B){$\mathrm{\psk@optic@nameB}$}
+ \uput[\psk@optic@spotAi](A'){$\mathrm{\psk@optic@nameAi}$}
+ \uput[\psk@optic@spotBi](B'){$\mathrm{\psk@optic@nameBi}$}
+ \uput[\psk@optic@spotO](O){$\mathrm{\psk@optic@nameO}$}
+ \else
+ %dessin de l'objet
+ \psline[linewidth=1.5\pslinewidth,arrowinset=0]{->}(A)(B)
+% dessin de l'image
+ \psline[linewidth=1.5\pslinewidth,arrowinset=0,linestyle=dashed]{->}(A')(B')
+%dessin des rayons
+ \psset{linecolor=\psk@optic@rayColor}
+ \Arrows[length=16,arrows=-](B)(O)
+ \Arrows(B)(I)
+ \psline(B)(I)
+ \psOutLine[arrows=->,length=1](B')(I){END1}
+ \psOutLine[length=5](B')(I){END2}
+ \psline[linestyle=dashed](F')(I)
+ \Arrows[arrows=->>](B)(I')
+ \psline(B)(I')
+ \psOutLine[arrows=->>,length=2](B')(I'){END3}
+ \psOutLine[length=10](B')(I'){END4}
+ \psline[linestyle=dashed](B')(I')
+ %\uput[45](I'){I'}
+ %\uput[45](I){I}
+ \uput[\psk@optic@spotA](A){$\mathrm{\psk@optic@nameA}$}
+ \uput[\psk@optic@spotB](B){$\mathrm{\psk@optic@nameB}$}
+ \uput[\psk@optic@spotAi](A'){$\mathrm{\psk@optic@nameAi}$}
+ \uput[\psk@optic@spotBi](B'){$\mathrm{\psk@optic@nameBi}$}
+ \uput[\psk@optic@spotO](O){$\mathrm{\psk@optic@nameO}$}
+ \fi
+\fi
+\end{pspicture*}
+}\ignorespaces}
+%
+% 25 december 2002 Herbert <voss@perce.de>
+% make the lenses dynamical to width _and_ height
+% \pslens calculates the radius and the angles from the given values
+% of lensWidth and lensHeight and draws the lens with it's origin (0,0)
+%
+\def\pslensDVG{\pst@object{pslensDVG}}
+\def\pslensDVG@i#1#2{%
+ \begin@OpenObj
+ \pssetlength\pst@dima{#1}%
+ \pssetlength\pst@dimb{#2}%
+ \addto@pscode{\pslensDVG@ii}%
+ \end@OpenObj%
+}
+\def\pslensDVG@ii{%
+ /w \pst@number\pst@dima def% lensWidth
+ /wHalbe w 2 div def% half of the width
+ /h \pst@number\pst@dimb 2 div def% the half of the height
+ /Radius wHalbe 2 div dup mul h dup mul add wHalbe div def
+ /x Radius wHalbe 2 div add def
+ /y 0 def
+ /angleA h x wHalbe sub atan neg def
+ /angleB angleA neg def
+ wHalbe h moveto
+ x y Radius 180 angleA add 180 angleB add arc
+ x neg y Radius angleA angleB arc
+ wHalbe h lineto
+}
+%
+\def\pslensCVG{\pst@object{pslensCVG}}
+\def\pslensCVG@i#1#2{%
+ \begin@OpenObj
+ \pssetlength\pst@dima{#1}%
+ \pssetlength\pst@dimb{#2}%
+ \addto@pscode{\pslensCVG@ii}%
+ \end@OpenObj%
+}
+%
+\def\pslensCVG@ii{%
+ /w \pst@number\pst@dima def% lensWidth
+ /wHalbe w 2 div def% half of the width
+ /h \pst@number\pst@dimb 2 div def% the half of the height
+ /Radius wHalbe dup mul h dup mul add w div def
+ /x Radius wHalbe sub def
+ /y 0 def
+ /angleA h x atan neg def
+ /angleB angleA neg def
+ 0 h moveto
+ x y Radius 180 angleA add 180 angleB add arc
+ x neg y Radius angleA angleB arc
+}
+%
+%22 juin 2001 / 25 december 2002
+%Choisir la forme et la taille de la lentille
+%Le dessin de la lentille
+%
+\def\lensCVG{%
+ \scalebox{\psk@optic@lensScale}{%
+ \pscustom[linewidth=0.75\pslinewidth]{%
+ \pslensCVG{\psk@optic@lensWidth}{\psk@optic@lensHeight}
+ \fill[fillstyle=solid,fillcolor=BleuVerre]
+ }%
+ }%
+}
+%
+\def\lensDVG{%
+ \scalebox{\psk@optic@lensScale}{%
+ \pscustom[linewidth=0.75\pslinewidth]{%
+ \pslensDVG{\psk@optic@lensWidth}{\psk@optic@lensHeight}
+ \fill[fillstyle=solid,fillcolor=BleuVerre]%
+ }%
+ }%
+}
+%Sauvegarde des points pour le cas d'un
+%système à deux lentilles (26 juin 2001)
+\def\Transform{%
+ \pnode(A){A1}
+ \pnode(B){B1}
+ \pnode(A'){A'1}
+ \pnode(B'){B'1}
+ \pnode(O){O1}
+ \pnode(F){F1}
+ \pnode(F'){F'1}
+ \pnode(I){I11}
+ \pnode(I'){I'1}
+ \pnode(!%
+ /XO1 XO def
+ /YO1 YO def
+ /O1A1' OA' def
+ /A'1B'1 A'B' def
+ XO1 YO1){factice}
+}
+%
+%intersection d'un rayon avec une lentille
+\def\rayInterLens(#1)(#2)#3#4{{%
+ \pst@getcoor{#1}\pst@tempa
+ \pst@getcoor{#2}\pst@tempb
+ \pnode(!%
+ /LengthArrow \psk@optic@length\space def
+ \pst@tempa /YE1 exch \pst@number\psyunit div def
+ /XE1 exch \pst@number\psxunit div def
+ \pst@tempb /YB1 exch \pst@number\psyunit div def
+ /XB1 exch \pst@number\psxunit div def
+ /XO2 #3 def
+ /YO2 YB1 YE1 sub
+ XB1 XE1 sub div
+ XO2 XE1 sub
+ mul
+ YE1 add
+ def
+ XO2 YO2){#4}
+}}
+%
+%eye du philatéliste
+\def\eye{%
+ \psarc[linewidth=2pt](0,2.5){2.5}{215}{270}%
+ \psarc[linewidth=2pt](0,-2.5){2.5}{90}{140}%
+ \psarc(-2.5,0){1}{-30}{30}%
+ \psarc(0,0){1.75}{160}{200}
+ \psclip{%
+ \pscircle[linestyle=none](0,0){1.75}}
+ \pscircle[fillstyle=solid,fillcolor=lightgray](-2.5,0){0.9}
+ \endpsclip%
+}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% M I R R O R S %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\def\mirrorCVGRay{\@ifnextchar[{% Herbert 2003/01/05
+ \pst@mirrorCVGRay}{\pst@mirrorCVGRay[]}}
+\def\pst@mirrorCVGRay[#1](#2)(#3)#4{{%
+ \psset{#1}%
+%
+ \ifx\psk@optic@mirrorType\mirrorType% PARA
+ \pst@getcoor{#2}\pst@tempa
+ \pst@getcoor{#3}\pst@tempb
+ \pnode(!%
+ \psk@optic@mirrorHeight\space dup mul 16 div
+ \psk@optic@mirrorDepth\space div XO add YO){Focus}
+ \pnode(!%
+ /Xmax \psk@optic@mirrorHeight\space 2 div def
+ /Ymax \psk@optic@mirrorDepth\space def
+ /A 2 \psk@optic@mirrorHeight\space div dup mul Ymax mul def
+ /XA \pst@tempa exch pop \pst@number\psyunit div neg def
+ /YA \pst@tempa pop \pst@number\psxunit div def
+ /XB \pst@tempb exch pop \pst@number\psyunit div neg def
+ /YB \pst@tempb pop \pst@number\psxunit div def
+ XB XA sub abs 0.01 lt {A XA dup mul mul XA neg}{
+ /m YB YA sub XB XA sub div def
+ /m2a m A div 2 div def
+ /Root m2a dup mul m XA mul YA sub A div sub sqrt def
+ /Xp m2a Root add XA sub def
+ /Xn m2a Root sub XA sub def
+ /YSp m Xp mul YA add def
+ /XSp Xp XA add neg def
+ /YSn m Xn mul YA add def
+ /XSn Xn XA add neg def
+ YA 0 eq {0 0}{XB XA lt {YSn XSn}{YSp XSp} ifelse} ifelse} ifelse) {#4}
+ \pst@getcoor{#2}\pst@tempc% the starting point
+ \pst@getcoor{#4}\pst@tempa% the point on the mirror
+ \pnode(!%
+ /XA \pst@tempa exch pop \pst@number\psyunit div neg def
+ /YA \pst@tempa pop \pst@number\psxunit div def
+ /XC \pst@tempc exch pop \pst@number\psyunit div neg def
+ /YC \pst@tempc pop \pst@number\psxunit div def
+% Mittelpunktsstrahl?
+ XA abs 0.01 lt YA abs 0.01 lt and {%
+ /NoMoreReflection true def
+ YC XC
+ }{%
+ /DY YA YC sub def
+ /DX XA XC sub def
+% Steigung der Tangente im Punkt (XA|YA) y'=2ax
+ /mRay A XA mul 2 mul def
+% zugehoeriger Steigungswinkel alpha=arctan y'
+ /Alpha mRay 2 div 0.5 atan def
+% das dazugehoerige Lot
+ /AlphaPerp 1.0 neg mRay atan def
+% Winkel des einfallenden Strahls
+ /Beta DY DX atan def
+% Winkel des ausfallenden Strahls
+ /BetaStrich AlphaPerp 2 mul Beta sub def
+% senkrechte Steigung? cos BetaStrich = 0
+ BetaStrich cos abs 0.1 lt {%
+ /NoMoreReflection true def
+ Ymax 2 mul XA neg
+ }{%
+% Steigung
+ /m BetaStrich sin BetaStrich cos div def
+% Steigung, ab der kein Schnittpunkt mehr stattfindet
+ /mMax 2 A mul Xmax mul def
+ m abs mMax gt {
+% no more second reflection
+ /NoMoreReflection true def
+ Ymax 2 mul dup YA sub m div XA add neg
+ }{
+% moegliche 2. Reflektion
+ /NoMoreReflection false def
+% pq Formel anwenden
+ /m2a m A div 2 div def
+ /Root m2a dup mul m XA mul YA sub A div sub sqrt def
+ /X1 m2a Root add def
+ /X2 m2a Root sub def
+% be sure, that we get the right point
+ /X XA X1 sub abs 0.01 gt {X1}{X2} ifelse def
+ /Y A X dup mul mul def
+ Y X neg
+ } ifelse
+ } ifelse
+ } ifelse){#4'}
+%{\psset{linecolor=cyan}
+%\qdisk(#4'){3pt}}
+ \pst@getcoor{#2}\pst@tempa
+ \pst@getcoor{#4'}\pst@tempb
+ \pst@getcoor{#4}\pst@tempc
+ \pnode(!%
+ /XB \pst@tempb exch pop \pst@number\psyunit div neg def
+ /YB \pst@tempb pop \pst@number\psxunit div def
+ NoMoreReflection
+ {YB XB neg}{%
+ /XC \pst@tempc exch pop \pst@number\psyunit div neg def
+ /YC \pst@tempc pop \pst@number\psxunit div def
+ /XAtemp \pst@tempa exch pop \pst@number\psyunit div neg def
+ /YAtemp \pst@tempa pop \pst@number\psxunit div def
+ /m1 2 A mul XB mul def
+ /Alpha2 m1 abs 0.01 lt {90}{1 neg m1 atan} ifelse def
+ /Beta XB XC sub abs 0.01 gt
+ {YC YB sub XC XB sub atan}
+ {90} ifelse def
+ /Gamma Alpha2 Beta sub def
+ /Delta Alpha2 Gamma add def
+ Delta cos abs 0.01 gt {%
+ /mDelta Delta sin Delta cos div def
+ /X YAtemp YB sub mDelta div XB add neg def}{%
+ /X XB neg def} ifelse
+ m1 abs 0.01 lt {YAtemp XAtemp}{YAtemp X} ifelse
+ } ifelse ){#4''}
+ \else
+%--------------- A Spherical Mirror -----------------
+ \ABinterSPHLens(#2)(#3)(Center){tempRef0}
+ \pst@getcoor{tempRef0}\pst@tempa
+ \pst@getcoor{tempRef0'}\pst@tempb
+ \pnode(!%
+ \pst@tempa /Y1 exch \pst@number\psyunit div def
+ /X1 exch \pst@number\psxunit div def
+ \pst@tempb /Y2 exch \pst@number\psyunit div def
+ /X2 exch \pst@number\psxunit div def
+ X1 X2 lt {X1 Y1}{X2 Y2}ifelse ){#4}
+ \reflectionRay[#1](#2)(#4){tempRef1}
+% we try if we have another intermediate point
+ \ABinterSPHLens(#4)(tempRef1)(Center){tempRef2}
+ \pst@getcoor{#4}\pst@tempa
+ \pst@getcoor{tempRef2}\pst@tempb
+ \pst@getcoor{tempRef2'}\pst@tempc
+ \pnode(!%
+ \pst@tempa /YP exch \pst@number\psyunit div def
+ /XP exch \pst@number\psxunit div def
+ \pst@tempb /Y1 exch \pst@number\psyunit div def
+ /X1 exch \pst@number\psxunit div def
+ \pst@tempc /Y2 exch \pst@number\psyunit div def
+ /X2 exch \pst@number\psxunit div def
+ XP X1 sub abs 0.01 gt {X1 Y1}{X2 Y2}ifelse
+ ){#4'}
+ \reflectionRay[#1](tempRef1)(#4'){#4''}
+ \psset{mirrorType=CVG}% restore
+ \fi
+ \ifPst@drawing
+ \psline[#1](#2)(#4)
+ \psline[#1](#4)(#4')
+ \psline[#1](#4')(#4'')
+ \fi
+}}
+%
+%
+\def\mirrorCVG{\@ifnextchar[{% Herbert Voss 2003/01/05
+ \pst@mirrorCVG}{\pst@mirrorCVG[]}}
+\def\pst@mirrorCVG[#1]{{%
+ \psset{%
+ mirrorType=CVG,%
+ AB=1.25,OA=4.5,%
+ XO=0,YO=0,xLeft=-5,xRight=5,yBottom=-3,yTop=3,%
+ mirrorHeight=5,mirrorDepth=1,mirrorWidth=0.2}
+ \psset{#1}
+ \begin{pspicture}(\psk@optic@xLeft,\psk@optic@yBottom)(\psk@optic@xRight,\psk@optic@yTop)
+ \pnode(! \psk@optic@xLeft\space 0){xLeft}
+ \pnode(! \psk@optic@xRight\space 0){xRight}
+ \pstVerb{%
+ /Height \psk@optic@mirrorHeight\space 2.0 div def
+ /Depth \psk@optic@mirrorDepth\space def
+ /Width \psk@optic@mirrorWidth\space def
+ }
+ \pnode(!%
+ /AB \psk@optic@AB\space def
+ /OA \psk@optic@OA\space def
+ /XO \psk@optic@XO\space def
+ /YO \psk@optic@YO\space def
+ OA XO add YO){A}
+ \pnode(! OA XO add AB YO add){B}
+ \pnode(! XO YO){O}
+ \ifx\psk@optic@mirrorType\mirrorType
+ \pnode(!%
+ \psk@optic@mirrorHeight\space dup mul 16 div
+ \psk@optic@mirrorDepth\space div XO add YO){Focus}
+ \else
+ \pnode(!%
+ /radius \psk@optic@mirrorHeight\space dup mul 4 div
+ \psk@optic@mirrorDepth\space dup mul add
+ 2 div \psk@optic@mirrorDepth\space div def
+ radius XO add YO){Center}
+ \pnode(! radius 2 div XO add YO){Focus}
+ \fi
+ \pscustom[fillstyle=solid,%
+ fillcolor=\psk@optic@mirrorColor,%
+ linecolor=\psk@optic@mirrorColor]{%
+ % (d,h/2)->(d-w,h/2)
+ \psline(!%
+ \psk@optic@mirrorDepth\space \psk@optic@mirrorHeight\space 2 div)(!%
+ \psk@optic@mirrorDepth\space \psk@optic@mirrorWidth\space sub
+ \psk@optic@mirrorHeight\space 2 div)
+ % (-w/2,h/2)->(-w/2,-h/2)
+ \ifx\psk@optic@mirrorType\mirrorType
+ \parametricplot{\psk@optic@mirrorHeight}{-\psk@optic@mirrorHeight}{%
+ 2 \psk@optic@mirrorHeight\space div dup mul \psk@optic@mirrorDepth\space mul
+ t 2 exp 4 div mul \psk@optic@mirrorWidth\space sub t 2 div
+ }
+ \else
+ \parametricplot{\psk@optic@mirrorHeight}{-\psk@optic@mirrorHeight}{%
+ /radD radius \psk@optic@mirrorWidth\space add def
+ radius \psk@optic@mirrorWidth\space sub radD dup mul t 2 div dup mul sub sqrt sub
+ t 2 div
+ }
+ \fi
+ % (d-w,-h/2)(d,-h/2)
+ \psline(!%
+ \psk@optic@mirrorDepth\space \psk@optic@mirrorWidth\space sub
+ \psk@optic@mirrorHeight\space 2 div neg)(!%
+ \psk@optic@mirrorDepth\space \psk@optic@mirrorHeight\space 2 div neg)
+ % (w/2,-h/2)->(w/2,h/2)
+ \ifx\psk@optic@mirrorType\mirrorType
+ \parametricplot{-\psk@optic@mirrorHeight}{\psk@optic@mirrorHeight}{%
+ 2 \psk@optic@mirrorHeight\space div dup mul \psk@optic@mirrorDepth\space mul
+ t 2 exp 4 div mul t 2 div
+ }
+ \else
+ \parametricplot{-\psk@optic@mirrorHeight}{\psk@optic@mirrorHeight}{%
+ radius dup dup mul t 2 div dup mul sub sqrt sub
+ t 2 div
+ }
+ \fi
+ \fill
+ }
+ \ifPst@drawing
+ \psline[linewidth=0.5pt,linecolor=black](O)(xRight)
+ \ifx\psk@optic@mirrorType\mirrorType
+ \else
+ \qdisk(Center){1.5pt}\uput{0.2}[-90](Center){Center}
+ \fi
+ \qdisk(Focus){2pt}\uput[0](Focus){F}
+ \psline[linewidth=3\pslinewidth]{->}(A)(B)
+ \psset{%
+ linewidth=\pslinewidth,%
+ linecolor=\psk@optic@rayColor,%
+ arrows=>}
+ \uput[0](A){A}
+ \uput[0](B){B}
+ \pnode(! 1 \psk@optic@AB\space){Dummy}
+ \mirrorCVGRay[mirrorType=\psk@optic@mirrorType,drawing=false](B)(Dummy){PR}
+ \psOutLine[length=\psk@optic@OA](PR)(PR'){PR''}
+ \nodeBetween(B)(PR){Dummy}
+ \psline(B)(Dummy)
+ \psline(Dummy)(PR)
+ \nodeBetween(PR)(PR''){Dummy}
+ \psline(PR)(Dummy)
+ \psline(Dummy)(PR'')
+%
+ \mirrorCVGRay[mirrorType=\psk@optic@mirrorType,drawing=false](B)(! 0 0){MR}
+ \psOutLine[length=\psk@optic@OA](MR)(MR'){MR''}
+ \nodeBetween(B)(MR){Dummy}
+ \psline(B)(Dummy)
+ \psline(Dummy)(MR)
+ \nodeBetween(MR)(MR'){Dummy}
+ \psline(MR)(Dummy)
+ \psline(Dummy)(MR')
+%
+ \mirrorCVGRay[mirrorType=\psk@optic@mirrorType,drawing=false](B)(Focus){FR}
+ \psOutLine[length=\psk@optic@OA](FR)(FR'){FR''}
+ \nodeBetween(B)(FR){Dummy}
+ \psline(B)(Dummy)
+ \psline(Dummy)(FR)
+ \nodeBetween(FR)(FR'){Dummy}
+ \psline(FR)(Dummy)
+ \psline(Dummy)(FR')
+%
+ \ABinterCD(PR)(PR')(FR)(FR'){B'}
+ \pnode( B'|0,0 ){A'}
+ \psline[linecolor=black,linewidth=3\pslinewidth,arrows=->](A')(B')
+ \uput[45](A'){A'}
+ \uput[-45](B'){B'}
+ \fi
+ \end{pspicture}
+}}
+%
+%
+\def\mirrorDVG{\@ifnextchar[{% Herbert Voss 2003/01/05
+ \pst@mirrorDVG}{\pst@mirrorDVG[]}}
+\def\pst@mirrorDVG[#1]{{%
+ \psset{% the defaults
+ AB=1.25,OA=4,XO=0,YO=0,%
+ xLeft=-5,xRight=5,yBottom=-3,yTop=3,%
+ mirrorHeight=5,mirrorDepth=1,mirrorWidth=0.2}
+ \psset{#1}%
+ \pstVerb{%
+ /Height \psk@optic@mirrorHeight\space 2 div def
+ /Depth \psk@optic@mirrorDepth\space def
+ /Width \psk@optic@mirrorWidth\space def
+ }
+ \begin{pspicture}(\psk@optic@xLeft,\psk@optic@yBottom)(\psk@optic@xRight,\psk@optic@yTop)
+ \pnode(! \psk@optic@xLeft\space 0){xLeft}
+ \pnode(! \psk@optic@xRight\space 0){xRight}
+ \pnode(!%
+ /AB \psk@optic@AB\space def
+ /OA \psk@optic@OA\space def
+ /XO \psk@optic@XO\space def
+ /YO \psk@optic@YO\space def
+ OA XO add YO){A}
+ \pnode(! OA XO add AB YO add){B}
+ \pnode(! XO YO){O}
+ \ifx\psk@optic@mirrorType\mirrorType
+ \pnode(! Height dup mul 4 div Depth div XO add YO){Focus}
+ \else
+ \pnode(!%
+ /radius Height dup mul Depth dup mul add 2 div Depth div def
+ radius neg XO add YO){Center}
+ \pnode(! radius 2 div XO add YO){Focus}
+ \fi
+ \pscustom[fillstyle=solid,%
+ fillcolor=\psk@optic@mirrorColor,%
+ linecolor=\psk@optic@mirrorColor]{%
+ % (d,h/2)->(d-w,h/2)
+ \psline(! Depth neg Height)(! Depth Width add neg Height)
+ % (-w/2,h/2)->(-w/2,-h/2)
+ \ifx\psk@optic@mirrorType\mirrorType
+ \parametricplot{\psk@optic@mirrorHeight}{-\psk@optic@mirrorHeight}{%
+ Depth Height dup mul div t 2 exp 4 div mul neg
+ t 2 div
+ }
+ \else
+ \parametricplot{\psk@optic@mirrorHeight}{-\psk@optic@mirrorHeight}{%
+ radius dup mul t 2 div dup mul sub sqrt radius sub
+ t 2 div
+ }
+ \fi
+ % (d-w,-h/2)(d,-h/2)
+ \psline(! Depth Width add neg Height neg)(! Depth neg Height neg)%
+ % (w/2,-h/2)->(w/2,h/2)
+ \ifx\psk@optic@mirrorType\mirrorType
+ \parametricplot{-\psk@optic@mirrorHeight}{\psk@optic@mirrorHeight}{%
+ Depth Height dup mul div t 2 exp 4 div mul neg Width sub
+ t 2 div
+ }
+ \else
+ \parametricplot{-\psk@optic@mirrorHeight}{\psk@optic@mirrorHeight}{%
+ radius Width sub dup mul t 2 div dup mul sub sqrt radius sub
+ t 2 div
+ }
+ \fi
+ \fill
+ }
+ \ifPst@drawing
+ \psline[linecolor=black,linewidth=0.5pt](xLeft)(xRight)
+ \qdisk(Center){2pt}\uput[-90](Center){C}
+ \qdisk(Focus){2pt}\uput{0.25}[-90](Focus){F}
+ \psline[linewidth=3\pslinewidth,arrowinset=0]{->}(A)(B)
+ \psset{%
+ linewidth=1.5\pslinewidth,%
+ linecolor=\psk@optic@rayColor,%
+ arrows=->%
+ }
+ \uput{0.15}[0](A){A}
+ \uput{0.15}[0](B){B}
+%
+ \mirrorDVGRay[%
+ mirrorType=\psk@optic@mirrorType,%
+ drawing=false](B)(! 0 \psk@optic@AB){PR}
+ \qdisk(PR){1.5pt}\uput{0.2}[180](PR){PR}
+ \qdisk(PR'){1.5pt}\uput{0.2}[0](PR'){PR'}
+ \nodeBetween(B)(PR){PDummy}
+ \psline(B)(PDummy)
+ \psline(PDummy)(PR)
+ \psline[arrows=-, linestyle=dotted](Focus)(PR)
+ \psOutLine[arrows=-,linestyle=dotted](P)(Focus){PBegin}
+ \psline(PR)(PR')
+%
+ \mirrorDVGRay[%
+ mirrorType=\psk@optic@mirrorType,%
+ drawing=false](B)(! 0 0){MR}
+ \qdisk(MR){1.5pt}\uput{0.2}[180](MR){MR}
+ \qdisk(MR'){1.5pt}\uput{0.2}[0](MR'){MR'}
+ \nodeBetween(B)(! 0 0){MDummy}
+ \psline(B)(MDummy)
+ \psline(MDummy)(! 0 0)
+ \psline(MR)(MR')
+%
+ \mirrorDVGRay[%
+ mirrorType=\psk@optic@mirrorType,%
+ drawing=false](B)(Focus){FR}
+ \qdisk(FR){1.5pt}\uput{0.2}[180](FR){FR}
+ \qdisk(FR'){1.5pt}\uput{0.2}[0](FR'){FR'}
+ \nodeBetween(B)(FR){Dummy}
+ \psline(B)(Dummy)
+ \psline(Dummy)(FR)
+ \psline(FR)(FR')
+ \psline[arrows=-,linestyle=dotted](Focus)(FR)
+ \psOutLine[arrows=-, linestyle=dotted](FR)(Focus){PBegin}
+ \fi
+ \end{pspicture}
+}}
+%
+\def\mirrorDVGRay{\@ifnextchar[{% Herbert Voss 2003/01/05
+ \pst@mirrorDVGRay}{\pst@mirrorDVGRay[]}}
+\def\pst@mirrorDVGRay[#1](#2)(#3)#4{{%
+ \psset{#1}%
+ \pnode(!%
+ \psk@optic@mirrorHeight\space dup mul 16 div
+ \psk@optic@mirrorDepth\space div neg 0){Focus}
+ \ifx\psk@optic@mirrorType\mirrorType
+ \pst@getcoor{#2}\pst@tempa
+ \pst@getcoor{#3}\pst@tempb
+ \pnode(!%
+ /A 2 \psk@optic@mirrorHeight\space div dup mul \psk@optic@mirrorDepth\space mul neg def
+ /XA \pst@tempa exch pop \pst@number\psyunit div neg def
+ /YA \pst@tempa pop \pst@number\psxunit div def
+ /XB \pst@tempb exch pop \pst@number\psyunit div neg def
+ /YB \pst@tempb pop \pst@number\psxunit div def
+ XB abs 0.001 lt YB abs 0.001 lt and
+ { 0 0 }{
+ XB XA sub abs 0.01 lt
+ {A XA dup mul mul XA neg}{
+ /Xmax \psk@optic@mirrorHeight\space 2 div def
+ /m YB YA sub XB XA sub div def
+ /m2a m A div 2 div def
+ /Root m2a dup mul m XA mul YA sub A div sub sqrt def
+ /X1 m2a Root add def
+ /X2 m2a Root sub def
+ /X XB X1 sub abs XB X2 sub abs lt
+ {X1}{X2} ifelse def
+ /Y A X dup mul mul def
+ X abs Xmax lt
+ {Y X neg}
+ {A Xmax dup mul mul Xmax neg} ifelse
+ } ifelse
+ } ifelse){#4}
+ % #4 is the point on the mirror
+ \pst@getcoor{#2}\pst@tempc% the starting point
+ \pst@getcoor{#4}\pst@tempa% the point on the mirror
+ \pst@getcoor{Focus}\pst@tempf% the point on the mirror
+ \pnode(!
+ /XA \pst@tempa exch pop \pst@number\psyunit div neg def
+ /YA \pst@tempa pop \pst@number\psxunit div def
+ /XC \pst@tempc exch pop \pst@number\psyunit div neg def
+ /YC \pst@tempc pop \pst@number\psxunit div def
+ XA abs 0.001 lt YA abs 0.001 lt and
+ {YC XC}{
+ /YF \pst@tempf pop \pst@number\psxunit div def
+ /DY YA YC sub def
+ /DX XA XC sub def
+ /Alpha A XA mul 0.5 atan def
+ /Delta 180 DY DX atan sub Alpha 2 mul add def
+ Delta round cvi 90 mod 0 eq {YC XA neg}{
+ /m DX abs 0.01 lt
+ {YA YF sub XA div}
+ {Delta sin Delta cos div} ifelse def
+ /X \psk@optic@length\space Delta cos mul neg XA add def
+ /Y \psk@optic@length\space Delta sin mul neg YA add def
+ Y X neg
+ } ifelse
+ } ifelse){#4'}% second point on the mirror
+ \else
+%--------------- A Spherical Mirror -----------------
+ \ABinterSPHLens(#2)(#3)(Center){tempRef0}
+ \pst@getcoor{tempRef0}\pst@tempa
+ \pst@getcoor{tempRef0'}\pst@tempb
+ \pnode(!%
+ \pst@tempa /Y1 exch \pst@number\psyunit div def
+ /X1 exch \pst@number\psxunit div def
+ \pst@tempb /Y2 exch \pst@number\psyunit div def
+ /X2 exch \pst@number\psxunit div def
+ X1 X2 gt {X1 Y1}{X2 Y2}ifelse ){#4}
+ \reflectionRay[mirrorType=SPH](#2)(#4){tempRef1}
+ \pnode(tempRef1){#4'}
+ \fi
+ \ifPst@drawing
+ \psline[#1](#2)(#4)(#4')
+ \fi
+}}
+%
+% HEadlight Herbert <voss@perce.de> 2003/01/23
+%
+\def\beamLight{\@ifnextchar[{\pst@beamLight}{\pst@beamLight[]}}
+\def\pst@beamLight[#1]{{%
+ \psset{xLeft=-5,xRight=5,yBottom=-5,yTop=5,%
+ drawing=false}% the defaults
+ \psset{#1}%
+\begin{pspicture*}(\psk@optic@xLeft,\psk@optic@yBottom)(\psk@optic@xRight,\psk@optic@yTop)
+ \rput(0,0){%
+ \mirrorCVG[#1]%
+ }
+ \psline[linewidth=0.1cm]%
+ (!\psk@optic@mirrorDepth\space \psk@optic@mirrorHeight\space 2 div neg)%
+ (!\psk@optic@mirrorDepth\space \psk@optic@mirrorHeight\space 2 div)
+ \psset{linewidth=0.75mm,fillstyle=solid}
+ \psline(-1.1,1)(0.2,1)
+ \psline(-1.1,-1)(0.2,-1)
+ \pscurve(0.2,0.75)(1.6,1.5)(3,1)(3.5,0)(3,-1)(1.6,-1.5)(0.2,-0.75)
+ \psframe(-1.1,-0.85)(0.2,0.85)
+ \psframe(0.2,-0.3)(0.5,0.3)
+ \psline(-1.1,-0.85)(-1.4,-0.6)(-1.4,0.6)(-1.1,0.85)
+ \psline(0,0)(2.9,0)(2.9,0.5)(0.9,0.5)(0.9,0)%
+ \psline(3.0,0)(3.0,-0.3)(2.5,-0.3)(2.2,0.15)(2,-0.15)%
+ (1.8,0.15)(1.6,-0.15)(1.4,0.15)(1.2,-0.15)(1,0.15)%
+ \psline[linecolor=black,linewidth=0.5pt,linestyle=dashed](-1.75,0)(10,0)
+\end{pspicture*}
+}}
+%
+%
+%Telescope
+%2 juillet 2001
+%
+\def\mirrorTwo{%
+ \psframe[linestyle=none,%
+ fillstyle=vlines,%
+ hatchwidth=0.5\pslinewidth,%
+ hatchsep=3\pslinewidth](-1,0)(1,0.2)
+ \psline[linewidth=1.5\pslinewidth](-1,0)(1,0)%
+}
+%
+\def\telescope{\@ifnextchar[{\pst@telescope}{\pst@telescope[]}}
+\def\pst@telescope[#1]{{%
+ \psset{xLeft=-0.5,xRight=11,yBottom=-6,yTop=2}% the default
+ \psset{#1}%
+ \pstVerb{%
+ /mirrorFocus \psk@optic@mirrorFocus\space def
+ /Coeff mirrorFocus 4 mul def
+ /mirrorTwoAngle \psk@optic@mirrorTwoAngle\space def
+ /posMirrorTwo \psk@optic@posMirrorTwo\space def
+ }%
+%
+\begin{pspicture}*(\psk@optic@xLeft,\psk@optic@yBottom)(\psk@optic@xRight,\psk@optic@yTop)
+ \rput(0,0){%
+ \mirrorCVG[%
+ mirrorHeight=4,%
+ mirrorWidth=0.25,%
+ mirrorDepth=0.25,%
+ drawing=false]%
+ }
+ \pnode(! \psk@optic@xLeft\space 0){xLeft}
+ \pnode(! \psk@optic@xRight\space 0){xRight}
+ \psline[linewidth=0.5\pslinewidth](11,0)
+ \pnode(! 1.5 dup mul Coeff div 1.5){P1}
+ \pnode(! 1.5 dup mul Coeff div 1.5 neg){P2}
+ \pnode(! mirrorFocus 0){mirrorFocusNode}
+ \pnode(! posMirrorTwo 1 mirrorTwoAngle cos mul sub
+ 1 mirrorTwoAngle sin mul){UpMirror2}
+ \pnode(! posMirrorTwo 1 mirrorTwoAngle cos mul add
+ 1 mirrorTwoAngle sin mul neg){DownMirror2}
+ \ABinterCD(P1)(mirrorFocusNode)(UpMirror2)(DownMirror2){Inter1}
+ \ABinterCD(P2)(mirrorFocusNode)(UpMirror2)(DownMirror2){Inter2}
+ \pnode(!%
+ \psk@optic@posMirrorTwo\space posMirrorTwo mirrorFocus sub){ocularFocusNode}
+ {%
+ \psset{linecolor=red}
+ \Arrows[arrows=->,arrowsize=0.2](11,1.5)(P1)
+ \Arrows[arrows=->,arrowsize=0.2](P1)(Inter1)
+%
+ \Arrows[arrows=->>,arrowsize=0.2](11,-1.5)(P2)
+ \Arrows[arrows=->>,arrowsize=0.2](P2)(Inter2)
+ \psline[linestyle=dashed](Inter2)(mirrorFocusNode)
+ \pnode(! 5 \psk@optic@posMirrorTwo\space 2 sub neg){ocularLeft}
+ \pnode(! 7 \psk@optic@posMirrorTwo\space 2 sub neg){ocularRight}
+ \ABinterCD(Inter1)(ocularFocusNode)(ocularLeft)(ocularRight){FO1}
+ \ABinterCD(Inter2)(ocularFocusNode)(ocularLeft)(ocularRight){FO2}
+ \Arrows[arrows=->>,arrowsize=0.2,length=1](Inter2)(FO2)
+ \psline(11,-1.5)(P2)(Inter2)(FO2)
+ \Arrows[arrows=->,arrowsize=0.2](Inter1)(ocularFocusNode)
+ \psline[linestyle=dashed](Inter1)(mirrorFocusNode)
+ \psline(11,1.5)(P1)(Inter1)(FO1)
+ }
+ \rput{-\psk@optic@mirrorTwoAngle}(\psk@optic@posMirrorTwo,0){\mirrorTwo}
+ \uput[90](mirrorFocusNode){$\mathrm{F_1}$}
+ \uput[180](ocularFocusNode){$\mathrm{F_2}$}
+ \rput{90}(!%
+ \psk@optic@posMirrorTwo\space
+ \psk@optic@posMirrorTwo\space 2 sub neg){%
+ \scalebox{0.5 0.4}{\lens[lensWidth=0.4,lensGlass=true,drawing=false]}}
+ \pnode(0,2){Aux1}
+ \pnode(0,-2){Aux2}
+ \Parallel[length=1](Aux1)(Aux2)(FO1){Eye1}
+ \Parallel[length=1](Aux1)(Aux2)(FO2){Eye2}
+ {%
+ \psset{linecolor=red,arrowsize=0.2,length=0.7}
+ \psline[linecolor=red](FO1)(Eye1)
+ \psline[linecolor=red](FO2)(Eye2)
+ \Arrows[arrows=->](FO1)(Eye1)
+ \Arrows[arrows=->>](FO2)(Eye2)%
+ }
+ \rput{-90}(!%
+ \psk@optic@posMirrorTwo\space
+ \psk@optic@posMirrorTwo\space neg){\scalebox{0.6}{\eye}}
+ \end{pspicture}
+}}
+%
+%Images et réflexions sur un miroir plan
+%(#1) coordonnées du point objet (XA,YA)
+%(#2) coordonnées d'une extrémité du miroir (X1,Y1)
+%(#3) coordonnées de l'autre extrémité du miroir (X2,Y2)
+%{#4} nom de l'image A'
+%
+\def\planMirrorRay(#1)(#2)(#3)#4{{%
+\pst@getcoor{#1}\pst@tempa
+\pst@getcoor{#2}\pst@tempb
+\pst@getcoor{#3}\pst@tempc
+\pnode(!%
+ \pst@tempa /YA exch \pst@number\psyunit div def
+ /XA exch \pst@number\psxunit div def
+ \pst@tempb /Y1 exch \pst@number\psyunit div def
+ /X1 exch \pst@number\psxunit div def
+ \pst@tempc /Y2 exch \pst@number\psyunit div def
+ /X2 exch \pst@number\psxunit div def
+ /Dx X2 X1 sub def
+ /Dy Y2 Y1 sub def
+ /xH XA Dx Dx mul mul
+ X1 Dy Dy mul mul
+ add
+ YA Y1 sub Dx Dy mul mul
+ add
+ Dx Dx mul Dy Dy mul add
+ div
+ def
+ /yH YA Dy Dy mul mul
+ Y1 Dx Dx mul mul
+ add
+ XA X1 sub Dx Dy mul mul
+ add
+ Dx dup mul Dy dup mul add
+ div
+ def
+ /xA' 2 xH mul XA sub def
+ /yA' 2 yH mul YA sub def
+ /D12 Dx Dx mul Dy Dy mul add sqrt def
+ xA' yA' moveto
+ xH yH rlineto
+ xA' yA'){#4}
+}}
+%
+% 2002/12/27
+%
+\def\symPlan(#1)(#2){\pst@killglue\pst@makebox{\symPlan@(#1)(#2)}}%
+\def\symPlan@(#1)(#2){{%
+ \pst@getcoor{#1}\pst@tempa%
+ \pst@getcoor{#2}\pst@tempb%
+ \leavevmode
+ \hbox{%
+ \pnode(!%
+ \pst@tempa /Y1 exch def
+ /X1 exch def
+ \pst@tempb /Y2 exch def
+ /X2 exch def
+ /DX X2 X1 sub def
+ /DY Y2 Y1 sub def
+ /D12 DX dup mul DY dup mul add def
+ /ax 2 DX dup mul mul D12 div 1 sub def
+ /by 2 DX DY mul mul D12 div def
+ /cx by def
+ /dy 2 DY dup mul mul D12 div 1 sub def
+ /tx X1 DY dup mul mul
+ Y1 DX DY mul mul sub
+ 2 mul
+ D12 div
+ def
+ /ty Y1 DX dup mul mul
+ X1 DX DY mul mul sub
+ 2 mul
+ D12 div
+ def
+ X1 Y1){Factice}%
+ \pst@Verb{%
+ { [ax by cx dy tx ty] concat
+ } \tx@TMChange}%
+ \box\pst@hbox
+ \pst@Verb{\tx@TMRestore}}%
+}}
+%
+% refractionRay[options](A)(B)(C)(D){rNoA}{rNoB}{E}
+% (A)(B) the ray nodes
+% (C)(D) the nodes of the other material
+% {rNoA}{rNoB} the refraction numbers
+% {E} the intermediate node of the ray and the material
+% {E'} the end node of the ray
+%
+% Herbert Voss <voss@perce.de> 2003-01-26
+%
+\def\refractionRay{\@ifnextchar[{\pst@refractionRay}{\pst@refractionRay[]}}
+\def\pst@refractionRay[#1](#2)(#3)(#4)(#5)#6#7#8{{%
+ \psset{#1}
+ \pst@getcoor{#2}\pst@tempa
+ \pst@getcoor{#3}\pst@tempb
+ \pst@getcoor{#4}\pst@tempc
+ \pst@getcoor{#5}\pst@tempd
+ \ABinterCD(#2)(#3)(#4)(#5){#8}
+%\psset{linecolor=black}
+%\qdisk(#8){2pt}
+% #8 is the point on the material
+ \pst@getcoor{#8}\pst@tempp
+ \def\pst@optic@cIn{#6} % refraction number 1
+ \def\pst@optic@cOut{#7} % refraction number 2
+ \pnode(!%
+ /YA \pst@tempa exch pop \pst@number\psyunit div def
+ /XA \pst@tempa pop \pst@number\psxunit div def
+ /YB \pst@tempb exch pop \pst@number\psyunit div def
+ /XB \pst@tempb pop \pst@number\psxunit div def
+ /YC \pst@tempc exch pop \pst@number\psyunit div def
+ /XC \pst@tempc pop \pst@number\psxunit div def
+ /YD \pst@tempd exch pop \pst@number\psyunit div def
+ /XD \pst@tempd pop \pst@number\psxunit div def
+ /YP \pst@tempp exch pop \pst@number\psyunit div def
+ /XP \pst@tempp pop \pst@number\psxunit div def
+ /dY1 YP YA sub def
+ /dX1 XP XA sub def
+ /dY2 YD YC sub def
+ /dX2 XD XC sub def
+% the gradient of the material (if negativ then it must be the nominator)
+ /Gamma dY2 dX2 mul 0 lt {dY2 abs neg dX2 abs}{dY2 dX2} ifelse atan def
+% the perpendicular line is: 90°-Gamma
+ /GammaStrich 90 Gamma sub def
+% the angle of the incoming ray
+ /AlphaStrich dY1 dX1 atan def
+% the same relative to the material
+ /Alpha 90 AlphaStrich sub Gamma add def
+% the angle of the outgoing ray relative to the material
+% the law of Snell: sin(Alpha)/sin(Beta) = n2/n1
+% sin(Beta)>1 is a total reflection instead of a refraction
+ /sinBeta \pst@optic@cIn\space \pst@optic@cOut\space div Alpha sin mul def
+ sinBeta abs 1 le{
+ /Root 1 sinBeta dup mul sub sqrt def
+ /Beta sinBeta Root atan def
+ }{
+ /Beta 180 Alpha sub def
+ } ifelse
+% the same absolute
+ /BetaStrich 90 Gamma sub Beta add def
+% Determine the intermediate point
+ XP BetaStrich cos sub
+ YP BetaStrich sin add ){#8'}
+%\qdisk(#8){5pt}
+}}
+%
+% Herbert Voss <voss@perce.de> 2003-02-10
+%
+% reflectionRay[options](A)(B){C}
+% options: the type of
+% (A)(B) the ray nodes
+% {C} the intermediate node of the ray and the material
+% {C'} the end node of the reflected ray
+%
+\def\reflectionRay{\@ifnextchar[{\pst@reflectionRay}{\pst@reflectionRay[]}}
+\def\pst@reflectionRay[#1](#2)(#3)#4{{%
+ \psset{#1}
+ \pst@getcoor{#2}\pst@tempa% the starting point
+ \pst@getcoor{#3}\pst@tempp% the point on the mirror
+ \pst@getcoor{Center}\pst@tempc% the center/focus of the mirror
+ \ifx\psk@optic@mirrorType\mirrorType% Parabolic
+ \else% Spherical
+ \pnode(!%
+ /XA \pst@tempa exch pop \pst@number\psyunit div neg def
+ /YA \pst@tempa pop \pst@number\psxunit div def
+ /XC \pst@tempc exch pop \pst@number\psyunit div neg def
+ /YC \pst@tempc pop \pst@number\psxunit div def
+ /XP \pst@tempp exch pop \pst@number\psyunit div neg def
+ /YP \pst@tempp pop \pst@number\psxunit div def
+ /dY1 YA YP sub def
+ /dX1 XA XP sub def
+ /signum YP 0 lt {-1}{1}ifelse def
+% the gradient of the point. radius must be defined
+ /root radius dup mul XP dup mul sub sqrt def
+ /Gamma XP signum mul root atan 180 sub def
+% the angle of the incoming ray
+ /AlphaStrich dY1 dX1 atan 180 sub def
+% the same relative to the material
+ /Alpha 90 AlphaStrich sub Gamma add def
+% the angle of the outgoing ray absolute
+% /BetaStrich Alpha 2 mul AlphaStrich sub def
+ /BetaStrich Gamma Alpha add 90 sub def
+% Determine the intermediate point
+ YP BetaStrich sin add XP BetaStrich cos add neg){#4}
+ \fi
+}}
+%
+\catcode`\@=\PstAtCode\relax
+%
+%% END: pst-optic.tex
+\endinput