\documentclass[12pt]{article} \usepackage[T1]{fontenc} \usepackage[latin1]{inputenc} \usepackage[vtex]{geometry} \usepackage{graphicx} \usepackage{subfigure} \usepackage{pstcol} \usepackage{pst-optic} \usepackage{pst-text} \usepackage{url} \usepackage{amsmath} \usepackage{tabularx} \usepackage{lscape} \usepackage{fancyhdr} \pagestyle{fancy} \lfoot{\small\ttfamily\jobname.tex} \cfoot{} \rfoot{} \renewcommand{\headrulewidth}{0pt} \renewcommand{\footrulewidth}{0pt} \usepackage{listings} \lstset{language=TEX,basicstyle=\ttfamily\footnotesize,% extendedchars=true,numbers=left,numberstyle=\tiny} \usepackage{multicol} \let\myPart\part \renewcommand{\part}[1]{% \clearpage\myPart{#1}% } \newcommand{\PS}{PostScript} \newcommand\CMD[1]{\texttt{\textbackslash#1}} \psset{subgriddiv=0,gridlabels=7pt,griddots=5} \usepackage[vtex]{hyperref} \begin{document} \author{Manuel Luque\thanks{Mluque5130@aol.com} \and Herbert Voß\thanks{voss@perce.de}} \date{2003/02/15} \title{Lenses and Mirrors: PST-optic v0.9} \maketitle \tableofcontents \section*{Introduction} \verb|pstricks| writes pure PostScript\cite{PostScript} code, so it is not possible to run \TeX{} files with pdf\LaTeX{} when there are pstricks macros in the document. If you still need a PDF output use the package \verb|pdftricks.sty|\cite{pdftricks} or the for Linux free available program \verb|vlatex| (\url{http://www.micropress-inc.com/linux/}) or build the PDF with \verb|ps2pdf| (\verb|dvi|$\rightarrow$\verb|ps|$\rightarrow$\verb|pdf|). \par If you need package \verb|graphicx.sty| load it before any \verb|pstricks| package. You do not need to load \verb|pstricks.sty|, it will be done by \verb|pst-optic| by default. \vspace{\fill} This PDF file was created with the \textbf{vlatex} program from the free available \textit{VTeX/Lnx v7.530 - the VTeX distribution for Linux (x86)}. \part{General Options} All options are by default documentwide valid but not supported by all macros. Table \ref{tab:generalOptions} shows the general ones. Others are shown in table \ref{tab:defaultLens} and \ref{tab:defaultSpiegel}. \begin{table}[!htb] \centering \begin{tabular}{l|l|l} \textbf{Option} & \textbf{Name} & \textbf{Default}\\\hline Left value of the picture in cm & xLeft & -7.5\\ Right value of the picture in cm & xRight & 7.5\\ Lowest value of the picture in cm & xBottom & -3\\ Highest value of the picture in cm & xTop & 3\\ x-Offset & XO & 0\\ y-Offset & YO & 0\\ Node A as string & nameA & A\\ Angle A in degrees & spotA & 270\\ Node B as string & nameB & B\\ Angle B in degrees & spotB & 270\\ Node F as string & nameF & F\\ Angle F in degrees & spotF & 270\\ Node O as string & nameO & O\\ Angle O in degrees & spotO & 225\\ Node A' as string & nameAi & A'\\ Angle A' in degrees & spotAi & 90\\ Node B' as string & nameBi & B'\\ Angle B' in degrees & spotBi & 270\\ Node F' as string & nameFi & B'\\ Angle F' in degrees & spotFi & 270\\ Ray color & rayColor & black\\\hline \end{tabular} \caption{General options and the defaults}\label{tab:generalOptions} \end{table} \verb|pst-optic| puts the lens and mirror macros in an own \verb|pspicture| environment. The star version enables the clipping option of \verb|pstricks|: \begin{lstlisting} \begin{pspicture}*(xLeft,yBottom)(xRight,yTop) \lens[% focus=2,OA=-3,AB=1,XO=0,YO=0,% xLeft=-7.5,xRight=7.5,yBottom=-3,yTop=3] \end{pspicture} \end{lstlisting} If you need other values for the \verb|pspicture| environment, then use the \verb|\rput| command to place the macro at any position. \begin{lstlisting} \begin{pspicture}(-5,-1.5)(7,4) \rput(1.5,1.5){% \lens[lensType=DVG,lensGlass=true,% lensWidth=0.5,rayColor=red]} \end{pspicture} \end{lstlisting} \par \begin{center} \begin{pspicture}(-5,-1.5)(7,4) \psgrid[subgriddiv=0,gridlabels=5pt,griddots=5] \rput(1.5,1.5){\scalebox{0.75}{\lens[lensType=DVG,% lensGlass=true,lensWidth=0.5,rayColor=red]}} \end{pspicture} \end{center} \par \part{Lenses} There are macros for the convergent and divergent lens \begin{description} \item \verb|\lens[CVG]| \textbf{C}on\textbf{v}er\textbf{g}ent (Collecting lens ) - default \item \verb|\lens[DVG]| \textbf{D}i\textbf{v}er\textbf{g}ent (Scatter lens ) \end{description} \section{The Coordinates of the predefined Nodes} Figure \ref{fig:nodes} shows the coordinates of the predefined nodes (see table \ref{tab:generalOptions}). \begin{lstlisting} \begin{pspicture}*(-8,-3.25)(8,3.25) \rput(0,0){% \lens[drawing=false] \psline[linewidth=1pt](xLeft)(xRight) \qdisk(A){1.5pt} \qdisk(B){1.5pt} \qdisk(A'){1.5pt}\qdisk(B'){1.5pt} \qdisk(F){1.5pt}\qdisk(F'){1.5pt} \qdisk(O){1.5pt}\qdisk(I){1.5pt} \qdisk(I'){1.5pt}\qdisk(I1){1.5pt} \qdisk(I2){1.5pt} \uput[270](A){A}\uput[90](B){B} \uput[270](F){F}\uput[0](I){I} \uput[0](I'){$\mathrm{I'}$}\uput[270](F'){$\mathrm{F'}$} \uput[270](B'){$\mathrm{B'}$}\uput[90](A'){$\mathrm{A'}$} \uput[180](I1){I1}\uput[0](I2){I2}% } \end{pspicture} \end{lstlisting} \begin{figure}[!htb] \resizebox{\textwidth}{!}{% \begin{pspicture}*(-8,-3.25)(8,3.25) \rput(0,0){% \lens[drawing=false] \psline[linewidth=1pt](xLeft)(xRight) \qdisk(A){1.5pt} \qdisk(B){1.5pt} \qdisk(A'){1.5pt}\qdisk(B'){1.5pt} \qdisk(F){1.5pt}\qdisk(F'){1.5pt} \qdisk(O){1.5pt}\qdisk(I){1.5pt} \qdisk(I'){1.5pt}\qdisk(I1){1.5pt} \qdisk(I2){1.5pt} \uput[270](A){A}\uput[90](B){B}\uput[270](F){F}\uput[0](I){I} \uput[0](I'){$\mathrm{I'}$}\uput[270](F'){$\mathrm{F'}$} \uput[270](B'){$\mathrm{B'}$}\uput[90](A'){$\mathrm{A'}$} \uput[180](I1){I1}\uput[0](I2){I2}% } \psgrid[subgriddiv=0,griddots=4,gridlabels=7pt] \end{pspicture}% } \caption{Coodinates of the predefined Nodes}\label{fig:nodes} \end{figure} \section{The Lens Type} \begin{figure}[htb] \centering \scalebox{0.75}{\lens[lensType=CVG]}\vspace{-0.5cm} \caption{\texttt{\textbackslash lens[lensType=CVG]} (Collecting lens)}% \label{fig:defaultCVG} \scalebox{0.75}{\lens[lensType=DVG]}\vspace{-0.5cm} \caption{\texttt{\textbackslash lens[lensType=DVG]} (Scatter lens)}% \label{fig:defaultDVG} \end{figure} \par Using \verb|\lens[]| gives the in figure \ref{fig:defaultCVG} and \ref{fig:defaultDVG} shown lenses with the default values from table \ref{tab:defaultLens}. \par \begin{table}[!htb] \centering \begin{minipage}{\columnwidth} \centering \begin{tabular}{l|l|l} \textbf{Option} & \textbf{Name} & \textbf{Default}\\\hline Lense type & lensType & CVG\\ Lense height in cm & lensHeight & 5cm\\ Lense width in cm & lensWidth & 0.5cm\footnotemark\\ vertical scale (obsolet) & lensScale& 1\\ View the lens & lensGlass& false\\ Second lens & lensTwo & false\\ Focus in cm & focus & 2\\ Distance $\mathrm{\overline{OA}}$& OA & -4\\ Distance $\mathrm{\overline{AB}}$& AB & 1.5\\ Lens color & lenscolor& black\\ Arrow length in cm & lensarrowsize &0.2\\ Arrow inset in cm & lensarrowinset&0.5\\ \end{tabular} \caption{Available options for lenses with the defaults}\label{tab:defaultLens} \footnotetext{\textsuperscript{1} only for \texttt{lensGlass=true}, otherwise set to \texttt{2\textbackslash pslinewidth}} \end{minipage} \end{table} The origin of the coordinate system is by default vertically and horinzontally symmetric. If you want to place the lens at another coordinates then define your own \verb|pspicture|-environment and use the \verb|\rput|-command: \begin{lstlisting} \begin{pspicture}*(-7.5,-3)(7.5,3) \rput(0,0){\lens[...]} \begin{pspicture} \end{lstlisting} The star version enables the clipping option. \section{\CMD{Transform}} The \verb|Transform|-macro renames all existing nodes in names with an additional "{}1"{}. Table \ref{tab:Transform} shows a list of all nodes. \verb|Transform| also defines a new node \verb|factice| with the coordinates \verb|(XO1,YO1)|. The renaming of all nodes makes it easier to handle objects with more than one lens. With the option \verb|lensTwo=true| it is possible to chain the different rays of the lenses (figure \ref{fig:lensTwo}). \par \begin{table}[!htb] \addtolength{\tabcolsep}{-3pt} \centering {\small\begin{tabular}{l|lllllllllllll} \textbf{Alt}& A & B & A' & B' & O & F & F' & I & I' & XO & YO & OA' & A'B'\\\hline \textbf{Neu} &A1& B1& A'1& B'1& O1& F1& F'1& I1& I'1& XO1& YO1& O1A1'& A'1B'1 \end{tabular}} \addtolength{\tabcolsep}{3pt} \caption{Renaming of the nodes after calling the macro \texttt{\textbackslash Transform}}\label{tab:Transform} \end{table} \begin{figure}[htb] \subfigure[Definition of two unchained lenses]{% \resizebox{0.49\textwidth}{!}{% \begin{pspicture}*(-7.5,-3)(7.5,3) \rput(0,0){% \lens[lensScale=0.6,XO=-4,% focus=1,OA=-2,lensGlass=true, lensWidth=0.5]% } %\Transform \rput(0,0){% \lens[lensScale=1.2,XO=2,focus=2,% % lensTwo=true,% lensGlass=true,lensWidth=0.5]% } \end{pspicture} }}\hfill% \subfigure[Definition of two chained lenses with \texttt{\textbackslash lens[...] \textbackslash Transform \textbackslash lens[...]} and \texttt{lensTwo-Option}]{% \resizebox{0.49\textwidth}{!}{% \begin{pspicture}*(-7.5,-3)(7.5,3) \rput(0,0){% \lens[lensScale=0.6,XO=-4,% focus=1,OA=-2,lensGlass=true, lensWidth=0.5]% } \Transform \rput(0,0){% \lens[lensScale=1.2,XO=2,focus=2,% lensTwo=true,% lensGlass=true,lensWidth=0.5]% } \end{pspicture} }} \subfigure[Definition of two chained lenses and an additional modification of the node labels. \label{fig:lensTwoC}]{% \resizebox{\textwidth}{!}{% \begin{pspicture}*(-7.5,-3)(7.5,3) \rput(0,0){% \lens[lensScale=0.6,XO=-4,% nameF=F_1,nameA=A_1,nameB=B_1,% nameFi=F'_1,nameAi={ },nameBi={},nameO=O_1,% focus=1,OA=-2,lensGlass=true, lensWidth=0.5]% } \pspolygon[style=rayuresJaunes,linestyle=none](B)(I)(B')(I')(B) \Transform \rput(0,0){% \lens[lensScale=1.2,XO=2,focus=2,% nameA=A'_1,spotA=90,nameB=B'_1,spotB=270,% nameO=O_2,nameAi=A'_2,spotAi=270,% nameBi=B'_2,spotBi=90,nameF=F_2,nameFi=F'_2,% lensTwo=true,% lensGlass=true,lensWidth=0.5]% } \pspolygon[style=rayuresJaunes,linestyle=none](B)(I)(B')(I')(B) \end{pspicture} }} \caption{The meaning of the \texttt{\textbackslash Transform}-Macro with the default labels}\label{fig:lensTwo} \end{figure} \begin{lstlisting} \begin{pspicture}*(-7.5,-3)(7.5,3) \rput(0,0){% \lens[lensScale=0.6,XO=-4,% nameF=F_1,nameA=A_1,nameB=B_1,% nameFi=F'_1,nameAi={ },nameBi={},nameO=O_1, focus=1,OA=-2,lensGlass=true, lensWidth=0.5]% } \pspolygon[style=rayuresJaunes,linestyle=none](B)(I)(B')(I')(B) \Transform \rput(0,0){% \lens[lensScale=1.2,XO=2,focus=2,% nameA=A'_1,spotA=90,nameB=B'_1,spotB=270,% nameO=O_2,nameAi=A'_2,spotAi=270,% nameBi=B'_2,spotBi=90,nameF=F_2,nameFi=F'_2,% lensTwo=true,% lensGlass=true,lensWidth=0.5]% } \pspolygon[style=rayuresJaunes,linestyle=none](B)(I)(B')(I')(B) \end{pspicture} \end{lstlisting} \section{\CMD{rayInterLens}} This macro is only useful for a two-lens-system. Figure \ref{fig:RayInter} shows such a system. The nodes \verb|B1, I11, F'1, B'1| are predefined by the \verb|lens|-macro. To draw the two rays from the left lense via the node \verb|B'1| to the second lens, we need the coordinates of these points. \verb|\rayInterLense| defines such nodes. The Syntax: {\small\begin{verbatim} \rayInterLense(StartNode)(IntermediatNode)(LensDistance){LensNode} \end{verbatim}} For the node of figure \ref{fig:RayInter} we have \begin{lstlisting} \rayInterLens(I11)(B'1){4}{Inter1L2} \psline(B1)(I11)(B'1)(Inter1L2) \rayInterLens(O1)(B'1){4}{Inter2L2} \psline(B1)(O1)(B'1)(Inter2L2) \end{lstlisting} The two parallel lines are drawn with the \verb|\Parallel|-Macro. \begin{figure}[!htb] \resizebox{\textwidth}{!}{% \begin{pspicture}*(-7.5,-4)(7.5,4) \rput(0,0){% \lens[focus=1.5,OA=-2,AB=0.6,XO=-5,lensGlass=true,% yBottom=-4,yTop=4,drawing=false,lensWidth=0.5,lensScale=0.5,% nameF=F_1,nameFi=F'_1]% \psline[linewidth=1pt](xLeft)(xRight) } \Transform \rput(0,0){% \lens[focus=2,XO=4,lensGlass=true,% yBottom=-4,yTop=4,drawing=false,lensWidth=0.5,lensHeight=7,% nameF=F_2,nameFi=F'_2,spotF=90,spotFi=90]% } \psline{->}(A1)(B1)\psline{->}(A'1)(B'1) \psset{linecolor=red} \uput[45](B1){B1} \uput[90](O){O} \uput[225](O1){O1} \uput[45](I11){I11} \uput[45](B'1){$B'_1$} \rayInterLens(I11)(B'1){4}{Inter1L2} \rayInterLens(O1)(B'1){4}{Inter2L2} \uput[350](Inter1L2){Inter1L2} \psline(B1)(I11)(B'1)(Inter1L2) \psline(B1)(O1)(B'1)(Inter2L2) \Parallel(B'1)(O)(Inter2L2){B2inftyRigth} \Parallel(B'1)(O)(Inter1L2){B3inftyRigth} \psset{length=-2,linestyle=dashed} \Parallel(B'1)(O)(Inter2L2){B2inftyLeft} \Parallel(B'1)(O)(Inter1L2){B3inftyLeft} \psgrid[subgriddiv=0,griddots=5, gridlabels=7pt] \psline[linestyle=dotted, linewidth=2pt,linecolor=black]{->}(0,-4)(0,+4) \end{pspicture}% } \caption{Demonstration of \texttt{\textbackslash rayInterLens}\label{fig:RayInter}} \end{figure} \clearpage \section{\CMD{telescope}} Figure {\ref{fig:defaultTele} shows the configuration of a telescope and table \ref{tab:defaultSpiegel} the special options for the \verb|\telescop|-Macro. \begin{figure}[!htb] \resizebox{\textwidth}{!}{\telescope}\vspace{-0.5cm} \caption{\texttt{\textbackslash telescope}-Macro}% \label{fig:defaultTele} \end{figure} \part{Mirrors} \section{options} Figure \ref{fig:Spiegel} shows the available mirrors and table \ref{tab:defaultSpiegel} the possible options. \begin{table}[!htb] \centering \begin{tabular}{p{5cm}|l|l} \textbf{Option} & \textbf{Name} & \textbf{Default}\\\hline Left value of the picture in cm & xLeft & -0.5\\ Right value of the picture in cm & xRight & 11\\ Lowest value of the picture in cm & xBottom & -6\\ Highest value of the picture in cm & xTop & 2.5\\ Mirror height in cm & mirrorHeight & 5\\ Mirror depth in cm & mirrorDepth & 1\\ Mirror width in cm & mirrorWidth & 0.25\\ Mirror color & mirrorColor & lightgray\\ Ray color & rayColor & black\\ Focus in cm (only together with the option \verb|posMirrorTwo| senseful) & mirrorFocus & 8\\ Position of the 2. mirror in cm & posMirrorTwo & 8\\ Inclination of the 2. mirror in degrees & mirrorTwoAngle & 45\\ Draw lines & drawing & true\\ \end{tabular} \caption{List of options for mirrors with the predefines values}\label{tab:defaultSpiegel} \end{table} \par \begin{figure}[!htb] \centering \subfigure[]{% \begin{pspicture}*(-1,-3)(3,3) \psgrid[subgriddiv=0,griddots=5] \rput(0,0){\mirrorCVG[mirrorColor=gray,drawing=false]} \psaxes[linestyle=dashed,linecolor=red,linewidth=1pt,arrows=->](0,0)(-1,-3)(3,3) \qdisk(Focus){2pt}\rput(Focus){\rput(0,0.25){Focus}} \pcline[arrows=|-|](-0.75,-2.5)(-0.75,2.5)\ncput*[nrot=:U]{mirrorHeight} \pcline[arrows=|-|](0,2.75)(1,2.75)\rput[l](1.1,2.75){mirrorDepth} \pcline[arrows=|-|](1,-2.75)(0.75,-2.75)\rput[l](1.1,-2.75){mirrorWidth} \rput[l](1,-1){mirrorColor}\psline{<-}(0.2,-1)(0.8,-1) \end{pspicture}% }\hfill% \subfigure[]{% \begin{pspicture}*(-4,-3)(1,3) \psgrid[subgriddiv=0,griddots=5] \rput(0,0){\mirrorDVG[mirrorColor=gray,drawing=false]} \psaxes[linestyle=dashed,linecolor=red,linewidth=1pt,arrows=->](0,0)(-4,-3)(1,3) \qdisk(Focus){2pt}\rput(Focus){\rput(0,0.25){Focus}} \pcline[arrows=|-|](.5,-2.5)(.5,2.5)\ncput*[nrot=:U]{mirrorHeight} \pcline[arrows=|-|](-1.25,2.75)(-.25,2.75)\rput[r](-1.3,2.75){mirrorDepth} \pcline[arrows=|-|](-1.25,-2.75)(-1,-2.75)\rput[r](-1.3,-2.75){mirrorWidth} \rput[r](-2,-2){mirrorColor}\psline{->}(-2,-2)(-0.9,-2) \end{pspicture} }\hfill \subfigure[\label{fig:planMirror}]{% \begin{pspicture}(-2,-2)(2,2) \psgrid[subgriddiv=0, gridlabels=5pt,griddots=4] \pnode(-1.5,-1.5){M1} \pnode(1,1){M2} \uput[-90](M1){$\mathrm{M_1}$} \uput[90](M2){$\mathrm{M_2}$} \pnode(-1.5,1.5){A} \planMirrorRay(A)(M1)(M2){A'} \psline[linewidth=5pt](M1)(M2) \pscircle*(A){2pt} \uput[0](A){A} \uput[0](A'){$\mathrm{A'}$} \pscircle*(A'){2pt} \psline[linestyle=dashed](A)(A') \end{pspicture} } \caption{The different mirror macros: a) \texttt{\textbackslash mirrorCVG} b) \texttt{\textbackslash mirrorDVG} c) \texttt{\textbackslash planMirrorRay}% }\label{fig:Spiegel} \end{figure} \section{\CMD{mirrorCVG}} Figure \ref{fig:mirrorCVG} shows the default for the \verb|mirrorCVG|-macro with the predefined nodes anf three default rays. \begin{figure}[!htb] \begin{minipage}{0.48\textwidth} \resizebox{\textwidth}{!}{% \begin{pspicture}*(-1,-3)(6,3) \psgrid[subgriddiv=0,gridlabels=5pt,griddots=5] \rput(0,0){\mirrorCVG[rayColor=red]} \end{pspicture}% } \caption{Parabolic Mirror \texttt{\textbackslash mirrorCVG}}\label{fig:mirrorCVG} \end{minipage}\hfill \begin{minipage}{0.48\textwidth} \resizebox{0.9\textwidth}{!}{% \begin{pspicture}*(-0.5,-4)(8,4) \rput(0,0){\mirrorCVG[mirrorHeight=8,mirrorDepth=4,drawing=false]} \multido{\rY=-4.00+0.25}{33}{% \mirrorCVGRay[% linewidth=0.5pt,% mirrorHeight=8,% mirrorDepth=4](10,\rY)(1,\rY){Dummy}% } \end{pspicture}% } \caption{Example}\label{fig:CVGAnwendung} \end{minipage} \end{figure} \section{\CMD{mirrorDVG}} Figure \ref{fig:mirrorDVG} shows the defaults for the macro \verb|mirrorDVG|-Makros. \begin{figure}[!htb] \begin{minipage}{0.48\textwidth} \resizebox{\textwidth}{!}{% \begin{pspicture}*(-2,-3)(5,3) \psgrid[subgriddiv=0,gridlabels=5pt,griddots=5] \rput(0,0){\mirrorDVG[rayColor=red]} \end{pspicture}% }% \caption{\texttt{\textbackslash mirrorDVG}}\label{fig:mirrorDVG} \end{minipage}\hfill \begin{minipage}{0.48\textwidth} \resizebox{\textwidth}{!}{% \begin{pspicture}*(-4,-4)(6,4) \psgrid[subgriddiv=0,gridlabels=5pt,griddots=5] \rput(0,0){\mirrorCVG[drawing=false,mirrorDepth=0.75,mirrorHeight=7]} \qdisk(Focus){2pt} \rput(6,2.5){\eye} \pnode(1.75,-1.5){A}\pnode(1.75,1){B} \psline[arrows=->,linewidth=4pt](A)(B) \uput{0.2}[0](2,0){\Huge G} \psset{linecolor=red} \mirrorCVGRay[% rayColor=red,% mirrorHeight=7,% mirrorDepth=0.75](A)(0,-0.9){P1} \psOutLine[length=3](P1)(P1'){PEnd} \psBeforeLine[length=5,linestyle=dashed](P1)(P1'){PBegin} \mirrorCVGRay[rayColor=red,% mirrorHeight=7,% mirrorDepth=0.75](A)(0,-0.2){P2} \psOutLine[length=3](P2)(P2''){PEnd} \psBeforeLine[length=5,linestyle=dashed](P2)(P2'){PBegin} % \mirrorCVGRay[% rayColor=red,% mirrorHeight=7,% mirrorDepth=0.75](B)(0,2.75){P3} \psOutLine[length=3](P3)(P3'){PEnd} \psBeforeLine[length=5,linestyle=dashed](P3)(P3'){PBegin} \mirrorCVGRay[% rayColor=red,% mirrorHeight=7,% mirrorDepth=0.75](B)(0,1.8){P4} \psOutLine[length=3](P4)(P4'){PEnd} \psBeforeLine[length=5,linestyle=dashed](P4)(P4'){PBegin} \ABinterCD(P3)(P3')(P4)(P4'){A'} \ABinterCD(P1)(P1')(P2)(P2'){B'} \psline[arrows=->,linewidth=4pt,linestyle=dashed](B')(A') \nodeBetween(A')(B'){G''} \uput{0}[0](G''){\Huge G'} \end{pspicture}% } \caption{Example as a magnifier}\label{fig:DVGAnwendung} \end{minipage} \end{figure} \subsection{Drawing Rays in the Mirror Macros} There are two different macros for drawing rays: \par \bigskip \begin{minipage}{\textwidth} \verb|\mirrorCVGRay[options](Node1)(Node2){MirrorNode}|\\ \verb|\mirrorDVGRay[options](Node1)(Node2){MirrorNode}| \end{minipage} \par \bigskip The \verb|MirrorNode| maybe \par \bigskip \begin{tabularx}{\textwidth}{l|X} MirrorNode & first point on the mirror\\ MirrorNode' & end node or second point on the mirror if one more reflection happens\\ MirrorNode'' & end node for a second reflection \end{tabularx} \smallskip If there are only one reflection, then \verb|MirrorNode'| and \verb|MirrorNode''| are the same. \subsection{\CMD{planMirrorRay}} The \verb|planMirrorRay|-Macro caculates the coordinates of a mirrored point. In figure \ref{fig:planMirror} is a given node \verb|A|, whereas \verb|A'| is calculated by the macro. The syntax is: \par \bigskip \verb|\planMirrorRay(Mirrorbegin)(Mirrorend)(Originalpoint){New point}| \bigskip \par The macro doesn't draw any lines, only the coordinates of the new point are saved by the new node name. \subsection{\CMD{symPlan}} \verb|\symPlan| allows to mirroring complete plain graphical objects along a virtual center line. Figure \ref{fig:symPlan} shows that this mirroring is a mathematical one and not a physical one. For more examples look at \cite{pstoptic:2001}. The syntax is: \par \verb|\symPlan(node1)(node2){Graphicobject}| \par The two nodes define the mirror axis and the graphics object is in most cases a user defined macro, f.ex: \begin{lstlisting} \newcommand{\dtk}{% \pstextpath(0,0){% \psplot[linestyle=none]{0}{8}{x sqrt sqrt 2 mul}}% {\Large Die \TeX{}nische Komödie von DANTE}% } \begin{pspicture}(-4.5,-2)(2.5,5) \pnode(-4,-2){M1} \uput[-90](M1){M1} \pnode(4,4){M2}\uput[90](M2){M2} \psline[linewidth=5\pslinewidth,linecolor=lightgray](M1)(M2) \rput(-3.5,-1.75){\dtk}% Original schreiben \symPlan(M1)(M2){\rput(-3.5,-1.75){\dtk}}% Spiegelbild schreiben \end{pspicture} \end{lstlisting} This example needs the package \verb|pst-text.sty| for the \verb|\pstextpath| macro ( \url{CTAN:/graphics/pstricks/generic/pst-text.tex}). \begin{figure}[!htb] \centering \newcommand{\dtk}{% \pstextpath(0,0){% \psplot[linestyle=none]{0}{8}{x sqrt sqrt 2 mul}}% {\Large Die \TeX{}nische Komödie von DANTE}% } \begin{pspicture}(-4.5,-2.5)(2.5,5) \pnode(-4,-2){M1} \uput[-90](M1){M1} \pnode(4,4){M2}\uput[90](M2){M2} \psline[linewidth=5\pslinewidth,linecolor=lightgray](M1)(M2) \rput(-3.5,-1.75){\dtk} \symPlan(M1)(M2){\rput(-3.5,-1.75){\dtk}} \end{pspicture}% \caption{Demonstration of the \texttt{\textbackslash symPlan}-Macro} \label{fig:symPlan} \end{figure} \section{Beam Light} This macro is useful for the demonstration of high and low beam light. The syntax for this macro is: \par \bigskip \verb|\beamLight[]| \par \bigskip The predefined options especially for the \verb|pspicture|-coordinates are \begin{lstlisting} \setkeys{psset}{xLeft=-5,xRight=5,yBottom=-5,yTop=5,drawing=false}% the default \end{lstlisting} You can place this macro with the \verb|\rput|-command at any place in your own \verb|pspicture|-environment. \begin{figure}[!htb] \begin{minipage}{0.35\textwidth} \begin{pspicture}(-1,-3)(3,3) \rput(0,0){\beamLight} \end{pspicture} \begin{lstlisting} \begin{pspicture}(-1,-3)(3,3) \rput(0,0){\beamLight} \end{pspicture} \end{lstlisting} \caption{\CMD{beamLight} without any Options} \end{minipage}\hfill% \begin{minipage}{0.5\textwidth} \centering \begin{pspicture}(-1,-5.5)(5,5.5) \rput(0,0){% \beamLight[mirrorDepth=4.75,% mirrorWidth=0.1,% mirrorHeight=10,% linecolor=lightgray]} \end{pspicture} \begin{lstlisting} \begin{pspicture}(-1,-5.5)(5,5.5) \rput(0,0){% \beamLight[mirrorDepth=4.75,% mirrorWidth=0.1,% mirrorHeight=10,% linecolor=lightgray]} \end{pspicture}% \end{lstlisting} \caption{\CMD{beamLight} with Options} \end{minipage} \end{figure} \part{Refraction} \section{\CMD{refractionRay}} The syntax is \medskip \verb|\refractionRay(A)(B)(C)(D){n1}{n2}{EndNode}| \medskip The macro uses the law of Snell \begin{align} \frac{n_1}{n_2}&=\frac{\sin \beta}{\sin \alpha}\label{snell} \end{align} where the $n_1$ and $n_2$ are the refraction numbers with the predefined values \begin{align} n_1 &= 1 \\ n_2 &= 1.41 \end{align} and $\alpha$ the incoming abd $\beta$ the outgoing angle of the ray. The refractionnumbers have the internal names \verb|refractA| and \verb|refractB|. A total reflection instead of a refraction is possible, when the ray starts in a medium with a higher refrectionnumber. This happens when $\sin\beta>1$ in equ.\ref{snell}. In this case we have $\alpha =\beta$, a total reflection. \begin{multicols}{2} \begin{pspicture}(5,5) \psgrid \pnode(0.5,1.5){A}\qdisk(A){2pt}\uput[90](A){A} \pnode(2,3){B}\qdisk(B){2pt}\uput[90](B){B} \psline[linewidth=1.5pt,linecolor=red]{->}(A)(B) \pnode(3,5){C}\qdisk(C){2pt}\uput[225](C){C} \pnode(4,0){D}\qdisk(D){2pt}\uput[135](D){D} \pspolygon[fillstyle=solid,% fillcolor=lightgray,% linecolor=lightgray](C)(D)(5,0)(5,5)(C) \psline[linewidth=1.5pt,linecolor=red](C)(D) \rput(2,2){\Large$n_1$} \rput(4.5,2){\Large$n_2$} \refractionRay(A)(B)(C)(D){1}{4}{E} \psline[linestyle=dashed,linecolor=red](B)(E) \psline[linestyle=dashed,linecolor=red](E)(E') \qdisk(E){2pt}\uput[-20](E){E} \qdisk(E'){2pt}\uput[-90](E'){E'} \end{pspicture} The macro needs the values for the four nodes, the two refractionnumbers and the name for the end node. As you can see in the figure the end node of the ray is the intermediate point between the linear ray and the linear medium. The end node of the refracted ray has the same name with an additional single quotation mark. In the figure the macro was called as \medskip \verb|\refractionRay(A)(B)(C)(D){1}{4}{E}| \medskip \begin{align}n_1&}(A)(B) \psline[linewidth=1.5pt,linecolor=red](C)(D) \rput(2,2){\Large$n_1$} \rput(4.5,2){\Large$n_2$} \refractionRay(A)(B)(C)(D){4}{1}{E} \psline[linestyle=dashed,linecolor=red](B)(E) \psline[linestyle=dashed,linecolor=red](E)(E') \qdisk(E){2pt}\uput[-20](E){E} \qdisk(E'){2pt}\uput[-90](E'){E'} \end{pspicture} In the figure the macro was called as \medskip \verb|\refractionRay(A)(B)(C)(D){4}{1}{E}| \medskip \begin{align}n_1&>n_2\end{align} \end{multicols} \part{Spherical Optic} \section{\CMD{lensSPH}} \subsection{Convergent Lens} The syntax is \bigskip \verb|\lensSPH[]|\\ \verb|\lensSPH[lensType=CVG,]| \bigskip Without any option it draws a spherical convergent lens: \bigskip \lensSPH[lensType=CVG] \bigskip It changes some default values for the options to: \begin{tabular}{lll} \textbf{Meaning} & \textbf{Name} & \textbf{Default}\\\hline Object Distance in cm & OA & -7 \\ Lens Height in cm & lensHeight & 6 \\ Lens Width in cm & lensWidth & 1.5\\ Refraction Number $n_2$ & refractB & 2 \end{tabular} \subsection{Divergent Lens} The syntax is \medskip \verb|\lensSPH[lensType=DVG,]| \medskip It draws a spherical divergent lens: \bigskip \lensSPH[lensType=DVG,lensWidth=0.5] \bigskip It changes some default values for the options in the same way as for the convergent lens. \subsection{Options} The macro uses the law of Snell \begin{align} \frac{n_1}{n_2}&=\frac{\sin \beta}{\sin \alpha} \end{align} where the $n_1$ and $n_2$ are the refraction numbers with the predefined values \begin{align} n_1 &= 1 \\ n_2 &= 1.41 \end{align} and $\alpha$ the incoming abd $\beta$ the outgoing angle of the ray. The refractionnumbers have the internal names \verb|refractA| and \verb|refractB|. \section{\CMD{mirrorCVG}} The syntax is \bigskip \verb|\mirrorCVG[mirrorType=SPH]| \bigskip Without the option \verb|mirrorType=SPH| you'll get a parabolic mirror, which is the default. \mirrorCVG[mirrorType=SPH] \section{\CMD{mirrorDVG}} The syntax is \bigskip \verb|\mirrorDVG[mirrorType=SPH]| \bigskip Without the option \verb|mirrorType=SPH| you'll get a parabolic mirror (option PARA). \par \mirrorDVG[mirrorType=SPH] \section{\CMD{ABinterSPHLens}} The syntax is \bigskip \verb|\ABinterSPHLens(A)(B)(Center){NodeName}| \bigskip \begin{pspicture}(-6,-3)(6,3) \rput(0,0){\lensSPH[lensType=CVG,lensHeight=8,lensWidth=3,drawing=false]} \qdisk(Center){2pt}\uput[-90](Center){Center} \qdisk(Center'){2pt}\uput[-90](Center'){Center'} \pnode(-5,1){A}\qdisk(A){2pt}\uput[90](A){A} \pnode(-3,0){B}\qdisk(B){2pt}\uput[90](B){B} \psline[linewidth=1.5pt,linecolor=red]{->}(A)(B) \pnode(5,-2.5){C}\qdisk(C){2pt}\uput[90](C){C} \pnode(3,-2){D}\qdisk(D){2pt}\uput[90](D){D} \psline[linewidth=1.5pt,linecolor=red]{->}(C)(D) \rput(-4.5,2){\Large $n_1$} \rput(0,2){\Large $n_2$} \rput(4.5,2){\Large $n_1$} \ABinterSPHLens(A)(B)(Center'){E} \ABinterSPHLens(C)(D)(Center){F} \psline[linestyle=dashed,linecolor=red](B)(E) \psline[linestyle=dashed,linecolor=red](D)(F) \qdisk(E){2pt}\uput[-20](E){E} \qdisk(F){2pt}\uput[-90](F){F} \psgrid \end{pspicture} The macro needs two nodes for the rays, the coordinates/nodes of the center/middle of the sperical lens and a name of the intermediate node.In the figure the macro was called as \bigskip \verb|\ABinterSPHLens(A)(B)(Center'){E}| \verb|\ABinterSPHLens(C)(D)(Center){F}| \bigskip \section{\CMD{lensSPHRay}} The syntax is \bigskip \verb|\lensSPHRay[Option](A)(B){refractA}{refractB}{NodeName}| \bigskip This macro calculates the coordinates of the given ray $\overline{\mathrm{AB}}$ on its way into the lens. The only possible option \verb*rightRay=false|true*\footnote{Default is \texttt{false}} enables rays from the right to the left. There are still some problems with this option but try it out. \bigskip \begin{pspicture*}(-5,-3)(7,3) \psgrid \rput(0,0){\lensSPH[lensType=CVG,lensHeight=8,lensWidth=3,drawing=false]} \qdisk(Center){2pt}\uput[-90](Center){Center} \qdisk(Center'){2pt}\uput[-90](Center'){Center'} \pnode(-4,1){A}\qdisk(A){2pt}\uput[90](A){A} \pnode(-2,0.5){B}\qdisk(B){2pt}\uput[90](B){B} \rput(-4.5,2.5){\Large $n_1$} \rput(0,2.5){\Large $n_2=1.5$} \rput(4,2.5){\Large $n_1=1$} \multido{\rA=3+-0.5,\rB=2.5+-0.5}{9}{% \lensSPHRay[rightRay=false](-4,\rA)(-2,\rB){1}{1.5}{F} \psline[linewidth=1.5pt,linecolor=red]{->}(-4,\rA)(F) \psline[linestyle=dashed,linecolor=red](-4,\rA)(F)(F')(F'') \psOutLine[linestyle=dashed,linecolor=red,length=4.5](F')(F''){FEnd} } \psline[linewidth=1.5pt,linecolor=blue]{->}(A)(B) \lensSPHRay[lensType=CVG](A)(B){1}{1.5}{E} \psline[linestyle=dashed,linecolor=blue](B)(E)(E')(E'') \qdisk(E){2pt}\uput[-20](E){E} \qdisk(E'){2pt}\uput[-20](E'){E'} \qdisk(E''){2pt}\uput[-20](E''){E''} \end{pspicture*} \bigskip And the same with $n_2=3$: \bigskip \begin{pspicture*}(-5,-3)(7,3) \psgrid \rput(0,0){\lensSPH[lensType=CVG,lensHeight=8,lensWidth=3,drawing=false]} \qdisk(Center){2pt}\uput[-90](Center){Center} \qdisk(Center'){2pt}\uput[-90](Center'){Center'} \pnode(-4,1){A}\qdisk(A){2pt}\uput[90](A){A} \pnode(-2,0.5){B}\qdisk(B){2pt}\uput[90](B){B} \rput(-4.5,2.5){\Large $n_1$} \rput(0,2.5){\Large $n_2=3$} \rput(4,2.5){\Large $n_1=1$} \multido{\rA=3+-0.5,\rB=2.5+-0.5}{11}{% \lensSPHRay[rightRay=false](-4,\rA)(-2,\rB){1}{3}{F} \psline[linewidth=1.5pt,linecolor=red]{->}(-4,\rA)(F) \psline[linestyle=dashed,linecolor=red](-4,\rA)(F)(F')(F'') \psOutLine[linestyle=dashed,linecolor=red](F')(F''){FEnd} } \psline[linewidth=1.5pt,linecolor=blue]{->}(A)(B) \lensSPHRay[lensType=CVG](A)(B){1}{3}{E} \psline[linestyle=dashed,linecolor=blue](B)(E)(E')(E'') \qdisk(E){2pt}\uput[-20](E){E} \qdisk(E'){2pt}\uput[-20](E'){E'} \qdisk(E''){2pt}\uput[-20](E''){E''} \end{pspicture*} \section{\CMD{reflectionRay}} The syntax is \bigskip \verb|\reflectionRay[Option](A)(B){NodeName}| \bigskip This macro calculates the coordinates of the given ray $\overline{\mathrm{AB}}$ on its way out of the mirror. The only senseful option is \verb$mirrorType=CVG|DVG$. The most important fact is that the point \verb|B| must be the one on the mirror. If you do not know it's coordinates you can use the macro \verb|ABinterSPHLens[lensType=CVG](A1)(A2)(Center){NodeName)|, which calculates the coordinates of the intermediate point. \bigskip \begin{pspicture*}(-1,-3)(6,3) \rput(0,0){% \mirrorCVG[% mirrorType=SPH,% mirrorHeight=5,% mirrorWidth=0.2,% yBottom=-3,yTop=3,% drawing=false,% mirrorDepth=3]% \qdisk(Center){2pt}\qdisk(Focus){2pt} \uput[-90](Center){Center}\uput[-90](Focus){F} \psline(O)(xRight) } \ABinterSPHLens(5,1)(3,1)(Center){C} \reflectionRay[mirrorType=CVG-SPH](5,1)(C){D} \qdisk(5,1){2pt}\uput[-90](5,1){A} \qdisk(3,1){2pt}\uput[-90](3,1){B} \qdisk(C){2pt}\uput[180](C){C} \qdisk(D){2pt}\uput[45](D){D} \psset{linewidth=1.5pt,linecolor=red,arrows=->} \psline(5,1)(3,1) \psline(3,1)(C) \psline(C)(D) \psgrid \end{pspicture*} \begin{lstlisting} \begin{pspicture*}(-1,-3)(6,3) \rput(0,0){% \mirrorCVG[% mirrorType=SPH,% mirrorHeight=5,% mirrorWidth=0.2,% yBottom=-3,yTop=3,% drawing=false,% mirrorDepth=3]% \qdisk(Center){2pt}\qdisk(Focus){2pt} \uput[-90](Center){Center}\uput[-90](Focus){F} \psline(O)(xRight) } \ABinterSPHLens(5,1)(3,1)(Center){C} \reflectionRay[mirrorType=CVG-SPH](5,1)(C){D} \qdisk(5,1){2pt}\uput[-90](5,1){A} \qdisk(3,1){2pt}\uput[-90](3,1){B} \qdisk(C){2pt}\uput[180](C){C} \qdisk(D){2pt}\uput[45](D){D} \psset{linewidth=1.5pt,linecolor=red,arrows=->} \psline(5,1)(3,1) \psline(3,1)(C) \psline(C)(D) \psgrid \end{pspicture*} \end{lstlisting} \section{Refraction at a Spherical Surface} \subsection[Simple Example]{Construction for finding the position of the image point P' of a point object P formed by refraction at a sperical surface} \begin{pspicture*}(-10,-4)(3,4) \psgrid[subgriddiv=0,griddots=5,gridlabels=7pt] \rput(0,0){\lensSPH[% lensType=CVG,% lensHeight=12,% lensWidth=10,% yBottom=-6,yTop=6,xLeft=-6,xRight=6,% drawing=false]} \psset{linecolor=red,linewidth=1.5pt,dotstyle=|} \pnode(-9,0){P}\psdots(P)\uput[-90](P){P} \psline(P)(xRight) \lensSPHRay(P)(-5,2){1}{9}{Q} \psline(P)(Q)(Q') \psdots(Q)\uput[90](Q){B} \ABinterCD(Q)(Q')(0,0)(5,0){P'} \psdots(Q')\uput[-90](P'){P'} \psline[linewidth=0.5pt,linecolor=black](Center')(Q) \psline[linewidth=0.5pt,linecolor=black](Q)(Q|0,0) \psdots(Center')\uput[-90](Center'){C} \end{pspicture*} \bigskip \begin{lstlisting} \begin{pspicture}*(-10,-4)(3,4) \psgrid[subgriddiv=0,griddots=5,gridlabels=7pt] \rput(0,0){\lensSPH[% lensType=CVG,% lensHeight=12,% lensWidth=10,% yBottom=-4,yTop=4,xLeft=-5,xRight=5,% drawing=false]} \psset{linecolor=red,linewidth=1.5pt,dotstyle=|} \pnode(-9,0){P}\psdots(P)\uput[-90](P){P} \psline(P)(xRight) \lensSPHRay(P)(-5,2){1}{9}{Q}% \psline(P)(Q)(Q') \psdots(Q)\uput[90](Q){B} \ABinterCD(Q)(Q')(0,0)(5,0){P'} \psdots(Q')\uput[-90](P'){P'} \psline[linewidth=0.5pt,linecolor=black](Center')(Q) \psline[linewidth=0.5pt,linecolor=black](Q)(Q|0,0) \psdots(Center')\uput[-90](Center'){C} \end{pspicture} \end{lstlisting} \subsection[Height of an Image]{Construction for determining the height of an image formed by refraction at a sperical surface} \begin{pspicture}*(-13,-3)(3,5) \psgrid[subgriddiv=0,griddots=5,gridlabels=7pt] \rput(0,0){\lensSPH[% lensType=CVG,% lensHeight=12,% lensWidth=10,% yBottom=-4,yTop=4,xLeft=-5,xRight=5,% drawing=false]} \psset{linecolor=red,linewidth=1.5pt,dotstyle=|} \pnode(-12,0){P}\psdots(P)\uput[-90](P){P} \pnode(-12,4){Q}\psdots(Q)\uput[90](Q){Q} \psline[linecolor=blue,linewidth=3pt,arrows=->](P)(Q) \psline(P)(xRight) \lensSPHRay(Q)(Center'){1}{9}{S1}% \lensSPHRay(Q)(-5,0){1}{9}{S2}% \psline(Q)(S1') \psline(Q)(S2)(S2') \ABinterCD(Q)(S1')(S2)(S2'){Q'} \pnode(Q'|0,0){P'} \psline[linecolor=blue,linewidth=3pt,arrows=->](P')(Q') \uput[90](P'){P'} \uput[-90](Q'){Q'} \psdots(Center')\uput[90](Center'){C} \end{pspicture} \bigskip \begin{lstlisting} \begin{pspicture}*(-13,-3)(3,5) \psgrid[subgriddiv=0,griddots=5,gridlabels=7pt] \rput(0,0){\lensSPH[% lensType=CVG,% lensHeight=12,% lensWidth=10,% yBottom=-4,yTop=4,xLeft=-5,xRight=5,% drawing=false]} \psset{linecolor=red,linewidth=1.5pt,dotstyle=|} \pnode(-12,0){P}\psdots(P)\uput[-90](P){P} \pnode(-12,4){Q}\psdots(Q)\uput[90](Q){Q} \psline[linecolor=blue,linewidth=3pt,arrows=->](P)(Q) \psline(P)(xRight) \lensSPHRay(Q)(Center'){1}{9}{S1}% \lensSPHRay(Q)(-5,0){1}{9}{S2}% \psline(Q)(S1') \psline(Q)(S2)(S2') \ABinterCD(Q)(S1')(S2)(S2'){Q'} \pnode(Q'|0,0){P'} \psline[linecolor=blue,linewidth=3pt,arrows=->](P')(Q') \uput[90](P'){P'} \uput[-90](Q'){Q'} \psdots(Center')\uput[90](Center'){C} \end{pspicture} \end{lstlisting} \part{Utility Macros} \section{\texttt{\textbackslash eye}} Syntax: \begin{verbatim} \eye \end{verbatim} There are no Options for this symbol of an human eye (figure \ref{fig:auge}). \begin{figure}[htb] \centering% \begin{pspicture}(-1,-0.75)(1,0.75) \rput(1,0){\eye} \end{pspicture} \caption{The \texttt{\textbackslash eye}-Macro}\label{fig:auge} \end{figure} Use the \verb|\rput|-macro to put the eye elsewhere: \begin{lstlisting} \begin{pspicture}(-1,-0.75)(1,0.75) \rput(1,0){\eye} \end{pspicture} \end{lstlisting} \section{\texttt{\textbackslash Arrows}} Syntax: \begin{verbatim} \Arrows[Options](NodeA)(NodeB) \end{verbatim} \begin{table}[!htb] \centering \begin{tabular}{l|l|l} \textbf{Option} & \textbf{Name} & \textbf{Standard}\\\hline Offset for arrow start in cm & posStart & 0\\ Length of the arrow in cm & length & 2\\\hline \end{tabular} \caption{Options for the \texttt{Arrows}-Macro}\label{tab:Arrows} \end{table} \begin{figure}[!htb] \centering \begin{pspicture}(-3,-3)(3,3) \psgrid[subgriddiv=0, griddots=5,gridlabels=5pt] \psset{linecolor=red} \Arrows[posStart=2,length=4](-3,-3)(3,3) \qdisk(-3,-3){2pt}\uput[45](-3,-3){A} \qdisk(3,3){2pt}\uput[-90](3,3){B} \psset{linecolor=green} \Arrows[linewidth=3pt,length=2](0,-3)(0,0.5) \qdisk(0,-3){2pt}\uput[45](0,-3){A} \qdisk(0,0.5){2pt}\uput[-90](0,0.5){B} \psset{linecolor=blue} \Arrows[linewidth=5pt,linestyle=dashed](3,0)(2,3) \qdisk(3,0){2pt}\uput[-90](3,0){A} \qdisk(2,3){2pt}\uput[-90](2,3){B} \psset{linecolor=black} \Arrows[posStart=1,linewidth=5pt,linestyle=dotted,length=3](-3,2)(1,2) \qdisk(-3,2){2pt}\uput[-45](-3,2){A} \qdisk(1,2){2pt}\uput[-90](1,2){B} \end{pspicture} \caption{Arrows Demo}\label{fig:Arrows} \end{figure} The code for figure \ref{fig:Arrows}: \begin{lstlisting} \Arrows[posStart=2,length=4](-3,-3)(3,3) \Arrows[linewidth=3pt,length=2](0,-3)(0,0.5) \Arrows[linewidth=5pt,linestyle=dashed](3,0)(2,3) \Arrows[posStart=1,linewidth=5pt,linestyle=dotted,length=4](-3,2)(1,2) \end{lstlisting} \section{\texttt{\textbackslash psOutLine}} Syntax: \begin{verbatim} \psOutLine[Options](NodeA)(NodeB){EndNode} \end{verbatim} The only special option is \verb|length=|. All other which are possible for \verb|\psline| can be used, too. \begin{figure}[htb] \centering \begin{pspicture}(-3,-3)(3,3) \psgrid[subgriddiv=0, griddots=5,gridlabels=5pt] \psset{linecolor=red, linewidth=1.5pt} \psOutLine[length=3](-2,-2)(0,0){End} \qdisk(-2,-2){2pt}\uput[80](-2,-2){A} \qdisk(0,0){2pt}\uput[-45](0,0){B} \qdisk(2.12,2.12){2pt}\uput[90](2.12,2.12){END} % \psset{linecolor=blue} \psBeforeLine[length=3](1,0)(3,2){START} \qdisk(3,2){2pt}\uput[80](3,2){B} \qdisk(1,0){2pt}\uput[-45](1,0){A} \qdisk(-1.12,-2.12){2pt}\uput[-90](-1.12,-2.12){START} % \end{pspicture} \caption{psOutLine and psBeforeLine Demo}\label{fig:psOutLine} \end{figure} The code for figure \ref{fig:psOutLine}: \begin{lstlisting} \psOutLine[length=3](-2,-2)(0,0){End} \end{lstlisting} \section{\texttt{\textbackslash psBeforeLine}} Syntax: \begin{verbatim} \psBeforeLine[Options](NodeA)(NodeB){StartNode} \end{verbatim} The only special option is \verb|length=|. All other which are possible for \verb|\psline| can be used, too. The code for figure \ref{fig:psOutLine}: \begin{lstlisting} \psBeforeLine[length=3](0,0)(2,2){START} \end{lstlisting} \section{\texttt{\textbackslash Parallel}} Syntax: \begin{verbatim} \Parallel[Options](NodeA)(NodeB)(Start node){End node} \end{verbatim} The only special option for \verb|Parallel| is \verb|length=|. The nodes \verb|nodeA| and \verb|nodeB| are known nodes of a given line and \verb|Start node| is the given node of a parallel line. \verb|End node| is the name of the calculated line end. The use of \verb|Parallel| is shown for an example (figure \ref{fig:Parallel}). \begin{lstlisting} \begin{pspicture}*(-5,-3.5)(5,3.5) \psgrid[subgriddiv=0,griddots=5] \pnode(2,-2){FF}\qdisk(FF){1.5pt} \pnode(-5,5){A} \pnode(0,0){O} \multido{\nCountA=-2.4+0.4}{9}{% \Parallel[linecolor=red,length=9](O)(A)(0,\nCountA){P1} \psline[linecolor=red](0,\nCountA)(FF) \psOutLine[linecolor=red,length=9](0,\nCountA)(FF){P2} } \psline[linecolor=blue](A)(FF) \psOutLine[linecolor=blue,length=5](A)(FF){END1} \rput(0,0){% \lens[yBottom=-3.5,yTop=3.5,lensGlass=true,% lensHeight=6.5,% drawing=false,spotFi=315,lensWidth=0.5]% \psline[linewidth=1pt](xLeft)(xRight) \psline[length=2,linewidth=2pt,arrows=->](F')(FF) } \end{pspicture} \end{lstlisting} \begin{figure}[htb] \centering \begin{pspicture}*(-5,-3.5)(5,3.5) \psgrid[subgriddiv=0,griddots=5] \pnode(2,-2){FF}\qdisk(FF){1.5pt} \pnode(-5,5){A} \pnode(0,0){O} \multido{\nCountA=-2.4+0.4}{9}{% \Parallel[linecolor=red,length=9](O)(A)(0,\nCountA){P1} \psline[linecolor=red](0,\nCountA)(FF) \psOutLine[linecolor=red,length=9](0,\nCountA)(FF){P2} } \psline[linecolor=blue](A)(FF) \psOutLine[linecolor=blue,length=5](A)(FF){END1} \rput(0,0){% \lens[yBottom=-3.5,yTop=3.5,lensGlass=true,lensHeight=6.25,% drawing=false,spotFi=315,lensWidth=0.5]% \psline[linewidth=1pt](xLeft)(xRight) \psline[length=2,linewidth=2pt,arrows=->](F')(FF) } \end{pspicture} \caption{The \texttt{\textbackslash Parallel}-Macro}\label{fig:Parallel} \end{figure} \section{\texttt{\textbackslash ABinterCD}} This macro is used by the \verb|\telescop| macro. It determines the intersection point of two lines, in this case a ray and the mirror axis. Figure \ref{fig:ABinterCD} shows a part of figure \ref{fig:defaultTele}. Given are the points A, B (focus), C/D (mirror axis). We need the point E to draw the other rays for the ocular, which can be done with the \verb|\ABinterCD| macro. The syntax is: \par \bigskip \verb|\ABinterCD(A)(B)(C)(D){E}| \par \bigskip \begin{figure}[htb] \centering \begin{pspicture}*(-0.5,-2.25)(9,2.25) \rput(0,0){% \mirrorCVG[% mirrorHeight=4,% mirrorWidth=0.25,% mirrorDepth=0.25,% drawing=false]% } \mirrorCVGRay[% mirrorHeight=4,% mirrorWidth=0.25,% mirrorDepth=0.25,% drawing=false](8,1.25)(2,1.25){A} \psline[linewidth=0.5\pslinewidth](9,0) \rput{-45}(6,0){\mirrorTwo} \qdisk(A){2pt}\uput[30](A){A} \pnode(8,0){B} \qdisk(B){2pt}\uput[-45](B){B} \pnode(! 6 1 45 cos mul sub 1 45 sin mul){C} \qdisk(C){2pt}\uput[90](C){C} \pnode(! 6 1 45 cos mul add 1 45 sin mul neg){D} \uput[-45](D){D}\qdisk(D){2pt} \psline[linestyle=dashed](A)(B) \ABinterCD(A)(B)(C)(D){Inter1}\qdisk(A){2pt} \nodeBetween(A)(B){M}\qdisk(M){2pt} {\psset{linecolor=red} \qdisk(Inter1){2pt}\uput[220](Inter1){E}\uput[220](M){M}} \end{pspicture} \caption{\texttt{\textbackslash ABinterCD}-Makro}% \label{fig:ABinterCD} \end{figure} \section{\texttt{\textbackslash nodeBetween}} This macro determines the coordinates of the center of a line. The syntax is: \par \verb|\nodeBetween(A)(B){C}| \par Figure \ref{fig:ABinterCD} shows an example, where the node \verb|M| was determined by the \verb|\nodeBetween| macro. \section{\CMD{rotateNode}} The syntax is \medskip \verb|\rotateNode{NodeName}{Degrees}| \medskip The coordinates of the node \verb|A| are changed to the new ones. Negative values are possible for rotating clockwise. \begin{multicols}{2} \begin{pspicture}(4,4) \psgrid \pnode(3,1){A} \qdisk(A){2pt}\uput[20](A){A} \rotateNode(A){45} \qdisk(A){2pt}\uput[20](A){A} \psarc[linecolor=red,linewidth=0.5pt]{->}(0,0){3.16}{19.47}{64.47} \rput(2,3.5){\CMD{rotateNode(A)\{45\}}} \end{pspicture} \begin{lstlisting} \begin{pspicture}(4,4) \pnode(3,1){A} \qdisk(A){2pt}\uput[20](A){A} \rotateNode(A){45} \qdisk(A){2pt}\uput[20](A){A} \end{pspicture} \end{lstlisting} \end{multicols} \section{\CMD{rotateTriangle}} The syntax is \medskip \verb|\rotateNode{NodeNameA}{NodeNameB}{NodeNameC}{Degrees}| \medskip The coordinates of the nodes \verb|A,B,C| are changed to the new ones. Negative values are possible for rotating clockwise. \begin{multicols}{2} \begin{pspicture}(-1,0)(4,4) \psgrid \pnode(1,1){A} \pnode(3,1){B} \pnode(2,3){C} \qdisk(A){2pt}\uput[180](A){A} \qdisk(B){2pt}\uput[0](B){B} \qdisk(C){2pt}\uput[90](C){C} \psline(A)(B)(C)(A) \rotateTriangle(A)(B)(C){45} \qdisk(A){2pt}\uput[180](A){A} \qdisk(B){2pt}\uput[0](B){B} \qdisk(C){2pt}\uput[90](C){C} \psline[linecolor=red](A)(B)(C)(A) \psarc[linecolor=red,linewidth=0.5pt]{->}(0,0){3.16}{19.47}{64.47} \psarc[linecolor=red,linewidth=0.5pt]{->}(0,0){1.41}{45}{90} \psarc[linecolor=red,linewidth=0.5pt]{->}(0,0){3.61}{56.31}{101.31} \rput(1.5,0.5){\CMD{rotateNode(A)(B)(C)\{45\}}} \end{pspicture} \columnbreak \begin{lstlisting} \begin{pspicture}(-1,0)(4,4) \pnode(1,1){A} \pnode(3,1){B} \pnode(2,3){C} \qdisk(A){2pt}\uput[180](A){A} \qdisk(B){2pt}\uput[0](B){B} \qdisk(C){2pt}\uput[90](C){C} \psline(A)(B)(C)(A) \rotateTriangle(A)(B)(C){45} \qdisk(A){2pt}\uput[180](A){A} \qdisk(B){2pt}\uput[0](B){B} \qdisk(C){2pt}\uput[90](C){C} \psline[linecolor=red](A)(B)(C)(A) \end{pspicture} \end{lstlisting} \end{multicols} \section{\CMD{rotateFrame}} The syntax is \medskip \verb|\rotateNode{NodeNameA}{NodeNameB}{NodeNameC}{NodeNameD}{Degrees}| \medskip The coordinates of the nodes \verb|A,B,C,D| are changed to the new ones. Negative values are possible for rotating clockwise. \clearpage \begin{multicols}{2} \begin{pspicture}(-2,0)(4,5) \psgrid \pnode(1,1){A} \pnode(3,1){B} \pnode(3,3){C} \pnode(1,3){D} \qdisk(A){2pt}\uput[180](A){A} \qdisk(B){2pt}\uput[0](B){B} \qdisk(C){2pt}\uput[90](C){C} \qdisk(D){2pt}\uput[180](D){D} \psline(A)(B)(C)(D)(A) \rotateFrame(A)(B)(C)(D){45} \qdisk(A){2pt}\uput[180](A){A} \qdisk(B){2pt}\uput[0](B){B} \qdisk(C){2pt}\uput[90](C){C} \qdisk(D){2pt}\uput[180](D){D} \psline[linecolor=red](A)(B)(C)(D)(A) \psarc[linecolor=red,linewidth=0.5pt]{->}(0,0){3.16}{19.47}{64.47} \psarc[linecolor=red,linewidth=0.5pt]{->}(0,0){1.41}{45}{90} \psarc[linecolor=red,linewidth=0.5pt]{->}(0,0){4.24}{45}{90} \psarc[linecolor=red,linewidth=0.5pt]{->}(0,0){3.16}{71.57}{116.57} \rput(1,0.5){\CMD{rotateNode(A)(B)(C)(D)\{45\}}} \end{pspicture} \columnbreak \begin{lstlisting} \begin{pspicture}(-2,0)(4,5) \pnode(1,1){A} \pnode(3,1){B} \pnode(3,3){C} \pnode(1,3){D} \qdisk(A){2pt}\uput[180](A){A} \qdisk(B){2pt}\uput[0](B){B} \qdisk(C){2pt}\uput[90](C){C} \qdisk(D){2pt}\uput[180](D){D} \psline(A)(B)(C)(D)(A) \rotateFrame(A)(B)(C)(D){45} \qdisk(A){2pt}\uput[180](A){A} \qdisk(B){2pt}\uput[0](B){B} \qdisk(C){2pt}\uput[90](C){C} \qdisk(D){2pt}\uput[180](D){D} \psline[linecolor=red](A)(B)(C)(D)(A) \end{pspicture} \end{lstlisting} \end{multicols} \section{\CMD{arrowLine}} The syntax is \medskip \verb|\arrowLine[Options](Start)(End){ArrowNumber}| \medskip Draws a line from \verb|Start| to \verb|End| with \verb|ArrowNumber| arrows inside. \begin{multicols}{2} \begin{pspicture}(4,4) \psgrid \arrowLine[linecolor=red](0,0)(4,3){3} \arrowLine[linecolor=green,arrowsize=6pt,arrows=-|](0,0)(3,1){2} \arrowLine[linecolor=blue,arrowOffset=0.75,arrowsize=6pt](4,0)(0,3){3} \rput(2,3.5){\CMD{arrowLine(Start)(End)\{n\}}} \end{pspicture} \columnbreak \begin{lstlisting} \begin{pspicture}(4,4) \arrowLine[linecolor=red](0,0)(4,3){3} \arrowLine[linecolor=green,% arrowsize=6pt,% arrows=-|](0,0)(3,1){2} \arrowLine[linecolor=blue,% arrowOffset=0.75,% arrowsize=6pt](4,0)(0,3){3} \end{pspicture} \end{lstlisting} \end{multicols} \subsection{Options} A special option is \verb|arrowOffset|, which makes it possible to draw lines with different arrows. By default the arrows are placed symetrically. This can be moved by \verb|arrowOffset|. Additionally all other valid options for pslines are possible her, too. \begin{multicols}{2} \begin{pspicture}(4,2) \psgrid \arrowLine[arrowsize=6pt,% linecolor=red](0,0.5)(4,0.5){3} \arrowLine[arrowsize=6pt,% linecolor=red,% arrows=<-](0,1)(4,1){3} \arrowLine[arrowsize=6pt,% linecolor=red](0,1.5)(4,1.5){3} \arrowLine[arrowsize=6pt,% linecolor=blue,% arrows=<-,% arrowOffset=0.2](0,1.5)(4,1.5){3} \end{pspicture} \columnbreak \begin{lstlisting} \begin{pspicture}(4,2) \arrowLine[arrowsize=6pt,% linecolor=red](0,0.5)(4,0.5){3} \arrowLine[arrowsize=6pt,% linecolor=red,% arrows=<-](0,1)(4,1){3} \arrowLine[arrowsize=6pt,% linecolor=red](0,1.5)(4,1.5){3} \arrowLine[arrowsize=6pt,% linecolor=blue,% arrows=<-,% arrowOffset=0.2](0,1.5)(4,1.5){3} \end{pspicture} \end{lstlisting} \end{multicols} \nocite{*} \bibliographystyle{plain} \bibliography{optic} \end{document}