UNPKG

889 BJavaScriptView Raw
1// code duplicated from d3-geo-projection
2import {abs, asin, atan2, cos, epsilon, halfPi, pow, sign, sin} from "./math.js";
3
4export function lagrangeRaw(n) {
5
6 function forward(lambda, phi) {
7 if (abs(abs(phi) - halfPi) < epsilon) return [0, phi < 0 ? -2 : 2];
8 var sinPhi = sin(phi),
9 v = pow((1 + sinPhi) / (1 - sinPhi), n / 2),
10 c = 0.5 * (v + 1 / v) + cos(lambda *= n);
11 return [
12 2 * sin(lambda) / c,
13 (v - 1 / v) / c
14 ];
15 }
16
17 forward.invert = function(x, y) {
18 var y0 = abs(y);
19 if (abs(y0 - 2) < epsilon) return x ? null : [0, sign(y) * halfPi];
20 if (y0 > 2) return null;
21
22 x /= 2, y /= 2;
23 var x2 = x * x,
24 y2 = y * y,
25 t = 2 * y / (1 + x2 + y2); // tanh(nPhi)
26 t = pow((1 + t) / (1 - t), 1 / n);
27 return [
28 atan2(2 * x, 1 - x2 - y2) / n,
29 asin((t - 1) / (t + 1))
30 ];
31 };
32
33 return forward;
34}