The Lambert-Beer law states there is a logarithmic dependence between the ratio between incident light intensity $I_0$ and the intensity of scattered light directing forward $I$ through a media and the product of the absorption coefficient $gamma$ of the substance and the distance the light travels through the material $L$.
I/I_0 = exp(-gamma L)
In the case of the figure above, the light is a red laser beam through a cloud formed by sand grains with a certain granulometry schematized with spherical particles.To deep the argument ($gamma$ computation), see "Light scattering by small particles" by Hulst van de H.C., Dover Publications.
Edit and compile if you like:
% Lambert-Beer law parameters drawing % Author: Michele Muccioli % Compile with LuaLaTeX \documentclass{standalone} \usepackage{tikz} \usetikzlibrary{calc,fadings,decorations.markings} \usepackage{amsmath} %%%%%%%%%%%%%%%%%%%%%%%%%%% % FADING LIGHT DECORATION % %%%%%%%%%%%%%%%%%%%%%%%%%%% \makeatletter \pgfkeys{/pgf/decoration/.cd, start color/.store in = \startcolor, end color/.store in = \endcolor } \pgfdeclaredecoration{color change}{initial}{ % Initial state \state{initial}[% width = 0pt, next state = line, persistent precomputation = {\pgfmathdivide{50}{\pgfdecoratedpathlength}% \let\increment=\pgfmathresult% \def\x{0}}]% {}% % Line state \state{line}[% width = .5pt, persistent postcomputation = {\pgfmathadd@{\x}{\increment}% \let\x=\pgfmathresult}]% {% \pgfsetlinewidth{\pgflinewidth}% \pgfsetarrows{-}% \pgfpathmoveto{\pgfpointorigin}% \pgfpathlineto{\pgfqpoint{.75pt}{0pt}}% \pgfsetstrokecolor{\endcolor!\x!\startcolor}% \pgfusepath{stroke}% }% % Final state \state{final}{% \pgfsetlinewidth{\pgflinewidth}% \pgfpathmoveto{\pgfpointorigin}% \color{\endcolor!\x!\startcolor}% \pgfusepath{stroke}% } } \makeatother %%%%%%%%%%%% % COMMANDS % %%%%%%%%%%%% \def\pr#1{\directlua{tex.print(#1)}} \def\rnd{.% \pdfuniformdeviate10% \pdfuniformdeviate10% \pdfuniformdeviate10% } \begin{document} %%%%%%%%%%%%%% % PARAMETERS % %%%%%%%%%%%%%% \definecolor{sand}{RGB}{193,154,107} % Particles color \def\cols{20} % Number of columns \def\rows{40} % Number of rows \def\SquareUnit{.35} % Lengths of unit square edges (cm) \pgfmathsetmacro\RmaxParticle{.1} % Maximum particle radius \def\BeforeLight{5} % Light path before particle cloud \begin{tikzpicture}[x = \SquareUnit cm, y = \SquareUnit cm, line width = 2pt ] %%%%%%%%%%%%%% % LIGHT PATH % %%%%%%%%%%%%%% %-> Before particles cloud \draw[red, decoration = {markings, mark = at position 0.5 with {\arrow[]{latex}}}, postaction = {decorate}] (-\BeforeLight,{\rows*\SquareUnit/2})--++ (\BeforeLight,0)node[midway, above, black]{$I_0$}; %-> Trespassing particles cloud \draw[decoration = {color change, start color = red, end color = red!20!white}, decorate] (0,{\rows*\SquareUnit/2})--++ (\cols*\SquareUnit,0); %-> After particles cloud \draw[red!20!white, decoration = {markings, mark = at position 0.5 with {\arrow[]{latex}}}, postaction = {decorate}] ({\cols*\SquareUnit},{\rows*\SquareUnit/2})--++ (\BeforeLight,0)node[midway, above, black]{$I$}; %%%%%%%%%%%%%%%%%%% % PARTICLES CLOUD % %%%%%%%%%%%%%%%%%%% %-> Lua version (FASTER) \foreach \i in {1,...,\cols}{ \foreach \j in {1,...,\rows}{ \edef\radius{\pr{\RmaxParticle*math.random()}} \edef\l{\pr{\SquareUnit-2*\radius}} \edef\x{\pr{(\i-1)*\SquareUnit+\radius+\l*math.random()}} \edef\y{\pr{(\j-1)*\SquareUnit+\radius+\l*math.random()}} \fill[sand] (\x,\y)circle[radius=\radius]; } } %-> pgfmath version (uncomment it if you want to try) % Some time compilation gives too high % number computation problem %\foreach \i in {1,...,\cols}{ % \foreach \j in {1,...,\rows}{ % \pgfmathsetmacro\radius{\RmaxParticle*\rnd} % \pgfmathsetmacro\l{\SquareUnit-2*\radius} % \pgfmathsetmacro\x{(\i-1)*\SquareUnit+\radius+\l*\rnd} % \pgfmathsetmacro\y{(\j-1)*\SquareUnit+\radius+\l*\rnd} % \fill[sand] (\x,\y)circle[radius=\radius]; % } %} %%%%%%%%%%%%%%%%%% % LENGTH QUOTING % %%%%%%%%%%%%%%%%%% \draw[|<->|, > = latex, line width = .8pt] ($(0,\rows*\SquareUnit)+(0,1)$)--++ (\cols*\SquareUnit,0)node[midway, above]{$L$}; %%%%%%%%%%%%%%%%%%%% % LAMBERT-BEER LAW % %%%%%%%%%%%%%%%%%%%% \node[anchor = north, inner sep = 1ex] at (current bounding box.south){$\dfrac{I}{I_0}=\exp(-\gamma L)$}; \end{tikzpicture} \end{document}
Click to download: lambert-beer-law.tex • lambert-beer-law.pdf
Open in Overleaf: lambert-beer-law.tex