UNPKG

7.18 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); /**
8 * @copyright 2013 Sonia Keys
9 * @copyright 2016 commenthol
10 * @license MIT
11 * @module eqtime
12 */
13/**
14 * Eqtime: Chapter 28, Equation of time.
15 */
16
17exports.e = e;
18exports.eSmart = eSmart;
19
20var _base = require('./base');
21
22var _base2 = _interopRequireDefault(_base);
23
24var _coord = require('./coord');
25
26var _coord2 = _interopRequireDefault(_coord);
27
28var _nutation = require('./nutation');
29
30var _nutation2 = _interopRequireDefault(_nutation);
31
32var _solar = require('./solar');
33
34var _solar2 = _interopRequireDefault(_solar);
35
36function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
38var cos = Math.cos,
39 sin = Math.sin,
40 tan = Math.tan;
41
42/**
43 * e computes the "equation of time" for the given JDE.
44 *
45 * Parameter planet must be a planetposition.Planet object for Earth obtained
46 * with `new planetposition.Planet('earth')`.
47 *
48 * @param {Number} jde - Julian ephemeris day
49 * @param {planetposition.Planet} earth - VSOP87 planet
50 * @returns {Number} equation of time as an hour angle in radians.
51 */
52
53function e(jde, earth) {
54 var τ = _base2.default.J2000Century(jde) * 0.1;
55 var L0 = l0(τ);
56 // code duplicated from solar.ApparentEquatorialVSOP87 so that
57 // we can keep Δψ and cε
58
59 var _solar$trueVSOP = _solar2.default.trueVSOP87(earth, jde),
60 lon = _solar$trueVSOP.lon,
61 lat = _solar$trueVSOP.lat,
62 range = _solar$trueVSOP.range;
63
64 var _nutation$nutation = _nutation2.default.nutation(jde),
65 _nutation$nutation2 = _slicedToArray(_nutation$nutation, 2),
66 Δψ = _nutation$nutation2[0],
67 Δε = _nutation$nutation2[1];
68
69 var a = -20.4898 / 3600 * Math.PI / 180 / range;
70 var λ = lon + Δψ + a;
71 var ε = _nutation2.default.meanObliquity(jde) + Δε;
72 var eq = new _coord2.default.Ecliptic(λ, lat).toEquatorial(ε);
73 // (28.1) p. 183
74 var E = L0 - 0.0057183 * Math.PI / 180 - eq.ra + Δψ * cos(ε);
75 return _base2.default.pmod(E + Math.PI, 2 * Math.PI) - Math.PI;
76}
77
78/**
79 * (28.2) p. 183
80 */
81var l0 = function l0(τ) {
82 return _base2.default.horner(τ, 280.4664567, 360007.6982779, 0.03032028, 1.0 / 49931, -1.0 / 15300, -1.0 / 2000000) * Math.PI / 180;
83};
84
85/**
86 * eSmart computes the "equation of time" for the given JDE.
87 *
88 * Result is less accurate that e() but the function has the advantage
89 * of not requiring the V87Planet object.
90 *
91 * @param {Number} jde - Julian ephemeris day
92 * @returns {Number} equation of time as an hour angle in radians.
93 */
94function eSmart(jde) {
95 var ε = _nutation2.default.meanObliquity(jde);
96 var t = tan(ε * 0.5);
97 var y = t * t;
98 var T = _base2.default.J2000Century(jde);
99 var L0 = l0(T * 0.1);
100 var e = _solar2.default.eccentricity(T);
101 var M = _solar2.default.meanAnomaly(T);
102
103 var _base$sincos = _base2.default.sincos(2 * L0),
104 _base$sincos2 = _slicedToArray(_base$sincos, 2),
105 sin2L0 = _base$sincos2[0],
106 cos2L0 = _base$sincos2[1];
107
108 var sinM = sin(M);
109 // (28.3) p. 185
110 return y * sin2L0 - 2 * e * sinM + 4 * e * y * sinM * cos2L0 - y * y * sin2L0 * cos2L0 - 1.25 * e * e * sin(2 * M);
111}
112
113exports.default = {
114 e: e,
115 eSmart: eSmart
116};
\No newline at end of file