|
- import {geoInterpolate as interpolate, geoProjection as projection, geoRotation as rotation} from "d3-geo";
- import {asin, degrees, pi, sin, radians} from "./math.js";
-
- // Compute the origin as the midpoint of the two reference points.
- // Rotate one of the reference points by the origin.
- // Apply the spherical law of sines to compute gamma rotation.
- export default function(raw, p0, p1) {
- var i = interpolate(p0, p1),
- o = i(0.5),
- a = rotation([-o[0], -o[1]])(p0),
- b = i.distance / 2,
- y = -asin(sin(a[1] * radians) / sin(b)),
- R = [-o[0], -o[1], -(a[0] > 0 ? pi - y : y) * degrees],
- p = projection(raw(b)).rotate(R),
- r = rotation(R),
- center = p.center;
-
- delete p.rotate;
-
- p.center = function(_) {
- return arguments.length ? center(r(_)) : r.invert(center());
- };
-
- return p
- .clipAngle(90);
- }
|