
% vim: ts=2 sw=2 et :
\documentclass[tikz, border=2mm]{standalone}

\usepackage{amsmath}
\usepackage{bm}

\usepackage{times}
\usepackage{txfonts}

\usepackage{tikz-3dplot}

\tdplotsetmaincoords{60}{130}
\pgfmathsetmacro{\l}{2}

\begin{document}
  \begin{tikzpicture}[
      >=latex,
      tdplot_main_coords,
    ]

    % origin and poles
    \coordinate (O) at (0,0,0);
    \coordinate (NP) at (0,0,\l);
    \coordinate (SP) at (0,0,-\l);

    % gray unit circle
    \tdplotdrawarc[lightgray, dashed]{(O)}{\l}{0}{360}{}{};
    \draw[lightgray, dashed] (-\l, 0, 0) to (\l, 0, 0);
    \draw[lightgray, dashed] (0, -\l, 0) to (0, \l, 0);

    % axis
    \draw[->] (O) -- ++(0,0,1.25*\l) node[above] {\(\mathbf{\hat{z}}\)};

    % meridians
    \foreach \phi in {0, 30, 60, ..., 150}{
      \tdplotsetrotatedcoords{\phi}{90}{0};
      \tdplotdrawarc[lightgray, densely dotted, tdplot_rotated_coords]{(O)}{\l}{0}{360}{}{};
    }

    % dot above and its projection
    \pgfmathsetmacro{\phi}{120}
    \pgfmathsetmacro{\theta}{40}

    \pgfmathsetmacro{\px}{cos(\phi)*sin(\theta)*\l}
    \pgfmathsetmacro{\py}{sin(\phi)*sin(\theta)*\l}
    \pgfmathsetmacro{\pz}{cos(\theta)*\l})

    % Special meridian
    \tdplotsetrotatedcoords{\phi-90}{90}{0};
    \tdplotdrawarc[gray, tdplot_rotated_coords]{(O)}{\l}{0}{360}{}{};
    
    % point A
    \coordinate (A) at (\px,\py,\pz);
    \coordinate (Ap) at (\px,\py, 0);
    
    % lines
    \draw[red!80!black, thick, ->] (O) -- (A);
    \draw[red!80!black]
      (O) -- node[midway, below, font=\small, sloped, fill=white] {$\sqrt{1 - z^2}$}
      (Ap) -- node[midway, right, font=\small, sloped, fill=white, anchor=north] {$z = \cos \vartheta$}
      (A) node[above right, fill=white] {$r = 1$};
    
    % theta arc
    \tdplotsetrotatedcoords{\phi-90}{-90}{0};
    \tdplotdrawarc[blue!80!black, ->, tdplot_rotated_coords]{(O)}{.95\l}{0}{\theta}{}{};
    \node[above right = 1mm, blue!80!black] at (0,0,.8\l) {\(\bm{\hat{\vartheta}}\)};
  \end{tikzpicture}
\end{document}
