summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/tikz-mirror-lens/tex/tikz-mirror-lens.sty
diff options
context:
space:
mode:
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.sty524
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