# Draw a calotte within a sphere

I'm still trying to get the hang of tikz. I'm trying to shade a calotte within a sphere. The code

\begin{tikzpicture}[font = \sansmath]
\coordinate (O) at (0,0);

% ball background color
\shade[ball color = blue, opacity = 0.1] (0,0) circle [radius = 2cm];

% cone
\begin{scope}
\def\rx{0.71}% horizontal radius of the ellipse
\def\ry{0.15}% vertical radius of the ellipse
\def\z{0.725}% distance from center of ellipse to origin

\path [name path = ellipse]    (0,\z) ellipse ({\rx} and {\ry});
\path [name path = horizontal] (-\rx,\z-\ry*\ry/\z)
-- (\rx,\z-\ry*\ry/\z);
\path [name intersections = {of = ellipse and horizontal}];

\end{scope}

% ball
% label of ball center point
\filldraw (O) circle (1pt) node[below] {$O$};

\draw[densely dashed] (O) to [edge label = $1$] (-1.33,1.33) coordinate (x);
\draw[densely dashed] (O) -- (1.33,1.33) coordinate (y);

% cut of ball surface
\draw[red, densely dashed] (-1.36,1.46) arc [start angle = 170, end angle = 10,
\draw[red] (-1.29,1.52) arc [start angle=-200, end angle = 20,

% label of cut of ball surface
\draw (-1.2,2.2) -- (-0.23,1.1) node at (-1.37,2.37) {$B$};

%angle
\pic[draw,->,angle radius=.5cm,angle eccentricity=1.3,"$\alpha$"][blue] {angle=y--O--x};

\end{tikzpicture}


gives me the sphere I'm working with and I want to have that:

I've tried fiddling with shade to no success.

Like this?

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{sansmath}
\usepackage{tikz-3dplot}
\usetikzlibrary{3d,backgrounds,quotes,angles,calc,patterns}
\begin{document}
\tdplotsetmaincoords{80}{00}
\begin{tikzpicture}[tdplot_main_coords,font=\sansmath]
\pgfmathsetmacro{\myang}{50} % latitude angle of the red circle
\coordinate (O) at (0,0,0);
\shade[ball color = blue, opacity = 0.2,tdplot_screen_coords]
\begin{scope}[canvas is xy plane at z={\R*sin(\myang)},transform shape]
% \angVis from https://tex.stackexchange.com/a/49589/121799
\pgfmathsetmacro\angVis{atan(sin(\myang)*cos(\tdplotmaintheta)/sin(\tdplotmaintheta))}
\begin{scope}[on background layer]
\draw[red,dashed] (\angVis:{\R*cos(\myang)}) arc (\angVis:180-\angVis:{\R*cos(\myang)});
\end{scope}
\draw[red] (180-\angVis:{\R*cos(\myang)}) arc (180-\angVis:360+\angVis:{\R*cos(\myang)});
\path (0:{\R*cos(\myang)}) coordinate (R)
(180:{\R*cos(\myang)}) coordinate (L);
\end{scope}
\begin{scope}[on background layer]
\draw[dashed] (L) -- (O) node[midway,below] {$L$} -- (R);
\fill (O) circle[radius=1pt] node[below] {$O$};
\pic[draw,-latex,angle radius=.5cm,angle eccentricity=1.3,"$\alpha$"]
{angle=R--O--L};
\end{scope}
\path[tdplot_screen_coords,pattern=north east lines,pattern color=green!70!black]
let \p1=(L),\p2=(R),\n1={atan2(\y1,\x1)},\n2={atan2(\y2,\x2)}
in (O) -- (R) arc(\n2:\n1:\R) -- cycle;
\end{tikzpicture}
\end{document}


You can, of course, also add this to your code (which I find a bit more complicated than necessary, but this is only my opinion).

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{sansmath}
\usetikzlibrary{quotes,angles,%intersections,%<- not used
calc,patterns}
\begin{document}

\begin{tikzpicture}[font = \sansmath]
\coordinate (O) at (0,0);

% ball background color
\shade[ball color = blue, opacity = 0.1] (0,0) circle [radius = 2cm];

% cone you are not using this anywhere
%   \begin{scope}
%     \def\rx{0.71}% horizontal radius of the ellipse
%     \def\ry{0.15}% vertical radius of the ellipse
%     \def\z{0.725}% distance from center of ellipse to origin
%
%     \path [name path global=ellipse]    (0,\z) ellipse ({\rx} and {\ry});
%     \path [name path = horizontal] (-\rx,\z-\ry*\ry/\z)
%                                 -- (\rx,\z-\ry*\ry/\z);
%
%
%
%   \end{scope}

% ball
% label of ball center point
\filldraw (O) circle (1pt) node[below] {$O$};
\draw[densely dashed] (O) to [edge label = $1$] (-1.33,1.33) coordinate (x);
\path[fill=green!70!black,fill opacity=0.5]
(O) -- (45:2) arc(45:135:2cm) -- cycle;
\draw[densely dashed] (O) -- (1.33,1.33) coordinate (y);

% cut of ball surface
\draw[red, densely dashed] (-1.36,1.46) arc [start angle = 170, end angle = 10,
\draw[red] (-1.29,1.52) arc [start angle=-200, end angle = 20,

% label of cut of ball surface
\draw (-1.2,2.2) -- (-0.23,1.1) node at (-1.37,2.37) {$B$};

%angle
\pic[draw,->,angle radius=.5cm,angle eccentricity=1.3,"$\alpha$"][blue] {angle=y--O--x};
\end{tikzpicture}
\end{document}


• Perfect! If I wanted to have it completely green and not shaded, I'd only need to replace your code with fill right? Apr 8, 2019 at 19:18
• @medihde Yes. You may need to change the ordering in order not to overwrite the angle etc. I added a proposal.
– user121799
Apr 8, 2019 at 19:19