diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/pst-optic')
-rw-r--r-- | Master/texmf-dist/tex/generic/pst-optic/pst-optic.tex | 1836 |
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 |