diff options
Diffstat (limited to 'graphics/pgf/contrib/tikz-mirror-lens/tex/tikz-mirror-lens.sty')
-rw-r--r-- | graphics/pgf/contrib/tikz-mirror-lens/tex/tikz-mirror-lens.sty | 524 |
1 files changed, 524 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/tikz-mirror-lens/tex/tikz-mirror-lens.sty b/graphics/pgf/contrib/tikz-mirror-lens/tex/tikz-mirror-lens.sty new file mode 100644 index 0000000000..cac1f21c2d --- /dev/null +++ b/graphics/pgf/contrib/tikz-mirror-lens/tex/tikz-mirror-lens.sty @@ -0,0 +1,524 @@ +% !TeX spellcheck = en_US +% !TeX encoding = UTF-8 +% ============================= + +\NeedsTeXFormat{LaTeX2e}[1994/06/01] +\ProvidesPackage{tikz-mirror-lens}[2022-12-25 Custom Package for drawing spherical mirrors and lens -- FHZ -- Version 1.0.0] + +\RequirePackage{tikz} +\usetikzlibrary{calc} +\usetikzlibrary{math} +\usetikzlibrary{decorations} +\usetikzlibrary{decorations.markings} + +% ======================================================= +% Variables +% f: focus of the mirror or lens +% p: position along x axis of the object +% pp: position along x axis of the object +% o: object height +% i: image height +% ymirror: mirror height +% epsilon: absolute distance between p and f +% yM: height of the mirror +% xL: Left extension of X axis +% xR: Right extension of X axis +% (x_C,y_C): Coordinates of the localization of displayed data +% arrows: optional argument to change arrows density +% ======================================================= + + +% ======================================================= +% Summary of main commands +% -- Mirrors +%\mirrorSphGauss[arrows]{f}{p}{o}{epsilon} +%\mirrorSphGaussCoord[arrows]{f}{p}{o}{epsilon} +%\mirrorSphGaussFixed[arrows]{f}{p}{o}{epsilon}{yM}{xL}{xR} +%\mirrorSphGaussFixedCoord[arrows]{f}{p}{o}{epsilon}{yM}{xL}{xR}{(x_C,y_C)} +% -- Lens +%\lensSphGauss[arrows]{f}{p}{o}{epsilon} +%\lensSphGaussCoord[arrows]{f}{p}{o}{epsilon} +%\lensSphGaussFixed[arrows]{f}{p}{o}{epsilon}{yM}{xL}{xR} +%\lensSphGaussFixedCoord[arrows]{f}{p}{o}{epsilon}{yM}{xL}{xR}{(x_C,y_C)} +% ======================================================= + +% ======================================================= +% Mirrors and Lens -- Math +% ======================================================= +% Summary of commands +% \mirrorMath{f}{p}{o}{epsilon}{ymirror} +% \lensMath{f}{p}{o}{epsilon}{ymirror} +% \lensMathL{f}{p}{o}{epsilon}{ymirror} + +% ======================================================= +\newcommand{\mirrorMath}[5]{ + % Define mirror and object + \tikzmath{\f = #1; \v = 0; \c = 2*\f;} + \tikzmath{\p = #2; \o = #3;} + % Calculate image + \tikzmath{ + if (abs(\p - \f) >= #4) then { + \pp = \p*\f/(\p-\f); + \i = -(\pp/\p)*\o; + } else { + \pp = 0; + \i = 0; + }; + }; + % Mirror size, math as parameter + \tikzmath{\ymirror = #5;}; +} +\newcommand{\lensMath}[5]{ + % f > 0 convergente, f < 0 divergente + % Define lens and object + \tikzmath{\f = #1; \v = 0; \a = 2*\f;} + \tikzmath{\p = #2; \o = #3;} + % Calculate image + \tikzmath{ + if (abs(\p - \f) >= #4) then { + \pp = \p*(\f)/(\f-(\p)); + \i = (\pp/\p)*\o; + } else { + \pp = 0; + \i = 0; + }; + }; + % Lens size, math as parameter + \tikzmath{\ymirror = #5;}; +} +\newcommand{\lensMathL}[5]{ + % f > 0 convergente, f < 0 divergente + % Define lens and object + \tikzmath{\f = #1; \v = 0; \a = 2*\f;} + \tikzmath{\p = #2; \o = #3;} + % Calculate image + \tikzmath{ + if (abs(\p + \f) >= #4) then { + \pp = \p*\f/(\p+\f); + \i = (\pp/\p)*\o; + } else { + \pp = 0; + \i = 0; + }; + }; + % Lens size, math as parameter + \tikzmath{\ymirror = #5;}; +} +% ******************************************************* + +% ======================================================= +% Mirrors and Lens -- base +% ======================================================= +% Summary of commands +% \mirrorLensObjIma{p}{pp}{o}{i} +% \mirrorLensCoord{p}{pp}{o}{i}{f}{x} +% ======================================================= +\newcommand{\mirrorLensObjIma}[4]{ + \begin{scope}[-stealth] + \draw[green!50!black] (#1,0) node[above right]{$p$} -- ++(0,#3) node[above left]{$o$} coordinate(O); + \tikzmath{ + if (#2 != 0) then { + { + \draw[green] (#2,0) node[below left]{$p^{\prime}$} -- ++(0,#4) node[below left]{$i$}; + }; + }; + }; + \end{scope} +} +\newcommand{\mirrorLensCoord}[6]{ + \begin{scope} + \node[right] at #6 { + $\begin{aligned} + f & = #5 \\ + (p,o) & = (#1,#3) \\ + (p^{\prime},i) & = (#2,#4) + \end{aligned}$ + }; + \end{scope} +} +% ******************************************************* + +% ======================================================= +% Mirrors -- base +% ======================================================= +% Summary of commands +% \mirrorBase{f}{ymirror}{minEixoX}{maxEixoX} +% \mirrorPts{v}{f}{c} +% \mirrorRays{p}{pp}{o}{i} +% ======================================================= +\newcommand{\mirrorBase}[4]{ + \begin{scope} + \draw[dashed, extended line=15pt] (#3,0) -- (#4,0); + \foreach \ys in {1,-1}{ + \begin{scope}[yscale=\ys] + \draw[blue] (0,0) -- ++(0,#2) arc (0:-sign(#1)*90:{-sign(#1)*0.5}); + \foreach \x/\y in {0/0.05,0.05/0.20,0.15/0.35,0.45/0.5}{ + \draw[blue] ({sign(#1)*\x},#2+\y) -- ++({-0.5},0); + } + \end{scope} + } + \end{scope} +} +\newcommand{\mirrorPts}[3]{ + \begin{scope}[red] + \fill (#1,0) coordinate(V) circle(0.05) node[below left]{$V$}; + \fill (#2,0) coordinate(F) circle(0.05) node[below]{$f$}; + \fill (#3,0) coordinate(C) circle(0.05) node[below]{$c$}; + \end{scope} +} +\newcommand{\mirrorRays}[4]{ + \begin{scope}[thick,extended line=25pt] + \tikzmath{ + if (#2 != 0) then { + { + \draw[arrDec={#1},cyan] (#1,#3) -- (0,#3) -- (F) -- (#2,#4); + \draw[arrDec={#1-10},magenta] (O) -- (F) -- (0,#4) -- (#2,#4); + \draw[arrDec={#1-10},violet,dotted] (O) -- (V) -- (#2,#4); + }; + } else { + { + \draw[arrDec={#1},cyan] (#1,#3) -- (0,#3) -- (F); + \draw[arrDec={#1-10},violet,dotted] (O) -- (V) -- (#1,-#3); + }; + }; + }; + \end{scope} +} +% ******************************************************* + +% ======================================================= +% Lens - Base +% ======================================================= +% Summary of commands +% \lensBase{f}{ymirror}{minEixoX}{maxEixoX} +% \lensPts{v}{f}{a} +% \lensRays{p}{pp}{o}{i} +% ======================================================= +\newcommand{\lensBase}[4]{ + \begin{scope} + \draw[dashed, extended line=15pt] (#3,0) -- (#4,0); + \foreach \ys in {1,-1}{ + \begin{scope}[yscale=\ys] + \draw[blue] (0,0) -- ++(0,#2);% arc (0:-sign(\f)*90:{-sign(\f)*0.5}); + \draw[blue, fill=white] (0,#2) -- ++(0.25,0) -- ++(-0.25,{sign(#1)*0.25}) -- ++(-0.25,{-sign(#1)*0.25}) -- cycle; + \end{scope} + } + \end{scope} +} +\newcommand{\lensPts}[3]{ + \begin{scope}[red] + \fill (#1,0) coordinate(V) circle(0.05) node[below left]{$V$}; + \fill (#2,0) coordinate(F) circle(0.05) node[below]{$f_o$}; + \fill (#3,0) coordinate(C) circle(0.05) node[below]{$A_0$}; + \fill (-#2,0) coordinate(Fi) circle(0.05) node[below]{$f_i$}; + \fill (-#3,0) coordinate(Ci) circle(0.05) node[below]{$A_i$}; + \end{scope} +} +\newcommand{\lensRays}[4]{ + \begin{scope}[thick,extended line=25pt] + \tikzmath{ + if (\pp != 0) then { + { + \draw[arrDec={#1},cyan] (\p,\o) -- (0,\o) -- (Fi) -- (\pp,\i); + \draw[arrDec={#1-10},magenta] (O) -- (F) -- (0,\i) -- (\pp,\i); + \draw[arrDec={#1-10},violet,dotted] (O) -- (V) -- (\pp,\i); + }; + } else { + { + \draw[arrDec={#1},cyan] (\p,\o) -- (0,\o) -- (Fi); + \draw[arrDec={#1-10},violet,dotted] (O) -- (V) -- (-\p,-\o); + }; + }; + }; + \end{scope} +} +% ******************************************************* + +% ======================================================= +% Mirrors +% ======================================================= +\newcommand{\mirrorSphGauss}[5][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \mirrorMath{#2}{#3}{#4}{#5}{max(abs(\o),abs(\i)) + 0.5} + % Mirror, Notable points, Object and image, Notable Rays, Coordinates + \mirrorBase{\f}{\ymirror}{{min(\v,\pp,\c)}}{{max(\c+0.5,\p,\pp)}} + \mirrorPts{\v}{\f}{\c} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \mirrorRays{\p}{\pp}{\o}{\i} + \end{tikzpicture} +} +\newcommand{\mirrorSphGaussCoord}[5][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \mirrorMath{#2}{#3}{#4}{#5}{max(abs(\o),abs(\i)) + 0.5} + % Mirror, Notable points, Object and image, Notable Rays, Coordinates + \mirrorBase{\f}{\ymirror}{{min(\v,\pp,\c)}}{{max(\c+0.5,\p,\pp)}} + \mirrorPts{\v}{\f}{\c} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \mirrorRays{\p}{\pp}{\o}{\i} + \mirrorLensCoord{\p}{\pp}{\o}{\i}{\f}{({max(\c+0.5,\p,\pp)+1},-1)} + \end{tikzpicture} + } +\newcommand{\mirrorSphGaussFixed}[8][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \mirrorMath{#2}{#3}{#4}{#5}{#6} + % Mirror, Notable points, Object and image, Notable Rays, Coordinates + \mirrorBase{\f}{\ymirror}{#7}{#8} + \mirrorPts{\v}{\f}{\c} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \mirrorRays{\p}{\pp}{\o}{\i} + \end{tikzpicture} +} +\newcommand{\mirrorSphGaussFixedCoord}[9][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \mirrorMath{#2}{#3}{#4}{#5}{#6} + % Mirror, Notable points, Object and image, Notable Rays, Coordinates + \mirrorBase{\f}{\ymirror}{#7}{#8} + \mirrorPts{\v}{\f}{\c} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \mirrorRays{\p}{\pp}{\o}{\i} + \mirrorLensCoord{\p}{\pp}{\o}{\i}{\f}{#9} + \end{tikzpicture} +} +% ******************************************************* + +% ======================================================= +% Lens +% ======================================================= +\newcommand{\lensSphGauss}[5][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \lensMath{#2}{#3}{#4}{#5}{max(abs(\o),abs(\i)) + 0.5} + % Lens, Notable points, Object and image, Notable Rays, Coordinates. + \lensBase{\f}{\ymirror}{{min(\v,\pp,\a)}}{{max(\a+0.5,\p,\pp)}} + \lensPts{\v}{\f}{\a} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \lensRays{\p}{\pp}{\o}{\i} + %\mirrorLensCoord{\p}{\pp}{\o}{\i}{\f}{{max(\a+0.5,\p,\pp)}+1} + \end{tikzpicture} +} +\newcommand{\lensSphGaussCoord}[5][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \lensMath{#2}{#3}{#4}{#5}{max(abs(\o),abs(\i)) + 0.5} + % Lens, Notable points, Object and image, Notable Rays, Coordinates. + \lensBase{\f}{\ymirror}{{min(\v,\pp,\a)}}{{max(\a+0.5,\p,\pp)}} + \lensPts{\v}{\f}{\a} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \lensRays{\p}{\pp}{\o}{\i} + \mirrorLensCoord{\p}{\pp}{\o}{\i}{\f}{({max(\a+0.5,\p,\pp)+1},-1)} + \end{tikzpicture} +} +\newcommand{\lensSphGaussFixed}[8][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \lensMath{#2}{#3}{#4}{#5}{#6} + % Lens, Notable points, Object and image, Notable Rays, Coordinates. + \lensBase{\f}{\ymirror}{#7}{#8} + \lensPts{\v}{\f}{\a} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \lensRays{\p}{\pp}{\o}{\i} + \end{tikzpicture} +} +\newcommand{\lensSphGaussFixedCoord}[9][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \lensMath{#2}{#3}{#4}{#5}{#6} + % Lens, Notable points, Object and image, Notable Rays, Coordinates. + \lensBase{\f}{\ymirror}{#7}{#8} + \lensPts{\v}{\f}{\a} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \lensRays{\p}{\pp}{\o}{\i} + \mirrorLensCoord{\p}{\pp}{\o}{\i}{\f}{#9} + \end{tikzpicture} +} +% ******************************************************* + +% ======================================================= +% Lens - L +% ======================================================= +\newcommand{\lensSphGaussL}[5][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \lensMathL{#2}{#3}{#4}{#5}{max(abs(\o),abs(\i)) + 0.5} + % Lens, Notable points, Object and image, Notable Rays, Coordinates. + \lensBase{\f}{\ymirror}{{min(\v,\p,\pp,\a,-\a)}}{{max(\v,\p,\pp,\a,-\a)}} + \lensPts{\v}{-\f}{-\a} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \lensRays{\p}{\pp}{\o}{\i} + %\mirrorLensCoord{\p}{\pp}{\o}{\i}{\f}{{max(\a+0.5,\p,\pp)}+1} + \end{tikzpicture} +} +\newcommand{\lensSphGaussLCoord}[5][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \lensMathL{#2}{#3}{#4}{#5}{max(abs(\o),abs(\i)) + 0.5} + % Lens, Notable points, Object and image, Notable Rays, Coordinates. + \lensBase{\f}{\ymirror}{{min(\v,\p,\pp,\a,-\a)}}{{max(\v,\p,\pp,\a,-\a)}} + \lensPts{\v}{-\f}{-\a} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \lensRays{\p}{\pp}{\o}{\i} + \mirrorLensCoord{\p}{\pp}{\o}{\i}{\f}{({max(\v,\p,\pp,\a,-\a)},-1)} + \end{tikzpicture} +} +\newcommand{\lensSphGaussLFixed}[8][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \lensMathL{#2}{#3}{#4}{#5}{#6} + % Lens, Notable points, Object and image, Notable Rays, Coordinates. + \lensBase{\f}{\ymirror}{#7}{#8} + \lensPts{\v}{-\f}{-\a} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \lensRays{\p}{\pp}{\o}{\i} + \end{tikzpicture} +} +\newcommand{\lensSphGaussLFixedCoord}[9][60]{ + \begin{tikzpicture}[very thick, + arrDec/.style={ + decoration={ + markings, + mark= between positions 0.1 and 0.99 step #1pt with {\arrow{latex}} + }, + postaction={decorate}, + }, + arrDec/.default=20, + extended line/.style={shorten >=-#1,shorten <=-#1}, + extended line/.default=1cm + ] + % Math + \lensMathL{#2}{#3}{#4}{#5}{#6} + % Lens, Notable points, Object and image, Notable Rays, Coordinates. + \lensBase{\f}{\ymirror}{#7}{#8} + \lensPts{\v}{-\f}{-\a} + \mirrorLensObjIma{\p}{\pp}{\o}{\i} + \lensRays{\p}{\pp}{\o}{\i} + \mirrorLensCoord{\p}{\pp}{\o}{\i}{\f}{#9} + \end{tikzpicture} +} +% ******************************************************* + +\endinput
\ No newline at end of file |