Complex plane & oscillator

Complex plane with the imaginary and real axis, complex conjugation, polar coordinates, Euler’s formula, phasor, analytic representation of harmonic oscillators (helix), and rotation of a complex number in the complex or 2D real plane (comparing SO(2) and U(1)). Also have a look at the rotation matrix.

Edit and compile if you like:

% Author: Izaak Neutelings (January 2021)
\documentclass[border=3pt,tikz]{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{physics}
\usepackage[outline]{contour} % glow around text
%\usetikzlibrary{intersections}
%\usetikzlibrary{decorations.markings}
\usetikzlibrary{angles,quotes} % for pic
\usetikzlibrary{bending} % for arrow head angle
\contourlength{1.0pt}
\usetikzlibrary{3d}

\tikzset{>=latex} % for LaTeX arrow head
\usepackage{xcolor}
\colorlet{myblue}{blue!65!black}
\colorlet{mydarkblue}{blue!50!black}
\colorlet{myred}{red!65!black}
\colorlet{mydarkred}{red!40!black}
\colorlet{veccol}{green!70!black}
\colorlet{vcol}{green!70!black}
\colorlet{xcol}{blue!85!black}
%\colorlet{projcol}{xcol!60}
%\colorlet{unitcol}{xcol!60!black!85}
%\colorlet{myred}{red!90!black}
%\colorlet{mypurple}{blue!50!red!80!black!80}
\tikzstyle{vector}=[->,very thick,xcol,line cap=round]
\tikzstyle{xline}=[myblue,very thick]
\tikzstyle{yzp}=[canvas is zy plane at x=0]
\tikzstyle{xzp}=[canvas is xz plane at y=0]
\tikzstyle{xyp}=[canvas is xy plane at z=0]
\def\tick#1#2{\draw[thick] (#1) ++ (#2:0.12) --++ (#2-180:0.24)}
\def\N{100}


\begin{document}


% COMPLEX
\begin{tikzpicture}
  \def\xmax{2.0}
  \def\ymax{1.6}
  \def\R{1.9}
  \def\ang{35}
  \coordinate (O) at (0,0);
  \coordinate (R) at (\ang:\R);
  \coordinate (-R) at (-\ang:\R);
  \coordinate (X) at ({\R*cos(\ang)},0);
  \coordinate (Y) at (0,{\R*sin(\ang)});
  \coordinate (-Y) at (0,{-\R*sin(\ang)});
  \node[fill=mydarkblue,circle,inner sep=0.8] (R') at (R) {};
  \node[fill=mydarkred,circle,inner sep=0.8] (-R') at (-R) {};
  \node[mydarkblue,above right=-2] at (R') {$z=x+iy=re^{i\theta}$};
  \node[mydarkred,below right=-1] at (-R') {$\overline{z}=x-iy=re^{-i\theta}$};
  \draw[dashed,mydarkblue]
    (Y) -- (R') --++ (0,{0.1-\R*sin(\ang)});
  \draw[dashed,mydarkred]
    (-Y) -- (-R') --++ (0,{\R*sin(\ang)-0.45});
  \draw[->,line width=0.9] (-0.65*\xmax,0) -- (\xmax+0.05,0) node[right] {Re};
  \draw[->,line width=0.9] (0,-\ymax) -- (0,\ymax+0.05) node[left] {Im};
  \draw[vector] (O) -- (R') node[pos=0.55,above left=-2] {$r$};
  \draw[vector,myred] (O) -- (-R') node[pos=0.55,below left=-2] {$r$};
  \draw pic[->,"$\theta$",mydarkblue,draw=mydarkblue,angle radius=23,angle eccentricity=1.24]
    {angle = X--O--R};
  \draw pic[<-,"$-\theta$"{right=-1},mydarkred,draw=mydarkred,angle radius=20,angle eccentricity=1]
    {angle = -R--O--X};
  %\tick{X}{90} node[scale=0.9,left=6,below right=-2] {$x = r\cos\theta$};
  \tick{X}{90} node[scale=1,below=-1] {$x$};
  \tick{Y}{ 0} node[mydarkblue,scale=1,left] {$y$}; %r\sin\theta = 
  \tick{-Y}{ 0} node[mydarkred,scale=1,left] {$-y$};
\end{tikzpicture}


% COMPLEX numbers
\begin{tikzpicture}
  \def\xmax{1.7}
  \def\ymax{1.6}
  \def\re{0.7*\xmax}
  \def\im{0.7*\ymax}
  \coordinate (O) at (0,0);
  \draw[dashed,mydarkblue]
    (-\re,\im) -| (\re,-\im) -| cycle;
  \draw[->,line width=0.9] (-\xmax,0) -- (\xmax+0.1,0) node[right] {Re};
  \draw[->,line width=0.9] (0,-\ymax) -- (0,\ymax+0.1) node[left] {Im};
  \tick{\re,0}{90} node[mydarkblue,scale=1,below=-1] {\contour{white}{$1$}};
  \tick{-\re,0}{90} node[mydarkblue,scale=1,below=-1] {\contour{white}{$-1$}};
  \tick{0,\im}{ 0} node[mydarkblue,scale=1,left] {\contour{white}{$i$}}; %r\sin\theta = 
  \tick{0,-\im}{ 0} node[mydarkblue,scale=1,left] {\contour{white}{$-i$}};
  \fill[mydarkblue]
    (   0, \im) circle(0.05)
    (   0,-\im) circle(0.05)
    ( \re,   0) circle(0.05)
    (-\re,  0) circle(0.05)
    ( \re, \im) circle(0.05)
      node[mydarkblue,scale=1,above right=-2] {\strut$1+i$}
    ( \re,-\im) circle(0.05)
      node[mydarkblue,scale=1,below right=-1] {\strut$1-i$}
    (-\re, \im) circle(0.05)
      node[mydarkblue,scale=1,above left=-2] {\strut$-1+i$}
    (-\re,-\im) circle(0.05)
      node[mydarkblue,scale=1,below left=-1] {\strut$-1-i$};
\end{tikzpicture}


% COMPLEX OSCILLATOR
\begin{tikzpicture}
  \def\xmax{2.2}
  \def\ymax{2.2}
  \def\R{1.8}
  \def\ang{35}
  \coordinate (O) at (0,0);
  \coordinate (R) at (\ang:\R);
  \coordinate (X) at ({\R*cos(\ang)},0);
  \coordinate (Y) at (0,{\R*sin(\ang)});
  \draw[xline] (O) circle (\R); %0.995*\R
  \node[fill=myred,circle,inner sep=1] (R') at (R) {};
  \node[mydarkblue,above right=0] at (R') {$z(t)=Ae^{i\omega t}$};
  \draw[dashed,mydarkblue]
    (Y) -- (R') --++ (0,{0.1-\R*sin(\ang)});
  \draw[->,line width=0.9] (-\xmax,0) -- (\xmax+0.05,0) node[right] {Re};
  \draw[->,line width=0.9] (0,-\ymax) -- (0,\ymax+0.05) node[left] {Im};
  \draw[vector] (O) -- (R') node[pos=0.55,above left=-2] {$A$};
  \draw pic[->,"$\omega t$",mydarkblue,draw=mydarkblue,angle radius=22,angle eccentricity=1.4]
    {angle = X--O--R};
  \tick{0,\R+0.015}{0}; %node[scale=0.9,left=2] {\contour{white}{$R$}};
  \tick{\R+0.015,0}{90}; %node[scale=0.9,right=1,below=0] {\contour{white}{$R$}};
  \tick{0,-\R-0.015}{0};
  \tick{-\R-0.015,0}{90};
  \tick{X}{90} node[scale=0.9,left=14,below=-1] {$A\cos(\omega t)$}; %{\contour{white}{$A\cos(\omega t)$}};
  \tick{Y}{ 0} node[scale=0.9,below=1,left=-2] {$A\sin(\omega t)$}; % {\contour{white}{$A\sin(\omega t)$}};
\end{tikzpicture}


% COMPLEX OSCILLATOR 3D
\def\xang{-13}
\def\zang{45}
\begin{tikzpicture}[x=(\xang:0.9), y=(90:0.9), z=(\zang:1.1)]
  \message{^^JSynthesis 3D}
  \def\xmax{8.8}         % max x axis
  \def\ymin{-1.5}        % min y axis
  \def\ymax{1.6}         % max y axis
  \def\zmax{1.6}         % max z axis
  \def\xf{1.17*\xmax}    % x position frequency axis
  \def\A{(0.70*\ymax)}   % amplitude
  \def\T{(0.335*\xmax)}  % period
  \def\w{\zmax/11.2}     % spacing components
  \def\ang{47}           % angle
  \def\s{\ang/360*\T}    % time component
  \def\x{\A*cos(\ang)}   % real component
  \def\y{\A*sin(\ang)}   % imaginary component
  
  % COMPLEX PLANE
  \begin{scope}[shift={(-1.6*\zmax,0,0)}]
    \draw[black,fill=white,opacity=0.3,yzp]
      (-1.25*\zmax,-1.25*\ymax) rectangle (1.4*\zmax,1.25*\ymax);
    \draw[->,thick] (0,\ymin,0) -- (0,\ymax+0.02,0)
      node[pos=1,left=0,yzp] {Im};
    \draw[->,thick] (0,0,-\zmax) -- (0,0,\zmax+0.02)
      node[right=1,below=0,yzp] {Re} coordinate (X);
    %\node[scale=1,yzp] at (0,-\ymax,0) {Complex plane};
    \draw[xline,yzp] (0,0) circle(0.991*\A) coordinate (O);
    \fill[myred,yzp] (\ang:{\A}) circle(0.07) coordinate(P);
    \node[mydarkblue,above=3,right=-5,yzp,scale=0.8] at (P) {$z(t)=Ae^{i\omega t}$};
    \draw[vector,thick,yzp] (0,0) -- (\ang:{\A-0.03}) coordinate (R);
    \draw pic[-{>[flex'=1]},draw=mydarkblue,angle radius=14,angle eccentricity=1,
              "$\omega t$"{above=0,right=-0.5,yslant=0.69,scale=0.8},mydarkblue,yzp]
      {angle = X--O--R};
    \tick{0,0,{\A}}{90};
    \tick{0,0,{-\A}}{90};
    \tick{0,{\A},0}{\zang};
    \tick{0,{-\A},0}{\zang};
  \end{scope}
  
  % IMAGINARY
  \begin{scope}[shift={(0,0,1.9*\zmax)}]
    \draw[black,fill=white,opacity=0.3,xyp]
      (-0.5*\ymax,-1.2*\ymax) rectangle (1.10*\xmax,1.25*\ymax);
    \draw[->,thick] (-0.3*\ymax,0,0) -- (\xmax,0,0)
      node[below right=-2,xyp] {$t$ [s]};
    \draw[->,thick] (0,\ymin,0) -- (0,\ymax,0)
      node[left,xyp] {Im};
    \draw[xline,samples=\N,smooth,variable=\t,domain=-0.05*\T:0.95*\xmax]
      plot(\t,{\A*sin(360/\T*\t)},0);
    %\node[below=0,xyp] at (0.4*\xmax,-\ymax,0) {Imaginary component};
    \fill[myred,xyp] ({\s},{\y}) circle(0.07) coordinate(I);
    \draw[vector,thick,xyp] ({\s},0) --++ (0,{\y-0.03});
    \tick{0,{\A},0}{180};
    \tick{0,{-\A},0}{180};
    \tick{{\s},0,0}{90} node[right=0,below=-1,xyp] {$\omega t$};
    \tick{{\T},0,0}{90} node[right=0,below,xyp] {\contour{white}{$T$}};
    \tick{{2*\T},0,0}{90} node[right=0,below,xyp] {\contour{white}{$2T$}};
    \node[mydarkblue,below=0,xyp] at (0.4*\xmax,1.15*\ymax,0) {$y(t)=A\sin(\omega t)$};
  \end{scope}
  
  % REAL
  \begin{scope}[shift={(0,-1.8*\zmax,0)}]
    \draw[black,fill=white,opacity=0.3,xzp]
      (-0.5*\ymax,-1.4*\ymax) rectangle (1.10*\xmax,1.25*\ymax);
    \draw[->,thick] (-0.3*\ymax,0,0) -- (\xmax,0,0)
      node[below right=-1,xzp] {$t$ [s]};
    \draw[->,thick] (0,0,-\zmax) -- (0,0,\zmax)
      node[left=-1,xzp] {Re};
    \draw[xline,samples=\N,smooth,variable=\t,domain=-0.05*\T:0.95*\xmax]
      plot(\t,0,{\A*cos(360/\T*\t)});
    %\node[below=0,xzp] at (0.4*\xmax,-\ymax,0) {Real component};
    \fill[myred,xzp] ({\s},{\x}) circle(0.07) coordinate(R);
    \draw[vector,thick,xzp] ({\s},0) --++ (0,{\x-0.03});
    \tick{0,0,{\A}}{180};
    \tick{0,0,{-\A}}{180};
    \tick{{\s},0,0}{\zang} node[below=-1,xzp] {$\omega t$};
    \tick{{\T},0,0}{\zang} node[below,xzp] {$T$};
    \tick{{2*\T},0,0}{\zang} node[below,xzp] {$2T$};
    \node[mydarkblue,above=0,xzp] at (0.3*\xmax,-\ymax,0) {$x(t)=A\cos(\omega t)$};
  \end{scope}
  
  % COMPONENTS
  \draw[myred!80!black,dashed]
    (P) -- ({\s},{\y},{\x})
    (I) -- ({\s},{\y},{\x+0.05})
    ({\s},{\y-0.06},{\x}) -- (R);
  \draw[->,black,thick] (-0.1*\ymax,0,0) -- (\xmax,0,0) node[below right=-2] {$t$ [s]};
  \draw[->,black,thick] (0,\ymin,0) -- (0,\ymax+0.02,0) node[above] {Im};
  \draw[->,black,thick] (0,0,-\zmax) -- (0,0,\zmax+0.02) node[right=1,below=3] {Re};
  \foreach \i [evaluate={\tmin=max(-0.05*\T,(\i-0.05)*\T); \tmax=min(0.95*\xmax,(\i+1)*\T);}] in {0,...,2}{
    %\draw[white,line width=1.2] (\tmin,0,0) -- (\tmax,0,0);
    \draw[thick] (\tmin,0,0) -- (\tmax,0,0);
    \draw[xline,samples=0.4*\N,smooth,variable=\t]
      plot[domain=\tmin:\tmax](\t,{\A*sin(360/\T*\t)},{\A*cos(360/\T*\t)});
  }
  \draw[thick] (0,0,{0.9*\A}) -- (0,0,{\A});
  \fill[myred] ({\s},{\y},{\x}) circle(0.07) coordinate(Z);
  \draw[vector,thick] ({\s},0,0) --++ (0,{\y-0.03},{\x-0.03});
  \draw[xline,samples=0.3*\N,smooth,variable=\t,domain=\s+0.03:\s+0.4*\T,line cap=round]
    plot(\t,{\A*sin(360/\T*\t)},{\A*cos(360/\T*\t)});
  \tick{{\T},0,0}{90};
  \tick{{2*\T},0,0}{90};
  \tick{0,0,{\A}}{90};
  \tick{0,0,{-\A}}{90};
  \tick{0,{\A},0}{\zang};
  \tick{0,{-\A},0}{\zang};
  \draw[myred!80!black,dashed]
    ({\s},{\y-0.06},{\x}) --++ (0,-0.2*\ymax,0);
  
\end{tikzpicture}



% VECTOR ROTATION
\def\xmax{2.7}
\def\ymax{2.7}
\def\R{2.3}
\def\ang{28}
\def\dang{35}
\begin{tikzpicture}
  \coordinate (O) at (0,0);
  \coordinate (R) at (\ang:\R);
  \coordinate (Q) at (\ang+\dang:\R);
  \coordinate (X) at ({\R*cos(\ang)},0);
  \coordinate (Y) at (0,{\R*sin(\ang)});
  \coordinate (X') at ({\R*cos(\ang+\dang)},0);
  \coordinate (Y') at (0,{\R*sin(\ang+\dang)});
  %\draw[myblue] (O) circle (0.995*\R);
  \draw[myblue] (-10:\R) arc (-10:100:\R);
  \node[fill=myred,circle,inner sep=0.8] at (R) {};
  \node[fill=myred,circle,inner sep=0.8] at (Q) {};
  \node[mydarkblue,above right=-2] at (R) {$\vb{r}=(x,y)$};
  \node[mydarkblue,above right=-2] at (Q) {$\vb{r}'=(x',y')$};
  \draw[dashed,mydarkblue]
    (Y) -- (R) --++ (0,{0.1-\R*sin(\ang)});
  \draw[dashed,mydarkblue]
    (Y') -- (Q) --++ (0,{0.1-\R*sin(\ang+\dang)});
  \draw[->,line width=0.9] (-0.1*\xmax,0) -- (\xmax+0.05,0) node[right] {$x$};
  \draw[->,line width=0.9] (0,-0.1*\ymax) -- (0,\ymax+0.05) node[left] {$y$};
  \draw[vector] (O) -- (R);
  \draw[vector] (O) -- (Q);
  \draw pic[->,"$\phi$",mydarkblue,draw=mydarkblue,angle radius=20,angle eccentricity=1.35]
    {angle = R--O--Q};
  \tick{0,\R+0.015}{0};
  \tick{\R+0.015,0}{90};
  \tick{X}{90} node[scale=0.9,left=0,below=-1] {$x$};
  \tick{Y}{ 0} node[scale=0.9,below=1,left=-2] {$y$};
  \tick{X'}{90} node[scale=0.9,left=0,below=-4] {$x'$};
  \tick{Y'}{ 0} node[scale=0.9,below=1,left=-2] {$y'$};
\end{tikzpicture}


% COMPLEX ROTATION
\begin{tikzpicture}
  \coordinate (O) at (0,0);
  \coordinate (R) at (\ang:\R);
  \coordinate (Q) at (\ang+\dang:\R);
  \coordinate (X) at ({\R*cos(\ang)},0);
  \coordinate (Y) at (0,{\R*sin(\ang)});
  %\draw[myblue] (O) circle (0.995*\R);
  \draw[myblue] (-10:\R) arc (-10:100:\R);
  \node[fill=myred,circle,inner sep=0.8] at (R) {};
  \node[fill=myred,circle,inner sep=0.8] at (Q) {};
  \node[mydarkblue,above right=0] at (R) {$z=re^{i\theta}$};
  \node[mydarkblue,left=2,above right=0] at (Q) {$ze^{i\phi}=re^{i(\theta+\phi)}$};
  \draw[dashed,mydarkblue]
    (Y) -- (R) --++ (0,{0.1-\R*sin(\ang)});
  \draw[->,line width=0.9] (-0.1*\xmax,0) -- (\xmax+0.05,0) node[right] {Re};
  \draw[->,line width=0.9] (0,-0.1*\ymax) -- (0,\ymax+0.05) node[left] {Im};
  \draw[vector] (O) -- (R) node[pos=0.65,above left=-3] {$r$};
  \draw[vector] (O) -- (Q) node[pos=0.65,above left=-3] {$r$};
  \draw pic[->,"$\theta$",mydarkblue,draw=mydarkblue,angle radius=24,angle eccentricity=1.25]
    {angle = X--O--R};
  \draw pic[->,"$\phi$",mydarkblue,draw=mydarkblue,angle radius=20,angle eccentricity=1.35]
    {angle = R--O--Q};
  \tick{0,\R+0.015}{0};
  \tick{\R+0.015,0}{90};
  \tick{X}{90} node[scale=0.9,left=14,below=-1] {$r\cos\theta$};
  \tick{Y}{ 0} node[scale=0.9,below=1,left=-2] {$r\sin\theta$};
\end{tikzpicture}


\end{document}

Click to download: complex.texcomplex.pdf
Open in Overleaf: complex.tex.

2 Replies to “Complex plane & oscillator”

  1. This is a really nice figure! Thanks a lot to the author!!
    However, when compiling it, I receive the following warning:
    Missing character: There is no 0 in font nullfont!
    Missing character: There is no , in font nullfont!

    I figured out that it is caused by line 222 which reads
    \draw[->,black,thick] (0,\ymin,0,0) — (0,\ymax+0.02,0) node[above] {Im};

    I think the problem is that the first 3D coordinate has four(!) arguments.
    I changed it to the following and the warning disappears.

    \draw[->,black,thick] (0,\ymin,0) — (0,\ymax+0.02,0) node[above] {Im};

Leave a Reply

Your email address will not be published.