Creator: Stefan Bringuier
Illustration of coherent X-ray scattering (i.e. Thomson scattering) from an atom. An electron is caused to oscillate and then re-emits a photon with the same energy in an arbitrary direction.
\documentclass[tikz,border=5pt]{standalone}
\usepackage{amsmath}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{fadings,shadings}
\tikzfading[name=fade out,
inner color=transparent!0,
outer color=transparent!100]
\pgfdeclareradialshading{atomshade}{
\pgfpoint{0cm}{0cm}}
{
color(0cm)=(pgftransparent!0);
color(0.2cm)=(pgftransparent!20);
color(0.5cm)=(pgftransparent!50);
color(0.7cm)=(pgftransparent!70);
color(1cm)=(pgftransparent!100)
}
\tikzset{atom/.style={circle, shading=atomshade, minimum size=1.0cm}}
\begin{document}
\begin{tikzpicture}
% Settings for incoming wave
\def\incomingWaveStart{-1.833}
\def\incomingWaveEnd{-1.2165}
\def\incomingArrowStart{-1.2165}
\def\incomingArrowEnd{-1.0996}
% Settings for scattered waves
\def\scatteredWaveStart{0}
\def\scatteredWaveEnd{0.633}
\def\scatteredArrowStart{0.633}
\def\scatteredArrowEnd{0.75}
\def\oscillationAmplitude{0.1}
\def\frequencyFactor{2.0e3}
% General settings
\def\atomRadius{0.55} % Radius of atom
\def\waveLengthLabelPosX{-1.7}
\def\waveLengthLabelPosY{0.0}
\def\highlightAngle{135}
\def\opacityHigh{1}
\def\opacityLow{0.65}
% Atom
\node[atom=gray] (atom1) at (0,0) {};
% Oscillations
\foreach \radius in {0.85, 0.95, 1.05, 1.15} {
\draw[path fading=fade out, thick] (\radius cm - 0.20cm, 0.05cm) arc (15:75:\radius cm);
\draw[path fading=fade out, thick] (-\radius cm + 0.20cm, -0.05cm) arc (195:255:\radius cm);
}
% Incoming x-ray wave
\draw[black, variable=\x, samples=200, smooth, domain=\incomingWaveStart:\incomingWaveEnd]
plot( \x, {-\oscillationAmplitude + \oscillationAmplitude * cos(\frequencyFactor*\x)} );
% Arrow segment at the end
\draw[->, black, variable=\x, samples=20, smooth, domain=\incomingArrowStart:\incomingArrowEnd]
plot( \x, -\oscillationAmplitude);
\node [above] at (\waveLengthLabelPosX,\waveLengthLabelPosY) {$\lambda$};
% Emitted x-rays
\foreach \angle in {95, \highlightAngle, 165, 275, 315, 350} {
\pgfmathsetmacro{\startX}{\atomRadius * cos(\angle)}
\pgfmathsetmacro{\startY}{\atomRadius * sin(\angle)}
\pgfmathparse{\angle==\highlightAngle ? \opacityHigh : \opacityLow}
\let\op\pgfmathresult
% Wave packet
\draw[black, opacity=\op, variable=\x, samples=200, smooth, domain=\scatteredWaveStart:\scatteredWaveEnd]
plot({
\startX + \x * cos(\angle) - \oscillationAmplitude * sin(\frequencyFactor*\x)*sin(\angle)
}, {
\startY + \x * sin(\angle) + \oscillationAmplitude * sin(\frequencyFactor*\x) * cos(\angle)
});
% Arrow at the end
\draw[->, black, opacity=\op, variable=\x, samples=20, smooth, domain=\scatteredArrowStart:\scatteredArrowEnd]
plot({
\startX + \x * cos(\angle)
}, {
\startY + \x * sin(\angle)
});
}
\node [left, opacity=\opacityLow] at (+95:1.1) {$\lambda$};
\end{tikzpicture}
\end{document}