mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
957 B
33 lines
957 B
import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from "../math.js";
|
|
import {conicProjection} from "./conic.js";
|
|
import {cylindricalEqualAreaRaw} from "./cylindricalEqualArea.js";
|
|
|
|
export function conicEqualAreaRaw(y0, y1) {
|
|
var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;
|
|
|
|
// Are the parallels symmetrical around the Equator?
|
|
if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);
|
|
|
|
var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;
|
|
|
|
function project(x, y) {
|
|
var r = sqrt(c - 2 * n * sin(y)) / n;
|
|
return [r * sin(x *= n), r0 - r * cos(x)];
|
|
}
|
|
|
|
project.invert = function(x, y) {
|
|
var r0y = r0 - y,
|
|
l = atan2(x, abs(r0y)) * sign(r0y);
|
|
if (r0y * n < 0)
|
|
l -= pi * sign(x) * sign(r0y);
|
|
return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
|
|
};
|
|
|
|
return project;
|
|
}
|
|
|
|
export default function() {
|
|
return conicProjection(conicEqualAreaRaw)
|
|
.scale(155.424)
|
|
.center([0, 33.6442]);
|
|
}
|
|
|