ref: 40d6302b5f289ad8a617d12fa911197dddafc634
dir: /sys/src/cmd/map/libmap/mollweide.c/
#include <u.h> #include <libc.h> #include "map.h" static int Xmollweide(struct place *place, double *x, double *y) { double z; double w; z = place->nlat.l; if(fabs(z)<89.9*RAD) do { /*newton for 2z+sin2z=pi*sin(lat)*/ w = (2*z+sin(2*z)-PI*place->nlat.s)/(2+2*cos(2*z)); z -= w; } while(fabs(w)>=.00001); *y = sin(z); *x = - (2/PI)*cos(z)*place->wlon.l; return(1); } proj mollweide(void) { return(Xmollweide); }