29 lines
584 B
C
29 lines
584 B
C
|
|
#include <u.h>
|
||
|
|
#include <libc.h>
|
||
|
|
#include "map.h"
|
||
|
|
|
||
|
|
int
|
||
|
|
Xpolyconic(struct place *place, double *x, double *y)
|
||
|
|
{
|
||
|
|
double r, alpha;
|
||
|
|
double lat2, lon2;
|
||
|
|
if(fabs(place->nlat.l) > .01) {
|
||
|
|
r = place->nlat.c / place->nlat.s;
|
||
|
|
alpha = place->wlon.l * place->nlat.s;
|
||
|
|
*y = place->nlat.l + r*(1 - cos(alpha));
|
||
|
|
*x = - r*sin(alpha);
|
||
|
|
} else {
|
||
|
|
lon2 = place->wlon.l * place->wlon.l;
|
||
|
|
lat2 = place->nlat.l * place->nlat.l;
|
||
|
|
*y = place->nlat.l * (1+(lon2/2)*(1-(8+lon2)*lat2/12));
|
||
|
|
*x = - place->wlon.l * (1-lat2*(3+lon2)/6);
|
||
|
|
}
|
||
|
|
return(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
proj
|
||
|
|
polyconic(void)
|
||
|
|
{
|
||
|
|
return(Xpolyconic);
|
||
|
|
}
|