UNPKG

5.61 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.Elements = undefined;
7
8var _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"); } }; }();
9
10var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
11
12exports.reduceB1950ToJ2000 = reduceB1950ToJ2000;
13exports.reduceB1950FK4ToJ2000FK5 = reduceB1950FK4ToJ2000FK5;
14
15var _base = require('./base');
16
17var _base2 = _interopRequireDefault(_base);
18
19function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
21function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /**
22 * @copyright 2013 Sonia Keys
23 * @copyright 2016 commenthol
24 * @license MIT
25 * @module elementequinox
26 */
27/**
28 * Elementequinox: Chapter 24, Reduction of Ecliptical Elements
29 * from one Equinox to another one.
30 *
31 * See package precess for the method EclipticPrecessor.ReduceElements and
32 * associated example. The method is described in this chapter but located
33 * in package precess so that it can be a method of EclipticPrecessor.
34 */
35
36/**
37 * Elements are the orbital elements of a solar system object which change
38 * from one equinox to another.
39 *
40 * @param {Number} inc - inclination
41 * @param {Number} node - longitude of ascending node (Ω)
42 * @param {Number} peri - argument of perihelion (ω)
43 */
44var Elements = exports.Elements = function Elements(inc, node, peri) {
45 _classCallCheck(this, Elements);
46
47 if ((typeof inc === 'undefined' ? 'undefined' : _typeof(inc)) === 'object') {
48 node = inc.pode;
49 peri = inc.peri;
50 inc = inc.inc;
51 }
52 this.inc = inc || 0;
53 this.node = node || 0;
54 this.peri = peri || 0;
55};
56
57// (24.4) p. 161
58
59
60var S = 0.0001139788;
61var C = 0.9999999935;
62/**
63 * ReduceB1950ToJ2000 reduces orbital elements of a solar system body from
64 * equinox B1950 to J2000.
65 *
66 * @param {Elements} eFrom
67 * @returns {Elements} eTo
68 */
69function reduceB1950ToJ2000(eFrom) {
70 var W = eFrom.node - 174.298782 * Math.PI / 180;
71
72 var _base$sincos = _base2.default.sincos(eFrom.inc),
73 _base$sincos2 = _slicedToArray(_base$sincos, 2),
74 si = _base$sincos2[0],
75 ci = _base$sincos2[1];
76
77 var _base$sincos3 = _base2.default.sincos(W),
78 _base$sincos4 = _slicedToArray(_base$sincos3, 2),
79 sW = _base$sincos4[0],
80 cW = _base$sincos4[1];
81
82 var A = si * sW;
83 var B = C * si * cW - S * ci;
84 var eTo = new Elements();
85 eTo.inc = Math.asin(Math.hypot(A, B));
86 eTo.node = _base2.default.pmod(174.997194 * Math.PI / 180 + Math.atan2(A, B), 2 * Math.PI);
87 eTo.peri = _base2.default.pmod(eFrom.peri + Math.atan2(-S * sW, C * si - S * ci * cW), 2 * Math.PI);
88 return eTo;
89}
90
91var Lp = 4.50001688 * Math.PI / 180;
92var L = 5.19856209 * Math.PI / 180;
93var J = 0.00651966 * Math.PI / 180;
94
95/**
96 * ReduceB1950ToJ2000 reduces orbital elements of a solar system body from
97 * equinox B1950 in the FK4 system to equinox J2000 in the FK5 system.
98 *
99 * @param {Elements} eFrom
100 * @returns {Elements} eTo
101 */
102function reduceB1950FK4ToJ2000FK5(eFrom) {
103 var W = L + eFrom.node;
104
105 var _base$sincos5 = _base2.default.sincos(eFrom.inc),
106 _base$sincos6 = _slicedToArray(_base$sincos5, 2),
107 si = _base$sincos6[0],
108 ci = _base$sincos6[1];
109
110 var _base$sincos7 = _base2.default.sincos(J),
111 _base$sincos8 = _slicedToArray(_base$sincos7, 2),
112 sJ = _base$sincos8[0],
113 cJ = _base$sincos8[1];
114
115 var _base$sincos9 = _base2.default.sincos(W),
116 _base$sincos10 = _slicedToArray(_base$sincos9, 2),
117 sW = _base$sincos10[0],
118 cW = _base$sincos10[1];
119
120 var eTo = new Elements();
121 eTo.inc = Math.acos(ci * cJ - si * sJ * cW);
122 eTo.node = _base2.default.pmod(Math.atan2(si * sW, ci * sJ + si * cJ * cW) - Lp, 2 * Math.PI);
123 eTo.peri = _base2.default.pmod(eFrom.peri + Math.atan2(sJ * sW, si * cJ + ci * sJ * cW), 2 * Math.PI);
124 return eTo;
125}
126
127exports.default = {
128 Elements: Elements,
129 reduceB1950ToJ2000: reduceB1950ToJ2000,
130 reduceB1950FK4ToJ2000FK5: reduceB1950FK4ToJ2000FK5
131};
\No newline at end of file