aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/map/libmap/lagrange.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/map/libmap/lagrange.c')
-rw-r--r--src/cmd/map/libmap/lagrange.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/cmd/map/libmap/lagrange.c b/src/cmd/map/libmap/lagrange.c
new file mode 100644
index 00000000..02dd29eb
--- /dev/null
+++ b/src/cmd/map/libmap/lagrange.c
@@ -0,0 +1,30 @@
+#include <u.h>
+#include <libc.h>
+#include "map.h"
+
+static int
+Xlagrange(struct place *place, double *x, double *y)
+{
+ double z1,z2;
+ double w1,w2,t1,t2;
+ struct place p;
+ copyplace(place,&p);
+ if(place->nlat.l<0) {
+ p.nlat.l = -p.nlat.l;
+ p.nlat.s = -p.nlat.s;
+ }
+ Xstereographic(&p,&z1,&z2);
+ csqrt(-z2/2,z1/2,&w1,&w2);
+ cdiv(w1-1,w2,w1+1,w2,&t1,&t2);
+ *y = -t1;
+ *x = t2;
+ if(place->nlat.l<0)
+ *y = -*y;
+ return(1);
+}
+
+proj
+lagrange(void)
+{
+ return(Xlagrange);
+}