Miscellaneous Projections - Adams
Adams projections also use the elliptic integral in the same way as the Pierce and Guyou projections. We use the same equations in the basic coordinate system:
> `Pierce/integral` := unapply(int(1/sqrt(1-1/2*sin(t)^2),t=0..v),v);
> x = `Pierce/integral`(v);
> y=`Pierce/integral`(u);
u and v are given by
> sin(u) = sqrt(1+cos(a)*cos(b)-sin(a)*sin(b));
> sin(v) = sqrt(1-cos(a)*cos(b)-sin(a)*sin(b));
In Adams' projection of the world within a square with poles in the corners the parameters are a and b given by
> a = arccos(cos(Phi)*sin(lambda/2));
> b = arccos(sin(Phi));
where
> p1:=Phi=arcsin(tan(phi/2)): p1;
Numerical results for the necessary integral can be obtained as follows:
>
GuyouElliptic := proc(xx)
option remember;
evalf(EllipticF(sin(abs(xx)),1/2*2^(1/2)));
end;
We now proceed to define the coordinate system as a series of equations as shown below. Note the use of the signum function to assign the appropriate sign to the coordinates and the enclosure of the entire algorithm within quote marks to delay evaluation of the functions.
>
`Adams/equations`:= 'Phi=arcsin(tan(phi/2)),
a = arccos(cos(Phi)*sin(lambda/2)),
b = arccos(sin(Phi)),
u = arcsin(sqrt(1+cos(a)*cos(b)-sin(a)*sin(b))),
v = arcsin(sqrt(1-cos(a)*cos(b)-sin(a)*sin(b))),
x = 'signum'(sin(Phi)+cos(a))*'GuyouElliptic'(u),
y = 'signum'(sin(Phi)-cos(a))*'GuyouElliptic'(v)';
Optimize the calculations to eliminate extra trig calculations:
> readlib(optimize):
> Aeqns:=optimize([`Adams/equations`]): Aeqns;
Make the projection:
>
mapcoords(Adams,
input = [lambda,phi],
coords = [Aeqns, [x,y]],
params = [r],
view = [-180..180,-90..90,13,7,-90..90,-180..180]):
We will not use coordplot to isplay the coordinate system; rather, we shall make a grid:
> tt1 := graticule([seq(ii*10, ii = -18..18)],[-90,-60,-40,-20,-5,5,20,40,60,90]):
and convert it to the Adams coordinate system.
> pp3 := display(`Maps/changecoords`(tt1,Adams)): pp3;
Now we can test these new coordinates on the whole world.
> wa3:=changecoords(world[ng,50],Adams):
The world map and the graticule are displayed together, but only after rotating the projection so that the poles appear at the top and bottom of the image.
> wa4:=plots[display]({pp3,wa3}):
> wa5:=plottools[rotate](wa4,Pi/4,[0,0]): wa5;
Adams devised another projection in which the poles appear in the center of the sides of a square. The equations for this system are:
>
`Adams square/equations`:= 'Phi=arcsin(tan(phi/2)),
a = arccos((cos(Phi)*sin(lambda/2)-sin(Phi))/sqrt(2)),
b = arccos((cos(Phi)*sin(lambda/2)+sin(Phi))/sqrt(2)),
u = arcsin(sqrt(1+cos(a)*cos(b)-sin(a)*sin(b))),
v = arcsin(sqrt(1-cos(a)*cos(b)-sin(a)*sin(b))),
x = 'signum'(lambda)*'GuyouElliptic'(u),
y = 'signum'(phi)*'GuyouElliptic'(v)';
>
mapcoords(`Adams square`,
input = [lambda,phi],
coords = [optimize([`Adams square/equations`]), [x,y]],
params = [r],
view = [-180..180,-90..90,13,7,-90..90,-180..180]):
The coordinate system is
> pp4 := display(`Maps/changecoords`(tt1,`Adams square`)): pp4;
The world map and graticule can now be shown:
> wa3:=changecoords(world[ng,50],`Adams square`):
> wa4:=plots[display]({pp4,wa3}): wa4;
>