#include <u.h>
#include <libc.h>
#include "map.h"

int
Xgilbert(struct place *p, double *x, double *y)
{
/* the interesting part - map the sphere onto a hemisphere */
	struct place q;
	q.nlat.s = tan(0.5*(p->nlat.l));
	if(q.nlat.s > 1) q.nlat.s = 1;
	if(q.nlat.s < -1) q.nlat.s = -1;
	q.nlat.c = sqrt(1 - q.nlat.s*q.nlat.s);
	q.wlon.l = p->wlon.l/2;
	sincos(&q.wlon);
/* the dull part: present the hemisphere orthogrpahically */
	*y = q.nlat.s;
	*x = -q.wlon.s*q.nlat.c;
	return(1);
}

proj
gilbert(void)
{
	return(Xgilbert);
}

/* derivation of the interesting part:
   map the sphere onto the plane by stereographic projection;
   map the plane onto a half plane by sqrt;
   map the half plane back to the sphere by stereographic
   projection

   n,w are original lat and lon
   r is stereographic radius
   primes are transformed versions

   r = cos(n)/(1+sin(n))
   r' = sqrt(r) = cos(n')/(1+sin(n'))

   r'^2 = (1-sin(n')^2)/(1+sin(n')^2) = cos(n)/(1+sin(n))

   this is a linear equation for sin n', with solution

   sin n' = (1+sin(n)-cos(n))/(1+sin(n)+cos(n))

   use standard formula: tan x/2 = (1-cos x)/sin x = sin x/(1+cos x)
   to show that the right side of the last equation is tan(n/2)
*/


