@visx/vendor
Version:
vendored packages for visx
78 lines (74 loc) • 2.56 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.areaStream = exports.areaRingSum = void 0;
exports.default = _default;
var _index = require("../../../vendor-cjs/d3-array/src/index.js");
var _math = require("./math.js");
var _noop = _interopRequireDefault(require("./noop.js"));
var _stream = _interopRequireDefault(require("./stream.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var areaRingSum = new _index.Adder();
// hello?
exports.areaRingSum = areaRingSum;
var areaSum = new _index.Adder(),
lambda00,
phi00,
lambda0,
cosPhi0,
sinPhi0;
var areaStream = {
point: _noop.default,
lineStart: _noop.default,
lineEnd: _noop.default,
polygonStart: function () {
exports.areaRingSum = areaRingSum = new _index.Adder();
areaStream.lineStart = areaRingStart;
areaStream.lineEnd = areaRingEnd;
},
polygonEnd: function () {
var areaRing = +areaRingSum;
areaSum.add(areaRing < 0 ? _math.tau + areaRing : areaRing);
this.lineStart = this.lineEnd = this.point = _noop.default;
},
sphere: function () {
areaSum.add(_math.tau);
}
};
exports.areaStream = areaStream;
function areaRingStart() {
areaStream.point = areaPointFirst;
}
function areaRingEnd() {
areaPoint(lambda00, phi00);
}
function areaPointFirst(lambda, phi) {
areaStream.point = areaPoint;
lambda00 = lambda, phi00 = phi;
lambda *= _math.radians, phi *= _math.radians;
lambda0 = lambda, cosPhi0 = (0, _math.cos)(phi = phi / 2 + _math.quarterPi), sinPhi0 = (0, _math.sin)(phi);
}
function areaPoint(lambda, phi) {
lambda *= _math.radians, phi *= _math.radians;
phi = phi / 2 + _math.quarterPi; // half the angular distance from south pole
// Spherical excess E for a spherical triangle with vertices: south pole,
// previous point, current point. Uses a formula derived from Cagnoli’s
// theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
var dLambda = lambda - lambda0,
sdLambda = dLambda >= 0 ? 1 : -1,
adLambda = sdLambda * dLambda,
cosPhi = (0, _math.cos)(phi),
sinPhi = (0, _math.sin)(phi),
k = sinPhi0 * sinPhi,
u = cosPhi0 * cosPhi + k * (0, _math.cos)(adLambda),
v = k * sdLambda * (0, _math.sin)(adLambda);
areaRingSum.add((0, _math.atan2)(v, u));
// Advance the previous points.
lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
}
function _default(object) {
areaSum = new _index.Adder();
(0, _stream.default)(object, areaStream);
return areaSum * 2;
}
;