\documentclass{article} \usepackage{tikz,ifthen} \usetikzlibrary{calc} \pagestyle{empty} \begin{document} %% some definitions \def\tikzplane#1#2#3#4#5{% \pgfmathsetmacro\Xx{#2}% x coordiante of X axis unit vector \pgfmathsetmacro\Xy{#3}% y coordiante of X axis unit vector \pgfmathsetmacro\Yx{#4}% x coordiante of Y axis unit vector \pgfmathsetmacro\Yy{#5}% y coordiante of Y axis unit vector \tikzstyle{#1}=[cm={\Xx,\Xy,\Yx,\Yy,(0,0)}]% transformation matrix } \def\pgfmathsincos#1#2#3{% \pgfmathsetmacro#1{sin(#3)}% \pgfmathsetmacro#2{cos(#3)}% } % sphere radius \def\R{4} % elevation angle \def\angEl{32} % azimuth angle \def\angAz{110} % longitude of point P \def\angPhi{-50} % latitude of point P \def\angBeta{-30} \begin{tikzpicture}[>=latex] % option '>=latex' for nice arrows \draw (0,0) circle (\R); \foreach \t in {-80,-70,...,80} { \pgfmathsincos\sint\cost{\t} \pgfmathsincos\sinEl\cosEl{\angEl} \pgfmathsetmacro\y{\R*\cosEl*\sint*1cm} \tikzstyle{latitude circle}=[yshift=\y,yscale=\sinEl,scale=\cost] \pgfmathsetmacro\sinLon{\sint/\cost*\sinEl/\cosEl} \pgfmathtruncatemacro\testval{\sinLon} \ifnum\testval=0 \pgfmathsetmacro\ang{asin(\sinLon)} % angle of "visibility" \draw[latitude circle] (\ang:\R) arc (\ang:-\ang-180:\R); \draw[latitude circle,dashed] (180-\ang:\R) arc (180-\ang:\ang: \R); \fi \ifnum\testval>0 \draw[latitude circle] (0,0) circle(\R); \fi \ifnum\testval<0 \draw[latitude circle,dashed] (0,0) circle(\R); \fi } \foreach \t in {-5,-35,...,-175} { \pgfmathsincos\sint\cost{\t} \pgfmathsincos\sinEl\cosEl{\angEl} \tikzplane{xyplane}{\cost}{\sint*\sinEl}{0}{\cosEl} \pgfmathsetmacro\ang{atan(\sint*\cosEl/\sinEl)} % angle of "visibility" \draw[xyplane,->] (180:1.7*\R) -- (0:1.7*\R); \draw[xyplane] (\ang:\R) arc (\ang:\ang+180:\R); \draw[xyplane,dashed] (\ang-180:\R) arc (\ang-180:\ang:\R); } \draw[->] (-90:1.3*\R) -- (90:1.3*\R); \end{tikzpicture} \end{document}