1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _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 nutation
|
12 | */
|
13 | /**
|
14 | * Nutation: Chapter 22, Nutation and the Obliquity of the Ecliptic.
|
15 | */
|
16 |
|
17 | exports.nutation = nutation;
|
18 | exports.approxNutation = approxNutation;
|
19 | exports.meanObliquity = meanObliquity;
|
20 | exports.meanObliquityLaskar = meanObliquityLaskar;
|
21 | exports.nutationInRA = nutationInRA;
|
22 |
|
23 | var _base = require('./base');
|
24 |
|
25 | var _base2 = _interopRequireDefault(_base);
|
26 |
|
27 | var _sexagesimal = require('./sexagesimal');
|
28 |
|
29 | var _sexagesimal2 = _interopRequireDefault(_sexagesimal);
|
30 |
|
31 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
32 |
|
33 | // Nutation: Chapter 22, Nutation and the Obliquity of the Ecliptic.
|
34 |
|
35 | /**
|
36 | * Nutation returns nutation in longitude (Δψ) and nutation in obliquity (Δε)
|
37 | * for a given JDE.
|
38 | *
|
39 | * JDE = UT + ΔT, see package.
|
40 | *
|
41 | * Computation is by 1980 IAU theory, with terms < .0003″ neglected.
|
42 | *
|
43 | * Result units are radians.
|
44 | *
|
45 | * @param {number} jde - Julian ephemeris day
|
46 | * @return {number[]} [Δψ, Δε] - [longitude, obliquity] in radians
|
47 | */
|
48 | function nutation(jde) {
|
49 | var T = _base2.default.J2000Century(jde);
|
50 | var D = _base2.default.horner(T, 297.85036, 445267.11148, -0.0019142, 1.0 / 189474) * Math.PI / 180;
|
51 | var M = _base2.default.horner(T, 357.52772, 35999.050340, -0.0001603, -1.0 / 300000) * Math.PI / 180;
|
52 | var N = _base2.default.horner(T, 134.96298, 477198.867398, 0.0086972, 1.0 / 5620) * Math.PI / 180;
|
53 | var F = _base2.default.horner(T, 93.27191, 483202.017538, -0.0036825, 1.0 / 327270) * Math.PI / 180;
|
54 | var Ω = _base2.default.horner(T, 125.04452, -1934.136261, 0.0020708, 1.0 / 450000) * Math.PI / 180;
|
55 | var Δψ = 0;
|
56 | var Δε = 0;
|
57 | // sum in reverse order to accumulate smaller terms first
|
58 | for (var i = table22A.length - 1; i >= 0; i--) {
|
59 | var row = table22A[i];
|
60 | var arg = row.d * D + row.m * M + row.n * N + row.f * F + row.ω * Ω;
|
61 |
|
62 | var _base$sincos = _base2.default.sincos(arg),
|
63 | _base$sincos2 = _slicedToArray(_base$sincos, 2),
|
64 | s = _base$sincos2[0],
|
65 | c = _base$sincos2[1];
|
66 |
|
67 | Δψ += s * (row.s0 + row.s1 * T);
|
68 | Δε += c * (row.c0 + row.c1 * T);
|
69 | }
|
70 | Δψ *= 0.0001 / 3600 * (Math.PI / 180);
|
71 | Δε *= 0.0001 / 3600 * (Math.PI / 180);
|
72 | return [Δψ, Δε]; // (Δψ, Δε float)
|
73 | }
|
74 | /**
|
75 | * ApproxNutation returns a fast approximation of nutation in longitude (Δψ)
|
76 | * and nutation in obliquity (Δε) for a given JDE.
|
77 | *
|
78 | * Accuracy is 0.5″ in Δψ, 0.1″ in Δε.
|
79 | *
|
80 | * Result units are radians.
|
81 | *
|
82 | * @param {number} jde - Julian ephemeris day
|
83 | * @return {number[]} [Δψ, Δε] - [longitude, obliquity] in radians
|
84 | */
|
85 | function approxNutation(jde) {
|
86 | var T = (jde - _base2.default.J2000) / 36525;
|
87 | var Ω = (125.04452 - 1934.136261 * T) * Math.PI / 180;
|
88 | var L = (280.4665 + 36000.7698 * T) * Math.PI / 180;
|
89 | var N = (218.3165 + 481267.8813 * T) * Math.PI / 180;
|
90 |
|
91 | var _base$sincos3 = _base2.default.sincos(Ω),
|
92 | _base$sincos4 = _slicedToArray(_base$sincos3, 2),
|
93 | sΩ = _base$sincos4[0],
|
94 | cΩ = _base$sincos4[1];
|
95 |
|
96 | var _base$sincos5 = _base2.default.sincos(2 * L),
|
97 | _base$sincos6 = _slicedToArray(_base$sincos5, 2),
|
98 | s2L = _base$sincos6[0],
|
99 | c2L = _base$sincos6[1];
|
100 |
|
101 | var _base$sincos7 = _base2.default.sincos(2 * N),
|
102 | _base$sincos8 = _slicedToArray(_base$sincos7, 2),
|
103 | s2N = _base$sincos8[0],
|
104 | c2N = _base$sincos8[1];
|
105 |
|
106 | var _base$sincos9 = _base2.default.sincos(2 * Ω),
|
107 | _base$sincos10 = _slicedToArray(_base$sincos9, 2),
|
108 | s2Ω = _base$sincos10[0],
|
109 | c2Ω = _base$sincos10[1];
|
110 |
|
111 | var Δψ = (-17.2 * sΩ - 1.32 * s2L - 0.23 * s2N + 0.21 * s2Ω) / 3600 * (Math.PI / 180);
|
112 | var Δε = (9.2 * cΩ + 0.57 * c2L + 0.1 * c2N - 0.09 * c2Ω) / 3600 * (Math.PI / 180);
|
113 | return [Δψ, Δε]; // (Δψ, Δε float)
|
114 | }
|
115 |
|
116 | /**
|
117 | * MeanObliquity returns mean obliquity (ε₀) following the IAU 1980
|
118 | * polynomial.
|
119 | *
|
120 | * Accuracy is 1″ over the range 1000 to 3000 years and 10″ over the range
|
121 | * 0 to 4000 years.
|
122 | *
|
123 | * Result unit is radians.
|
124 | *
|
125 | * @param {number} jde - Julian ephemeris day
|
126 | * @return {number} mean obliquity (ε₀)
|
127 | */
|
128 | function meanObliquity(jde) {
|
129 | // (22.2) p. 147
|
130 | return _base2.default.horner(_base2.default.J2000Century(jde), new _sexagesimal2.default.Angle(false, 23, 26, 21.448).rad(), -46.815 / 3600 * (Math.PI / 180), -0.00059 / 3600 * (Math.PI / 180), 0.001813 / 3600 * (Math.PI / 180));
|
131 | }
|
132 |
|
133 | /**
|
134 | * MeanObliquityLaskar returns mean obliquity (ε₀) following the Laskar
|
135 | * 1986 polynomial.
|
136 | *
|
137 | * Accuracy over the range 1000 to 3000 years is .01″.
|
138 | *
|
139 | * Accuracy over the valid date range of -8000 to +12000 years is
|
140 | * "a few seconds."
|
141 | *
|
142 | * Result unit is radians.
|
143 | *
|
144 | * @param {number} jde - Julian ephemeris day
|
145 | * @return {number} mean obliquity (ε₀)
|
146 | */
|
147 | function meanObliquityLaskar(jde) {
|
148 | // (22.3) p. 147
|
149 | return _base2.default.horner(_base2.default.J2000Century(jde) * 0.01, new _sexagesimal2.default.Angle(false, 23, 26, 21.448).rad(), -4680.93 / 3600 * (Math.PI / 180), -1.55 / 3600 * (Math.PI / 180), 1999.25 / 3600 * (Math.PI / 180), -51.38 / 3600 * (Math.PI / 180), -249.67 / 3600 * (Math.PI / 180), -39.05 / 3600 * (Math.PI / 180), 7.12 / 3600 * (Math.PI / 180), 27.87 / 3600 * (Math.PI / 180), 5.79 / 3600 * (Math.PI / 180), 2.45 / 3600 * (Math.PI / 180));
|
150 | }
|
151 |
|
152 | /**
|
153 | * NutationInRA returns "nutation in right ascension" or "equation of the
|
154 | * equinoxes."
|
155 | *
|
156 | * Result is an angle in radians.
|
157 | *
|
158 | * @param {number} jde - Julian ephemeris day
|
159 | * @return {number} nutation in right ascension
|
160 | */
|
161 | function nutationInRA(jde) {
|
162 | var _nutation = nutation(jde),
|
163 | _nutation2 = _slicedToArray(_nutation, 2),
|
164 | Δψ = _nutation2[0],
|
165 | Δε = _nutation2[1];
|
166 |
|
167 | var ε0 = meanObliquity(jde);
|
168 | return Δψ * Math.cos(ε0 + Δε);
|
169 | }
|
170 |
|
171 | var table22A = function () {
|
172 | var PROPS = 'd,m,n,f,ω,s0,s1,c0,c1'.split(',');
|
173 | var tab = [[0, 0, 0, 0, 1, -171996, -174.2, 92025, 8.9], [-2, 0, 0, 2, 2, -13187, -1.6, 5736, -3.1], [0, 0, 0, 2, 2, -2274, -0.2, 977, -0.5], [0, 0, 0, 0, 2, 2062, 0.2, -895, 0.5], [0, 1, 0, 0, 0, 1426, -3.4, 54, -0.1], [0, 0, 1, 0, 0, 712, 0.1, -7, 0], [-2, 1, 0, 2, 2, -517, 1.2, 224, -0.6], [0, 0, 0, 2, 1, -386, -0.4, 200, 0], [0, 0, 1, 2, 2, -301, 0, 129, -0.1], [-2, -1, 0, 2, 2, 217, -0.5, -95, 0.3], [-2, 0, 1, 0, 0, -158, 0, 0, 0], [-2, 0, 0, 2, 1, 129, 0.1, -70, 0], [0, 0, -1, 2, 2, 123, 0, -53, 0], [2, 0, 0, 0, 0, 63, 0, 0, 0], [0, 0, 1, 0, 1, 63, 0.1, -33, 0], [2, 0, -1, 2, 2, -59, 0, 26, 0], [0, 0, -1, 0, 1, -58, -0.1, 32, 0], [0, 0, 1, 2, 1, -51, 0, 27, 0], [-2, 0, 2, 0, 0, 48, 0, 0, 0], [0, 0, -2, 2, 1, 46, 0, -24, 0], [2, 0, 0, 2, 2, -38, 0, 16, 0], [0, 0, 2, 2, 2, -31, 0, 13, 0], [0, 0, 2, 0, 0, 29, 0, 0, 0], [-2, 0, 1, 2, 2, 29, 0, -12, 0], [0, 0, 0, 2, 0, 26, 0, 0, 0], [-2, 0, 0, 2, 0, -22, 0, 0, 0], [0, 0, -1, 2, 1, 21, 0, -10, 0], [0, 2, 0, 0, 0, 17, -0.1, 0, 0], [2, 0, -1, 0, 1, 16, 0, -8, 0], [-2, 2, 0, 2, 2, -16, 0.1, 7, 0], [0, 1, 0, 0, 1, -15, 0, 9, 0], [-2, 0, 1, 0, 1, -13, 0, 7, 0], [0, -1, 0, 0, 1, -12, 0, 6, 0], [0, 0, 2, -2, 0, 11, 0, 0, 0], [2, 0, -1, 2, 1, -10, 0, 5, 0], [2, 0, 1, 2, 2, -8, 0, 3, 0], [0, 1, 0, 2, 2, 7, 0, -3, 0], [-2, 1, 1, 0, 0, -7, 0, 0, 0], [0, -1, 0, 2, 2, -7, 0, 3, 0], [2, 0, 0, 2, 1, -7, 0, 3, 0], [2, 0, 1, 0, 0, 6, 0, 0, 0], [-2, 0, 2, 2, 2, 6, 0, -3, 0], [-2, 0, 1, 2, 1, 6, 0, -3, 0], [2, 0, -2, 0, 1, -6, 0, 3, 0], [2, 0, 0, 0, 1, -6, 0, 3, 0], [0, -1, 1, 0, 0, 5, 0, 0, 0], [-2, -1, 0, 2, 1, -5, 0, 3, 0], [-2, 0, 0, 0, 1, -5, 0, 3, 0], [0, 0, 2, 2, 1, -5, 0, 3, 0], [-2, 0, 2, 0, 1, 4, 0, 0, 0], [-2, 1, 0, 2, 1, 4, 0, 0, 0], [0, 0, 1, -2, 0, 4, 0, 0, 0], [-1, 0, 1, 0, 0, -4, 0, 0, 0], [-2, 1, 0, 0, 0, -4, 0, 0, 0], [1, 0, 0, 0, 0, -4, 0, 0, 0], [0, 0, 1, 2, 0, 3, 0, 0, 0], [0, 0, -2, 2, 2, -3, 0, 0, 0], [-1, -1, 1, 0, 0, -3, 0, 0, 0], [0, 1, 1, 0, 0, -3, 0, 0, 0], [0, -1, 1, 2, 2, -3, 0, 0, 0], [2, -1, -1, 2, 2, -3, 0, 0, 0], [0, 0, 3, 2, 2, -3, 0, 0, 0], [2, -1, 0, 2, 2, -3, 0, 0, 0]];
|
174 |
|
175 | return tab.map(function (row) {
|
176 | var o = {};
|
177 | PROPS.forEach(function (p, i) {
|
178 | o[p] = row[i];
|
179 | });
|
180 | return o;
|
181 | });
|
182 | }();
|
183 |
|
184 | exports.default = {
|
185 | nutation: nutation,
|
186 | approxNutation: approxNutation,
|
187 | meanObliquity: meanObliquity,
|
188 | meanObliquityLaskar: meanObliquityLaskar,
|
189 | nutationInRA: nutationInRA
|
190 | }; |
\ | No newline at end of file |