UNPKG

12.5 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 moonposition
12 */
13/**
14 * Moonposition: Chapter 47, Position of the Moon.
15 */
16
17exports.parallax = parallax;
18exports.position = position;
19exports.node = node;
20exports.perigee = perigee;
21exports.trueNode = trueNode;
22
23var _base = require('./base');
24
25var _base2 = _interopRequireDefault(_base);
26
27function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
29var asin = Math.asin,
30 sin = Math.sin;
31
32var D2R = Math.PI / 180;
33
34var EARTH_RADIUS = 6378.137; // km
35
36/**
37 * parallax returns equatorial horizontal parallax of the Moon.
38 *
39 * @param {Number} distance - distance between centers of the Earth and Moon, in km.
40 * @returns {Number} Result in radians.
41 */
42function parallax(distance) {
43 // p. 337
44 return asin(EARTH_RADIUS / distance);
45}
46
47function dmf(T) {
48 var d = _base2.default.horner(T, 297.8501921 * D2R, 445267.1114034 * D2R, -0.0018819 * D2R, D2R / 545868, -D2R / 113065000);
49 var m = _base2.default.horner(T, 357.5291092 * D2R, 35999.0502909 * D2R, -0.0001535 * D2R, D2R / 24490000);
50 var m_ = _base2.default.horner(T, 134.9633964 * D2R, 477198.8675055 * D2R, 0.0087414 * D2R, D2R / 69699, -D2R / 14712000);
51 var f = _base2.default.horner(T, 93.272095 * D2R, 483202.0175233 * D2R, -0.0036539 * D2R, -D2R / 3526000, D2R / 863310000);
52 return [d, m, m_, f];
53}
54
55/**
56 * position returns geocentric location of the Moon.
57 *
58 * Results are referenced to mean equinox of date and do not include
59 * the effect of nutation.
60 *
61 * @param {number} jde - Julian ephemeris day
62 * @returns {base.Coord}
63 * {number} lon - Geocentric longitude λ, in radians.
64 * {number} lat - Geocentric latitude β, in radians.
65 * {number} range - Distance Δ between centers of the Earth and Moon, in km.
66 */
67function position(jde) {
68 var T = _base2.default.J2000Century(jde);
69 var l_ = _base2.default.horner(T, 218.3164477 * D2R, 481267.88123421 * D2R, -0.0015786 * D2R, D2R / 538841, -D2R / 65194000);
70
71 var _dmf = dmf(T),
72 _dmf2 = _slicedToArray(_dmf, 4),
73 d = _dmf2[0],
74 m = _dmf2[1],
75 m_ = _dmf2[2],
76 f = _dmf2[3];
77
78 var a1 = 119.75 * D2R + 131.849 * D2R * T;
79 var a2 = 53.09 * D2R + 479264.29 * D2R * T;
80 var a3 = 313.45 * D2R + 481266.484 * D2R * T;
81 var e = _base2.default.horner(T, 1, -0.002516, -0.0000074);
82 var e2 = e * e;
83 var Σl = 3958 * sin(a1) + 1962 * sin(l_ - f) + 318 * sin(a2);
84 var Σr = 0.0;
85 var Σb = -2235 * sin(l_) + 382 * sin(a3) + 175 * sin(a1 - f) + 175 * sin(a1 + f) + 127 * sin(l_ - m_) - 115 * sin(l_ + m_);
86 ta.forEach(function (r) {
87 var _base$sincos = _base2.default.sincos(d * r.d + m * r.m + m_ * r.m_ + f * r.f),
88 _base$sincos2 = _slicedToArray(_base$sincos, 2),
89 sina = _base$sincos2[0],
90 cosa = _base$sincos2[1];
91
92 switch (r.m) {
93 case 0:
94 Σl += r.Σl * sina;
95 Σr += r.Σr * cosa;
96 break;
97 case -1:
98 case 1:
99 Σl += r.Σl * sina * e;
100 Σr += r.Σr * cosa * e;
101 break;
102 case -2:
103 case 2:
104 Σl += r.Σl * sina * e2;
105 Σr += r.Σr * cosa * e2;
106 break;
107 }
108 });
109
110 tb.forEach(function (r) {
111 var sb = sin(d * r.d + m * r.m + m_ * r.m_ + f * r.f);
112 switch (r.m) {
113 case 0:
114 Σb += r.Σb * sb;
115 break;
116 case -1:
117 case 1:
118 Σb += r.Σb * sb * e;
119 break;
120 case -2:
121 case 2:
122 Σb += r.Σb * sb * e2;
123 break;
124 }
125 });
126 var lon = _base2.default.pmod(l_, 2 * Math.PI) + Σl * 1e-6 * D2R;
127 var lat = Σb * 1e-6 * D2R;
128 var range = 385000.56 + Σr * 1e-3;
129 return new _base2.default.Coord(lon, lat, range);
130}
131
132var ta = function () {
133 var ta = [[0, 0, 1, 0, 6288774, -20905355], [2, 0, -1, 0, 1274027, -3699111], [2, 0, 0, 0, 658314, -2955968], [0, 0, 2, 0, 213618, -569925], [0, 1, 0, 0, -185116, 48888], [0, 0, 0, 2, -114332, -3149], [2, 0, -2, 0, 58793, 246158], [2, -1, -1, 0, 57066, -152138], [2, 0, 1, 0, 53322, -170733], [2, -1, 0, 0, 45758, -204586], [0, 1, -1, 0, -40923, -129620], [1, 0, 0, 0, -34720, 108743], [0, 1, 1, 0, -30383, 104755], [2, 0, 0, -2, 15327, 10321], [0, 0, 1, 2, -12528, 0], [0, 0, 1, -2, 10980, 79661], [4, 0, -1, 0, 10675, -34782], [0, 0, 3, 0, 10034, -23210], [4, 0, -2, 0, 8548, -21636], [2, 1, -1, 0, -7888, 24208], [2, 1, 0, 0, -6766, 30824], [1, 0, -1, 0, -5163, -8379], [1, 1, 0, 0, 4987, -16675], [2, -1, 1, 0, 4036, -12831], [2, 0, 2, 0, 3994, -10445], [4, 0, 0, 0, 3861, -11650], [2, 0, -3, 0, 3665, 14403], [0, 1, -2, 0, -2689, -7003], [2, 0, -1, 2, -2602, 0], [2, -1, -2, 0, 2390, 10056], [1, 0, 1, 0, -2348, 6322], [2, -2, 0, 0, 2236, -9884], [0, 1, 2, 0, -2120, 5751], [0, 2, 0, 0, -2069, 0], [2, -2, -1, 0, 2048, -4950], [2, 0, 1, -2, -1773, 4130], [2, 0, 0, 2, -1595, 0], [4, -1, -1, 0, 1215, -3958], [0, 0, 2, 2, -1110, 0], [3, 0, -1, 0, -892, 3258], [2, 1, 1, 0, -810, 2616], [4, -1, -2, 0, 759, -1897], [0, 2, -1, 0, -713, -2117], [2, 2, -1, 0, -700, 2354], [2, 1, -2, 0, 691, 0], [2, -1, 0, -2, 596, 0], [4, 0, 1, 0, 549, -1423], [0, 0, 4, 0, 537, -1117], [4, -1, 0, 0, 520, -1571], [1, 0, -2, 0, -487, -1739], [2, 1, 0, -2, -399, 0], [0, 0, 2, -2, -381, -4421], [1, 1, 1, 0, 351, 0], [3, 0, -2, 0, -340, 0], [4, 0, -3, 0, 330, 0], [2, -1, 2, 0, 327, 0], [0, 2, 1, 0, -323, 1165], [1, 1, -1, 0, 299, 0], [2, 0, 3, 0, 294, 0], [2, 0, -1, -2, 0, 8752]];
134 return ta.map(function (row) {
135 var o = {};['d', 'm', 'm_', 'f', 'Σl', 'Σr'].map(function (D2R, i) {
136 o[D2R] = row[i];
137 });
138 return o;
139 });
140}();
141
142var tb = function () {
143 var tb = [[0, 0, 0, 1, 5128122], [0, 0, 1, 1, 280602], [0, 0, 1, -1, 277693], [2, 0, 0, -1, 173237], [2, 0, -1, 1, 55413], [2, 0, -1, -1, 46271], [2, 0, 0, 1, 32573], [0, 0, 2, 1, 17198], [2, 0, 1, -1, 9266], [0, 0, 2, -1, 8822], [2, -1, 0, -1, 8216], [2, 0, -2, -1, 4324], [2, 0, 1, 1, 4200], [2, 1, 0, -1, -3359], [2, -1, -1, 1, 2463], [2, -1, 0, 1, 2211], [2, -1, -1, -1, 2065], [0, 1, -1, -1, -1870], [4, 0, -1, -1, 1828], [0, 1, 0, 1, -1794], [0, 0, 0, 3, -1749], [0, 1, -1, 1, -1565], [1, 0, 0, 1, -1491], [0, 1, 1, 1, -1475], [0, 1, 1, -1, -1410], [0, 1, 0, -1, -1344], [1, 0, 0, -1, -1335], [0, 0, 3, 1, 1107], [4, 0, 0, -1, 1021], [4, 0, -1, 1, 833], [0, 0, 1, -3, 777], [4, 0, -2, 1, 671], [2, 0, 0, -3, 607], [2, 0, 2, -1, 596], [2, -1, 1, -1, 491], [2, 0, -2, 1, -451], [0, 0, 3, -1, 439], [2, 0, 2, 1, 422], [2, 0, -3, -1, 421], [2, 1, -1, 1, -366], [2, 1, 0, 1, -351], [4, 0, 0, 1, 331], [2, -1, 1, 1, 315], [2, -2, 0, -1, 302], [0, 0, 1, 3, -283], [2, 1, 1, -1, -229], [1, 1, 0, -1, 223], [1, 1, 0, 1, 223], [0, 1, -2, -1, -220], [2, 1, -1, -1, -220], [1, 0, 1, 1, -185], [2, -1, -2, -1, 181], [0, 1, 2, 1, -177], [4, 0, -2, -1, 176], [4, -1, -1, -1, 166], [1, 0, 1, -1, -164], [4, 0, 1, -1, 132], [1, 0, -1, -1, -119], [4, -1, 0, -1, 115], [2, -2, 0, 1, 107]];
144 return tb.map(function (row) {
145 var o = {};['d', 'm', 'm_', 'f', 'Σb'].map(function (D2R, i) {
146 o[D2R] = row[i];
147 });
148 return o;
149 });
150}();
151
152/**
153 * Node returns longitude of the mean ascending node of the lunar orbit.
154 *
155 * @param {number} jde - Julian ephemeris day
156 * @returns result in radians.
157 */
158function node(jde) {
159 return _base2.default.pmod(_base2.default.horner(_base2.default.J2000Century(jde), 125.0445479 * D2R, -1934.1362891 * D2R, 0.0020754 * D2R, D2R / 467441, -D2R / 60616000), 2 * Math.PI);
160}
161
162/**
163 * perigee returns longitude of perigee of the lunar orbit.
164 *
165 * @param {number} jde - Julian ephemeris day
166 * @returns result in radians.
167 */
168function perigee(jde) {
169 return _base2.default.pmod(_base2.default.horner(_base2.default.J2000Century(jde), 83.3532465 * D2R, 4069.0137287 * D2R, -0.01032 * D2R, -D2R / 80053, D2R / 18999000), 2 * Math.PI);
170}
171
172/**
173 * trueNode returns longitude of the true ascending node.
174 *
175 * That is, the node of the instantaneous lunar orbit.
176 *
177 * @param {number} jde - Julian ephemeris day
178 * @returns result in radians.
179 */
180function trueNode(jde) {
181 var _dmf3 = dmf(_base2.default.J2000Century(jde)),
182 _dmf4 = _slicedToArray(_dmf3, 4),
183 d = _dmf4[0],
184 m = _dmf4[1],
185 m_ = _dmf4[2],
186 f = _dmf4[3];
187
188 return node(jde) + -1.4979 * D2R * sin(2 * (d - f)) + -0.15 * D2R * sin(m) + -0.1226 * D2R * sin(2 * d) + 0.1176 * D2R * sin(2 * f) + -0.0801 * D2R * sin(2 * (m_ - f));
189}
190
191exports.default = {
192 parallax: parallax,
193 position: position,
194 node: node,
195 perigee: perigee,
196 trueNode: trueNode
197};
\No newline at end of file