Skip to content

Commit

Permalink
vanDerGrinten4’s inverse was broken in the 4 lobes
Browse files Browse the repository at this point in the history
  • Loading branch information
Fil committed May 27, 2020
1 parent aa9e19e commit 17219b4
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions src/vanDerGrinten4.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {geoProjection as projection} from "d3-geo";
import {abs, epsilon, halfPi, pi, sign, sqrt} from "./math.js";
import {abs, epsilon, halfPi, min, pi, sign, sqrt} from "./math.js";

export function vanDerGrinten4Raw(lambda, phi) {
if (!phi) return [lambda, 0];
Expand Down Expand Up @@ -27,11 +27,13 @@ export function vanDerGrinten4Raw(lambda, phi) {
vanDerGrinten4Raw.invert = function(x, y) {
var delta;
if (!x || !y) return [x, y];
y /= pi;
var sy = sign(y);
y = abs(y) / pi;
var x1 = sign(x) * x / halfPi,
D = (x1 * x1 - 1 + 4 * y * y) / abs(x1),
D2 = D * D,
B = 2 * y,
B = y * (2 - (y > 0.5 ? min(y, abs(x)) : 0)),
r = x * x + y * y,
i = 50;
do {
var B2 = B * B,
Expand All @@ -48,10 +50,10 @@ vanDerGrinten4Raw.invert = function(x, y) {
f = D * (B_C2 + C2 - 1) + 2 * sqrtF - x1 * (4 * B_C2 + D2),
f_ = D * (2 * C * C_ + 2 * B_C * (1 + C_)) + F_ / sqrtF - 8 * B_C * (D * (-1 + C2 + B_C2) + 2 * sqrtF) * (1 + C_) / (D2 + 4 * B_C2);
B -= delta = f / f_;
} while (delta > epsilon && --i > 0);
} while (delta * r * r > epsilon && --i > 0);
return [
sign(x) * (sqrt(D * D + 4) + D) * pi / 4,
halfPi * B
sy * halfPi * B
];
};

Expand Down

0 comments on commit 17219b4

Please sign in to comment.