# How to draw 3D angle mark with line in spherical coordinates

In order to illustrate the substitution formula of a special double integral, I need to draw a graph of spherical coordinates.

However, it is not convenient to add angle mark and shadow to the picture drawn from the original perspective(see my code). How to draw the spherical coordinates as shown in the figure below?

\documentclass{article}

\usepackage{tikz}
\usepackage{tikz-3dplot}

\usetikzlibrary{angles,quotes}
\begin{document}
\tdplotsetmaincoords{60}{40}
\pgfmathsetmacro{\rvec}{.8}
\pgfmathsetmacro{\thetavec}{47}
\pgfmathsetmacro{\phivec}{54}
\begin{tikzpicture}
[
tdplot_main_coords,
scale=5,
]
%define coordinates
\coordinate (O) at (0,0,0);
\draw[thick,-stealth] (0,0,0) -- (1,0,0)coordinate(x) node[anchor=north west]    {$x$};
\draw[thick,-stealth] (0,0,0) -- (0,1,0)coordinate(y) node[anchor=west]{$y$};
\draw[thick,-stealth] (0,0,0) -- (0,0,1)coordinate(z) node[anchor=south]{$z$};
\tdplotsetcoord{P}{\rvec}{\thetavec}{\phivec}

\coordinate (Q) at ($(O)!(P)!(x)$);
\coordinate (R) at (Pxy);
\draw (O) -- (P) node[above right]{a};
\draw (O) -- (R)node[below right]{c};
\draw (P) -- (R);

\draw(Q)node[below]{b} -- (P);
\draw(Q) -- (R);

%\tdplotdrawarc{(O)}{0.2}{0}{\phivec}{anchor=north}{$\varphi$}
%\tdplotsetthetaplanecoords{\phivec}
\draw [canvas is plane={yOz}] pic["$\theta$", draw=red, text=cyan, <-, angle eccentricity=1.2, angle radius=1cm] {angle=P--O--z};

\draw [canvas is xy plane at z = 0] pic["$\varphi$", draw=red, text=green, ->, angle eccentricity=1.3, angle radius=0.9cm] {angle=x--O--Pxy};

\draw [canvas is plane={OPQ}] pic["$\alpha$" at, draw=red, text=orange, ->, angle eccentricity=1.4, angle radius=0.5cm] {angle=Q--O--P};

\draw [canvas is plane={PQR}] pic["$\beta$", draw=red, text=blue, ->, angle eccentricity=1.5, angle radius=0.4cm] {angle=Pxy--Q--P};

\end{tikzpicture}
\end{document}

• I think you should add a spherical surface to be more realistic. – The Shortest Mustache Theorem Mar 2 at 4:35
• I also want to draw a gray spherical shadow, but I don't know how to do it.@MoneyOrientedProgrammer – D.Matthew Mar 2 at 4:58

You can use the canvas setting and pic definition to draw angle easily. For example, if you draw on xy plane, simly define the canvas as

\draw [canvas is xy plane at z = 0] <code here>;


Here is the sample code, based on your code, as a starting point:

\documentclass[tikz,border=10pt]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{angles,quotes}
\begin{document}
\tdplotsetmaincoords{60}{40}
\pgfmathsetmacro{\rvec}{.8}
\pgfmathsetmacro{\thetavec}{30}
\pgfmathsetmacro{\phivec}{50}
\begin{tikzpicture}
[
tdplot_main_coords,
scale=5,
]
%define coordinates
\coordinate (O) at (0,0,0);
\draw[thick,-stealth] (0,0,0) -- (1,0,0)coordinate(y) node[anchor=north east]{$y$};
\draw[thick,-stealth] (0,0,0) -- (0,1,0)coordinate(x) node[anchor=north west]{$x$};
\draw[thick,-stealth] (0,0,0) -- (0,0,1)coordinate(z) node[anchor=south]{$z$};
\tdplotsetcoord{P}{\rvec}{\thetavec}{\phivec}
\draw (O) -- (P) node[above right]{a};
\draw (O) -- (Pxy);
\draw (P) -- (Pxy);

\draw [canvas is xy plane at z = 0] pic["$\alpha$", draw=red, text=blue, ->, angle eccentricity=1.2, angle radius=1cm] {angle=O--P--Pxy};
%\tdplotdrawarc{(O)}{0.2}{0}{\phivec}{anchor=north}{$\varphi$}
%\tdplotsetthetaplanecoords{\phivec}
\draw [canvas is zy plane at x = 0] pic["$\theta$", draw=red, text=cyan, <-, angle eccentricity=1.2, angle radius=1cm] {angle=P--O--z};

\draw [canvas is xy plane at z = 0] pic["$\varphi$", draw=red, text=green, ->, angle eccentricity=1.2, angle radius=1cm] {angle=y--O--Pxy};

\end{tikzpicture}
\end{document}


• Thank you for your code, but I want to raise the position of \alpha. How to solve this problem? It's better to add a line to this angle, like the one in this link.texwelt.de/fragen/24868/tikz-angles-winkel-mit-pin – D.Matthew Mar 2 at 4:12
• @D.Matthew You can put the \alpha where ever you want and draw line/arrow. You do not need to use the quotes. – hpekristiansen Mar 3 at 13:08