Geodesics on the sphere 1 Coordinates
1.1 On the sphere
Geographical coordinates (Latitude) and (Longitude).
Sometimes we use:
= 2. 1.2 In the 3d space Coordinates x, y, z.
N
x
y z
In space
We have:
x=cos
( )
cos( )
y=cos
( )
sin( )
z=sin
( )
1.3 In the plane
1.3.1 Cartesian coordinates
Coordinates u, v. The first coordinate u in the vertical direction.
u
v
Cartesian coordinates
1.3.2 Polar coordinates
Coordinates r (Distance) and t (Angle). Zero-direction for t vertical.
r t
Polar coordinates
2 Geodesics
The idea is to rotate the equator about the x-axes about the angle . The plane of this great circle has the equation:
z= ytan
( ) From
x=cos
( )
cos( )
y=cos
( )
sin( )
z=sin
( ) we get
sin
( )
=cos( )
sin( )
tan( )
and
( )
=arctan sin( ( )
tan( )
)
Note: This is not the general case of geodesics, since all these geodesics are passing
through the points ( )
, =( )
0, 0and ( )
, =( )
0,.
3 Programs
The following programs are written in MuPAD. This software is very similar to Maple.
To every example you see the corresponding figure.
3.1 Sphere
Sphere x:=(phi,lambda)-> cos(phi)*cos(lambda):
y:=(phi,lambda)-> cos(phi)*sin(lambda):
z:=(phi,lambda)-> sin(phi):
phig:=(lambda, alpha)->arctan(sin(lambda)*tan(alpha)):
sphere:=plot::Surface([x(phi,lambda), y(phi,lambda), z(phi,lambda)],
phi=-PI/2..PI/2, lambda=0..2*PI, Mesh=[13, 25], Submesh=[1,1], FillColor=[1,1,1], FillColor2=[1,1,1], LineWidth=0.5, LineCo- lor=[0,0,0]):
plot(sphere,
Scaling=Constrained, Width=90, Height=90, Axes=None, CameraDirection=[8,6,4]);
3.2 Sphere with geodesics
Sphere with geodesics x:=(phi,lambda)-> cos(phi)*cos(lambda):
y:=(phi,lambda)-> cos(phi)*sin(lambda):
z:=(phi,lambda)-> sin(phi):
phig:=(lambda, alpha)->arctan(sin(lambda)*tan(alpha)):
sphere:=plot::Surface([x(phi,lambda), y(phi,lambda), z(phi,lambda)],
phi=-PI/2..PI/2, lambda=0..2*PI, Mesh=[13, 25], Submesh=[1,1], FillColor=[1,1,1], FillColor2=[1,1,1], LineWidth=0.5, LineCo- lor=[0,0,0]):
geod:=alpha->plot::Curve3d([x(phig(lambda, alpha),lambda), y(phig(lambda, alpha),lambda),z(phig(lambda, alpha),lambda)], lambda=-PI..PI, LineColor=[0,0,1], LineWidth=0.8):
plot(sphere, geod(al*PI/180)$al=15..75 step 30, Scaling=Constrained, Width=90, Height=90,
Axes=None, CameraDirection=[8,6,4]);
3.3 Cylindrical equidistant projection u
( )
, = v( )
, =Cylindrical equidistant projection u:=(phi,lambda)->phi:
v:=(phi,lambda)->lambda:
phig:=(lambda, alpha)->arctan(sin(lambda)*tan(alpha)):
phiLine:=lambda->plot::Curve2d([v(phi,lambda), u(phi,lambda)], phi=-PI/2..PI/2, LineColor=[0,0,0], LineWidth=0.5):
lambdaLine:=phi->plot::Curve2d([v(phi,lambda), u(phi,lambda)], lambda=-PI..PI, LineColor=[0,0,0], LineWidth=0.5):
geod:=alpha->plot::Curve2d([v(phig(lambda, alpha),lambda), u(phig(lambda, alpha),lambda)],
lambda=-PI..PI, LineColor=[0,0,1], LineWidth=0.8):
plot(phiLine(la*PI/180)$la=-180..180 step 15, lambdaLine(ph*PI/180)$ph=-90..90 step 15, geod(al*PI/180)$al=15..75 step 30,
Scaling=Constrained, Axes=None, Width=120, Height=60);
3.4 Azimuthal equidistant projection
r
( )
, = 2 = t( )
, =Azimuthal equidistant projection theta:=phi->PI/2-phi:
r:=(phi,lambda)->theta(phi):
t:=(phi,lambda)->lambda:
phig:=(lambda, alpha)->arctan(sin(lambda)*tan(alpha)):
phiLine:=lambda-
>plot::Curve2d([r(phi,lambda)*sin(t(phi,lambda)), -r(phi,lambda)*cos(t(phi,lambda))],
phi=-PI/2..PI/2, LineColor=[0,0,0], LineWidth=0.5):
lambdaLine:=phi-
>plot::Curve2d([r(phi,lambda)*sin(t(phi,lambda)), -r(phi,lambda)*cos(t(phi,lambda))],
lambda=-PI..PI, LineColor=[0,0,0], LineWidth=0.5):
geod:=alpha->plot::Curve2d([r(phig(lambda, alpha),lambda)*
sin(t(phig(lambda, alpha),lambda)),
-r(phig(lambda, alpha),lambda)*cos(t(phig(lambda, al- pha),lambda))],
lambda=-PI..PI, LineColor=[0,0,1], LineWidth=0.8):
plot(phiLine(la*PI/180)$la=-180..180 step 15,
lambdaLine(ph*PI/180)$ph=-90..75 step 15, geod(al*PI/180)$al=15..75 step 30,
Scaling=Constrained, Axes=None, Width=100, Height=100);
3.5 Cylindrical equal-area projection u
( )
, =sin( )
v
( )
, =Cylindrical equal-area projection u:=(phi,lambda)->sin(phi):
v:=(phi,lambda)->lambda:
phig:=(lambda, alpha)->arctan(sin(lambda)*tan(alpha)):
phiLine:=lambda->plot::Curve2d([v(phi,lambda), u(phi,lambda)], phi=-PI/2..PI/2, LineColor=[0,0,0], LineWidth=0.5):
lambdaLine:=phi->plot::Curve2d([v(phi,lambda), u(phi,lambda)], lambda=-PI..PI, LineColor=[0,0,0], LineWidth=0.5):
geod:=alpha->plot::Curve2d([v(phig(lambda, alpha),lambda), u(phig(lambda, alpha),lambda)],
lambda=-PI..PI, LineColor=[0,0,1], LineWidth=0.8):
plot(phiLine(la*PI/180)$la=-180..180 step 15, lambdaLine(ph*PI/180)$ph=-90..90 step 15, geod(al*PI/180)$al=15..75 step 30,
Scaling=Constrained, Axes=None, Width=120, Height=50);
3.6 Azimuthal equal-area projection
r
( )
, =2 sin( )
4 2 =2 sin( )
2t
( )
, =Azimuthal equal-area projection theta:=phi->PI/2-phi:
r:=(phi,lambda)->2*sin(theta(phi)/2):
t:=(phi,lambda)->lambda:
phig:=(lambda, alpha)->arctan(sin(lambda)*tan(alpha)):
phiLine:=lambda-
>plot::Curve2d([r(phi,lambda)*sin(t(phi,lambda)), -r(phi,lambda)*cos(t(phi,lambda))],
phi=-PI/2..PI/2, LineColor=[0,0,0], LineWidth=0.5):
lambdaLine:=phi-
>plot::Curve2d([r(phi,lambda)*sin(t(phi,lambda)), -r(phi,lambda)*cos(t(phi,lambda))],
lambda=-PI..PI, LineColor=[0,0,0], LineWidth=0.5):
geod:=alpha->plot::Curve2d([r(phig(lambda, alpha),lambda)*
sin(t(phig(lambda, alpha),lambda)),
-r(phig(lambda, alpha),lambda)*cos(t(phig(lambda, al- pha),lambda))],
lambda=-PI..PI, LineColor=[0,0,1], LineWidth=0.8):
plot(phiLine(la*PI/180)$la=-180..180 step 15, lambdaLine(ph*PI/180)$ph=-90..75 step 15, geod(al*PI/180)$al=15..75 step 30,
Scaling=Constrained, Axes=None, Width=100, Height=100);
3.7 Mercator's cylindrical conformal projection u
( )
, =ln tan( ( )2 + 4 )
v
( )
, =Mercators cylindrical conformal projection u:=(phi,lambda)->ln(tan(float(phi/2+PI/4))):
v:=(phi,lambda)->lambda:
phig:=(lambda, alpha)->arctan(sin(lambda)*tan(alpha)):
phiLine:=lambda->plot::Curve2d([v(phi,lambda), u(phi,lambda)], phi=-5*PI/12..5*PI/12, LineColor=[0,0,0], LineWidth=0.5):
lambdaLine:=phi->plot::Curve2d([v(phi,lambda), u(phi,lambda)], lambda=-PI..PI, LineColor=[0,0,0], LineWidth=0.5):
geod:=alpha->plot::Curve2d([v(phig(lambda, alpha),lambda), u(phig(lambda, alpha),lambda)],
lambda=-PI..PI, LineColor=[0,0,1], LineWidth=0.8):
plot(phiLine(la*PI/180)$la=-180..180 step 15, lambdaLine(ph*PI/180)$ph=-75..75 step 15, geod(al*PI/180)$al=15..75 step 30,
Scaling=Constrained, Axes=None, Width=120, Height=90);
3.8 Stereographic projection
r
( )
, =2 tan( )
4 2 =2 tan( )
2t
( )
, = 3.8.1 -75° phi 0°Stereographic projection theta:=phi->PI/2-phi:
r:=(phi,lambda)->2*tan(theta(phi)/2):
t:=(phi,lambda)->lambda:
phig:=(lambda, alpha)->arctan(sin(lambda)*tan(alpha)):
phiLine:=lambda->plot::Curve2d([r(phi,lambda)
*sin(t(phi,lambda)),
-r(phi,lambda)*cos(t(phi,lambda))],
phi=-5*PI/12..PI/2, LineColor=[0,0,0], LineWidth=0.5):
lambdaLine:=phi-
>plot::Curve2d([r(phi,lambda)*sin(t(phi,lambda)), -r(phi,lambda)*cos(t(phi,lambda))],
lambda=-PI..PI, LineColor=[0,0,0], LineWidth=0.5):
geod:=alpha->plot::Curve2d([r(phig(lambda, alpha),lambda)*
sin(t(phig(lambda, alpha),lambda)), -r(phig(lambda, alpha),lambda)
*cos(t(phig(lambda, alpha),lambda))],
lambda=-PI..PI, LineColor=[0,0,1], LineWidth=0.8):
plot(phiLine(la*PI/180)$la=-180..180 step 15, lambdaLine(ph*PI/180)$ph=-75..90 step 15, geod(al*PI/180)$al=15..75 step 30,
Scaling=Constrained, Axes=None, Width=100, Height=100);
3.8.2 Northern hemisphere
Northern hemisphere theta:=phi->PI/2-phi:
r:=(phi,lambda)->2*tan(theta(phi)/2):
t:=(phi,lambda)->lambda:
phig:=(lambda, alpha)->arctan(sin(lambda)*tan(alpha)):
phiLine:=lambda->plot::Curve2d([r(phi,lambda)
*sin(t(phi,lambda)),
-r(phi,lambda)*cos(t(phi,lambda))],
phi=0..PI/2, LineColor=[0,0,0], LineWidth=0.5):
lambdaLine:=phi-
>plot::Curve2d([r(phi,lambda)*sin(t(phi,lambda)), -r(phi,lambda)*cos(t(phi,lambda))],
lambda=-PI..PI, LineColor=[0,0,0], LineWidth=0.5):
geod:=alpha->plot::Curve2d([r(phig(lambda, alpha),lambda)*
sin(t(phig(lambda, alpha),lambda)), -r(phig(lambda, alpha),lambda)
*cos(t(phig(lambda, alpha),lambda))],
lambda=0..PI, LineColor=[0,0,1], LineWidth=0.8):
plot(phiLine(la*PI/180)$la=-180..180 step 15, lambdaLine(ph*PI/180)$ph=0..90 step 15, geod(al*PI/180)$al=15..75 step 30,
Scaling=Constrained, Axes=None, Width=100, Height=100);
3.9 Mercator / Sanson
u
( )
, =v
( )
, =cos( )
Mercator / Sanson u:=(phi,lambda)->phi:
v:=(phi,lambda)->lambda*cos(phi):
phig:=(lambda, alpha)->arctan(sin(lambda)*tan(alpha)):
phiLine:=lambda->plot::Curve2d([v(phi,lambda), u(phi,lambda)], phi=-PI/2..PI/2, LineColor=[0,0,0], LineWidth=0.5):
lambdaLine:=phi->plot::Curve2d([v(phi,lambda), u(phi,lambda)], lambda=-PI..PI, LineColor=[0,0,0], LineWidth=0.5):
geod:=alpha->plot::Curve2d([v(phig(lambda, alpha),lambda), u(phig(lambda, alpha),lambda)],
lambda=-PI..PI, LineColor=[0,0,1], LineWidth=0.8):
plot(phiLine(la*PI/180)$la=-180..180 step 15, lambdaLine(ph*PI/180)$ph=-90..90 step 15, geod(al*PI/180)$al=15..75 step 30,
Scaling=Constrained, Axes=None, Width=120, Height=60);
3.10 Stab / Werner
r
( )
, = 2 =t
( )
, = cos( )
2 = cos
( )
Stab / Werner theta:=phi->PI/2-phi:
r:=(phi,lambda)->theta(phi):
t:=(phi,lambda)->lambda*cos(phi)/theta(phi):
phig:=(lambda, alpha)->arctan(sin(lambda)*tan(alpha)):
phiLine:=lambda-
>plot::Curve2d([r(phi,lambda)*sin(t(phi,lambda)), -r(phi,lambda)*cos(t(phi,lambda))],
phi=-PI/2..PI/2, LineColor=[0,0,0], LineWidth=0.5):
lambdaLine:=phi-
>plot::Curve2d([r(phi,lambda)*sin(t(phi,lambda)), -r(phi,lambda)*cos(t(phi,lambda))],
lambda=-PI..PI, LineColor=[0,0,0], LineWidth=0.5):
geod:=alpha->plot::Curve2d([r(phig(lambda, alpha),lambda)*
sin(t(phig(lambda, alpha),lambda)),
-r(phig(lambda, alpha),lambda)*cos(t(phig(lambda, al- pha),lambda))],
lambda=-PI..PI, LineColor=[0,0,1], LineWidth=0.8):
plot(phiLine(la*PI/180)$la=-180..180 step 15, lambdaLine(ph*PI/180)$ph=-90..75 step 15, geod(al*PI/180)$al=15..75 step 30,
Scaling=Constrained, Axes=None, Width=100, Height=100);