Sha256: 5ce0d82c29c291645c0cb58fe69e9bfeb6b823ef531757dec6e7031f92158296
Contents?: true
Size: 1.81 KB
Versions: 6
Compression:
Stored size: 1.81 KB
Contents
// TODO clip input coordinates on opposite hemisphere d3.geo.azimuthal = function() { var mode = "orthographic", // or stereographic origin, scale = 200, translate = [480, 250], x0, y0, cy0, sy0; function azimuthal(coordinates) { var x1 = coordinates[0] * d3_radians - x0, y1 = coordinates[1] * d3_radians, cx1 = Math.cos(x1), sx1 = Math.sin(x1), cy1 = Math.cos(y1), sy1 = Math.sin(y1), k = mode === "stereographic" ? 1 / (1 + sy0 * sy1 + cy0 * cy1 * cx1) : 1, x = k * cy1 * sx1, y = k * (sy0 * cy1 * cx1 - cy0 * sy1); return [ scale * x + translate[0], scale * y + translate[1] ]; } azimuthal.invert = function(coordinates) { var x = (coordinates[0] - translate[0]) / scale, y = (coordinates[1] - translate[1]) / scale, p = Math.sqrt(x * x + y * y), c = mode === "stereographic" ? 2 * Math.atan(p) : Math.asin(p), sc = Math.sin(c), cc = Math.cos(c); return [ (x0 + Math.atan2(x * sc, p * cy0 * cc + y * sy0 * sc)) / d3_radians, Math.asin(cc * sy0 - (y * sc * cy0) / p) / d3_radians ]; }; azimuthal.mode = function(x) { if (!arguments.length) return mode; mode = x + ""; return azimuthal; }; azimuthal.origin = function(x) { if (!arguments.length) return origin; origin = x; x0 = origin[0] * d3_radians; y0 = origin[1] * d3_radians; cy0 = Math.cos(y0); sy0 = Math.sin(y0); return azimuthal; }; azimuthal.scale = function(x) { if (!arguments.length) return scale; scale = +x; return azimuthal; }; azimuthal.translate = function(x) { if (!arguments.length) return translate; translate = [+x[0], +x[1]]; return azimuthal; }; return azimuthal.origin([0, 0]); };
Version data entries
6 entries across 6 versions & 1 rubygems