
The stereographic projection of two antipodal points:
\documentclass[
tikz
,border = 3.14mm
]{standalone}
\usepackage{tikz-3dplot}
\usetikzlibrary{
arrows.meta
,angles
}
\pgfmathdeclarefunction{sphereX}{2}{%
% #1 - longitude
% #1 - latitude
\pgfmathparse{cos(#2) * cos(#1)}%
}
\pgfmathdeclarefunction{sphereY}{2}{%
\pgfmathparse{cos(#2) * sin(#1)}%
}
\pgfmathdeclarefunction{sphereZ}{2}{%
\pgfmathparse{sin(#2)}%
}
\pgfmathdeclarefunction{stereographicprojection}{2}{%
\pgfmathparse{#1 / (1 - #2)}%
}
\pgfmathsetmacro{\azimuth}{100}
\pgfmathsetmacro{\elevation}{30}
\pgfmathsetmacro{\longitude}{60}
\pgfmathsetmacro{\latitude}{30}
\begin{document}
\pgfmathsetmacro{\scale}{2}
\tdplotsetmaincoords{90-\elevation}{\azimuth}
\begin{tikzpicture}[tdplot_main_coords,very thin]
% x, y and z axes (pre-clip)
\draw[-latex]
(-2.5*\scale,0,0) -- (2.5*\scale,0,0)
node[pos=1,below]
{$\scriptstyle x,\xi,\mbox{\scriptsize Re}(z)$};
\draw[-latex]
(0,-1.5*\scale,0) -- (0,1.5*\scale,0);
\draw[-latex]
(0,0,-1.5*\scale) -- (0,0,1.5*\scale);
\begin{scope}
% clip and blank out sphere
\clip[
tdplot_screen_coords
,postaction = {
%tdplot_screen_coords
,fill
,white
}
] (0,0) circle [radius = {1*\scale}];
% x, y and z axes (post-clip)
\draw[densely dashed]
(-2.5*\scale,0,0) -- (1*\scale,0,0);
\draw[densely dashed]
(0,-1.5*\scale,0) -- (0,1*\scale,0);
\draw[densely dashed]
(0,0,-1.5*\scale) -- (0,0,1*\scale);
% outer circle
\draw[tdplot_screen_coords]
(0,0) circle [radius = {1*\scale}];
\draw[densely dashed]
(\azimuth:1*\scale) arc [
start angle = {\azimuth}
,end angle = {\azimuth+180}
,radius = {1*\scale}
];
\draw (\azimuth:1*\scale) arc [
start angle = {\azimuth}
,end angle = {\azimuth-180}
,radius = {1*\scale}
];
% origin
\coordinate (O) at (0,0);
% point on sphere
\coordinate (P) at
(
{sphereX(\longitude,\latitude)*\scale}
,{sphereY(\longitude,\latitude)*\scale}
,{sphereZ(\longitude,\latitude)*\scale}
);
% stereographic projection
% of point on sphere
\coordinate (P') at
(
{
stereographicprojection(
sphereX(\longitude,\latitude)
,sphereZ(\longitude,\latitude)
)*\scale
}
,{
stereographicprojection(
sphereY(\longitude,\latitude)
,sphereZ(\longitude,\latitude)
)*\scale
}
,{0}
);
% north pole
\coordinate (N) at (0,0,1*\scale);
% south pole
\coordinate (S) at (0,0,-1*\scale);
% point opposite from P
\coordinate (Q) at
(
{-sphereX(\longitude,\latitude)*\scale}
,{-sphereY(\longitude,\latitude)*\scale}
,{-sphereZ(\longitude,\latitude)*\scale}
);
% stereographic projection of
% point opposite from P
\coordinate (Q') at
(
{
stereographicprojection(
-sphereX(\longitude,\latitude)
,-sphereZ(\longitude,\latitude)
)*\scale
}
,{
stereographicprojection(
-sphereY(\longitude,\latitude)
,-sphereZ(\longitude,\latitude)
)*\scale
}
,{0}
);
% orthogonal projection of
% P onto the xy plane
\coordinate (projP) at
(
{sphereX(\longitude,\latitude)*\scale}
,{sphereY(\longitude,\latitude)*\scale}
,{0}
);
% constructions which don't exceed the clip
\draw
(P) -- (Q)
(N) -- (0,0,1.5*\scale)
(1*\scale,0,0) -- (2.5*\scale,0,0)
(0,1*\scale,0) -- (0,1.5*\scale,0)
(P) -- (projP)
;
\draw[densely dashed]
(N) -- (Q);
\end{scope}
% constructions which exceed the clip
\draw
(N) -- (P')
(Q') -- (P')
;
% points
\pgfmathsetmacro{\pointradius}{0.025*\scale}
\begin{scope}[tdplot_screen_coords]
\fill
(O) circle[radius = \pointradius]
node[below left=5pt]{$\scriptstyle O$};
\fill
(P) circle[radius = \pointradius]
node[above right]{$\scriptstyle P$};
\fill
(P') circle[radius = \pointradius]
node[right]{$\scriptstyle z$};
\fill
(N) circle[radius = \pointradius]
node[above left]{$\scriptstyle N$};
\fill
(S) circle[radius = \pointradius]
node[right]{$\scriptstyle S$};
\fill
(Q) circle[radius = \pointradius]
node[above left]{$\scriptstyle Q$};
\fill
(Q') circle[radius = \pointradius]
node[above left]{$\scriptstyle W$};
\end{scope}
% angles
\draw[-latex]
(0.25*\scale,0) arc [
start angle = {0}
,end angle = {\longitude}
,radius = {0.25*\scale}
]
node [
pos = {0.5}
,below
] {$\scriptstyle\theta$};
\draw[-latex]
(0.15*\scale,0) arc [
start angle = {0}
,end angle = {\longitude + 180}
,radius = {0.15*\scale}
] node [
pos = 0.95
,above
]{$\scriptstyle\theta_{w}$};
\draw[
smooth
,domain = {90:\latitude}
,variable = {\latitude}
,-latex
] plot (
{0.3*sphereX(\longitude,\latitude)*\scale}
,{0.3*sphereY(\longitude,\latitude)*\scale}
,{0.3*sphereZ(\longitude,\latitude)*\scale}
) node [
pos = {0}
,above right = {5pt}
]{$\scriptstyle\phi$};
\draw pic [
draw
,-
,angle eccentricity = {1.4}
,angle radius = {0.2cm}
]{right angle=O--projP--P};
\end{tikzpicture}
\end{document}