1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.EclipticPrecessor = exports.Precessor = undefined;
|
7 |
|
8 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
9 |
|
10 | 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"); } }; }(); |
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 | exports.approxAnnualPrecession = approxAnnualPrecession;
|
56 | exports.mn = mn;
|
57 | exports.approxPosition = approxPosition;
|
58 | exports.position = position;
|
59 | exports.eclipticPosition = eclipticPosition;
|
60 | exports.properMotion = properMotion;
|
61 | exports.properMotion3D = properMotion3D;
|
62 |
|
63 | var _base = require('./base');
|
64 |
|
65 | var _base2 = _interopRequireDefault(_base);
|
66 |
|
67 | var _coord = require('./coord');
|
68 |
|
69 | var _coord2 = _interopRequireDefault(_coord);
|
70 |
|
71 | var _elementequinox = require('./elementequinox');
|
72 |
|
73 | var _elementequinox2 = _interopRequireDefault(_elementequinox);
|
74 |
|
75 | var _nutation = require('./nutation');
|
76 |
|
77 | var _nutation2 = _interopRequireDefault(_nutation);
|
78 |
|
79 | var _sexagesimal = require('./sexagesimal');
|
80 |
|
81 | var _sexagesimal2 = _interopRequireDefault(_sexagesimal);
|
82 |
|
83 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
84 |
|
85 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 | function approxAnnualPrecession(eqFrom, epochFrom, epochTo) {
|
102 | var _mn = mn(epochFrom, epochTo),
|
103 | _mn2 = _slicedToArray(_mn, 3),
|
104 | m = _mn2[0],
|
105 | na = _mn2[1],
|
106 | nd = _mn2[2];
|
107 |
|
108 | var _base$sincos = _base2.default.sincos(eqFrom.ra),
|
109 | _base$sincos2 = _slicedToArray(_base$sincos, 2),
|
110 | sa = _base$sincos2[0],
|
111 | ca = _base$sincos2[1];
|
112 |
|
113 |
|
114 |
|
115 | var Δαs = m + na * sa * Math.tan(eqFrom.dec);
|
116 | var Δδs = nd * ca;
|
117 | var ra = new _sexagesimal2.default.HourAngle(false, 0, 0, Δαs).rad();
|
118 | var dec = new _sexagesimal2.default.Angle(false, 0, 0, Δδs).rad();
|
119 | return { ra: ra, dec: dec };
|
120 | }
|
121 |
|
122 |
|
123 |
|
124 |
|
125 |
|
126 | function mn(epochFrom, epochTo) {
|
127 | var T = (epochTo - epochFrom) * 0.01;
|
128 | var m = 3.07496 + 0.00186 * T;
|
129 | var na = 1.33621 - 0.00057 * T;
|
130 | var nd = 20.0431 - 0.0085 * T;
|
131 | return [m, na, nd];
|
132 | }
|
133 |
|
134 |
|
135 |
|
136 |
|
137 |
|
138 |
|
139 |
|
140 |
|
141 |
|
142 |
|
143 |
|
144 |
|
145 | function approxPosition(eqFrom, epochFrom, epochTo, mα, mδ) {
|
146 | var _approxAnnualPrecessi = approxAnnualPrecession(eqFrom, epochFrom, epochTo),
|
147 | ra = _approxAnnualPrecessi.ra,
|
148 | dec = _approxAnnualPrecessi.dec;
|
149 |
|
150 | var dy = epochTo - epochFrom;
|
151 | var eqTo = new _coord2.default.Equatorial();
|
152 | eqTo.ra = eqFrom.ra + (ra + mα) * dy;
|
153 | eqTo.dec = eqFrom.dec + (dec + mδ) * dy;
|
154 | return eqTo;
|
155 | }
|
156 |
|
157 |
|
158 | var d = Math.PI / 180;
|
159 | var s = d / 3600;
|
160 |
|
161 |
|
162 | var ζT = [2306.2181 * s, 1.39656 * s, -0.000139 * s];
|
163 | var zT = [2306.2181 * s, 1.39656 * s, -0.000139 * s];
|
164 | var θT = [2004.3109 * s, -0.8533 * s, -0.000217 * s];
|
165 |
|
166 | var ζt = [2306.2181 * s, 0.30188 * s, 0.017998 * s];
|
167 | var zt = [2306.2181 * s, 1.09468 * s, 0.018203 * s];
|
168 | var θt = [2004.3109 * s, -0.42665 * s, -0.041833 * s];
|
169 |
|
170 |
|
171 |
|
172 |
|
173 |
|
174 |
|
175 |
|
176 |
|
177 |
|
178 | var Precessor = exports.Precessor = function () {
|
179 | |
180 |
|
181 |
|
182 |
|
183 |
|
184 |
|
185 | function Precessor(epochFrom, epochTo) {
|
186 | _classCallCheck(this, Precessor);
|
187 |
|
188 |
|
189 | var ζCoeff = ζt;
|
190 | var zCoeff = zt;
|
191 | var θCoeff = θt;
|
192 | if (epochFrom !== 2000) {
|
193 | var T = (epochFrom - 2000) * 0.01;
|
194 | ζCoeff = [_base2.default.horner(T, ζT), 0.30188 * s - 0.000344 * s * T, 0.017998 * s];
|
195 | zCoeff = [_base2.default.horner(T, zT), 1.09468 * s + 0.000066 * s * T, 0.018203 * s];
|
196 | θCoeff = [_base2.default.horner(T, θT), -0.42665 * s - 0.000217 * s * T, -0.041833 * s];
|
197 | }
|
198 | var t = (epochTo - epochFrom) * 0.01;
|
199 | this.ζ = _base2.default.horner(t, ζCoeff) * t;
|
200 | this.z = _base2.default.horner(t, zCoeff) * t;
|
201 | var θ = _base2.default.horner(t, θCoeff) * t;
|
202 | this.sθ = Math.sin(θ);
|
203 | this.cθ = Math.cos(θ);
|
204 | }
|
205 |
|
206 | |
207 |
|
208 |
|
209 |
|
210 |
|
211 |
|
212 |
|
213 |
|
214 | _createClass(Precessor, [{
|
215 | key: 'precess',
|
216 | value: function precess(eqFrom) {
|
217 |
|
218 | var _base$sincos3 = _base2.default.sincos(eqFrom.dec),
|
219 | _base$sincos4 = _slicedToArray(_base$sincos3, 2),
|
220 | sδ = _base$sincos4[0],
|
221 | cδ = _base$sincos4[1];
|
222 |
|
223 | var _base$sincos5 = _base2.default.sincos(eqFrom.ra + this.ζ),
|
224 | _base$sincos6 = _slicedToArray(_base$sincos5, 2),
|
225 | sαζ = _base$sincos6[0],
|
226 | cαζ = _base$sincos6[1];
|
227 |
|
228 | var A = cδ * sαζ;
|
229 | var B = this.cθ * cδ * cαζ - this.sθ * sδ;
|
230 | var C = this.sθ * cδ * cαζ + this.cθ * sδ;
|
231 | var eqTo = new _coord2.default.Equatorial();
|
232 | eqTo.ra = Math.atan2(A, B) + this.z;
|
233 | if (C < _base2.default.CosSmallAngle) {
|
234 | eqTo.dec = Math.asin(C);
|
235 | } else {
|
236 | eqTo.dec = Math.acos(Math.hypot(A, B));
|
237 | }
|
238 | return eqTo;
|
239 | }
|
240 | }]);
|
241 |
|
242 | return Precessor;
|
243 | }();
|
244 |
|
245 |
|
246 |
|
247 |
|
248 |
|
249 |
|
250 |
|
251 |
|
252 |
|
253 |
|
254 |
|
255 |
|
256 |
|
257 |
|
258 |
|
259 |
|
260 |
|
261 |
|
262 |
|
263 |
|
264 | function position(eqFrom, epochFrom, epochTo, mα, mδ) {
|
265 | var p = new Precessor(epochFrom, epochTo);
|
266 | var t = epochTo - epochFrom;
|
267 | var eqTo = new _coord2.default.Equatorial();
|
268 | eqTo.ra = eqFrom.ra + mα * t;
|
269 | eqTo.dec = eqFrom.dec + mδ * t;
|
270 | return p.precess(eqTo);
|
271 | }
|
272 |
|
273 |
|
274 | var ηT = [47.0029 * s, -0.06603 * s, 0.000598 * s];
|
275 | var πT = [174.876384 * d, 3289.4789 * s, 0.60622 * s];
|
276 | var pT = [5029.0966 * s, 2.22226 * s, -0.000042 * s];
|
277 | var ηt = [47.0029 * s, -0.03302 * s, 0.000060 * s];
|
278 | var πt = [174.876384 * d, -869.8089 * s, 0.03536 * s];
|
279 | var pt = [5029.0966 * s, 1.11113 * s, -0.000006 * s];
|
280 |
|
281 |
|
282 |
|
283 |
|
284 |
|
285 |
|
286 |
|
287 |
|
288 |
|
289 | var EclipticPrecessor = exports.EclipticPrecessor = function () {
|
290 | |
291 |
|
292 |
|
293 |
|
294 |
|
295 |
|
296 | function EclipticPrecessor(epochFrom, epochTo) {
|
297 | _classCallCheck(this, EclipticPrecessor);
|
298 |
|
299 |
|
300 | var ηCoeff = ηt;
|
301 | var πCoeff = πt;
|
302 | var pCoeff = pt;
|
303 | if (epochFrom !== 2000) {
|
304 | var T = (epochFrom - 2000) * 0.01;
|
305 | ηCoeff = [_base2.default.horner(T, ηT), -0.03302 * s + 0.000598 * s * T, 0.000060 * s];
|
306 | πCoeff = [_base2.default.horner(T, πT), -869.8089 * s - 0.50491 * s * T, 0.03536 * s];
|
307 | pCoeff = [_base2.default.horner(T, pT), 1.11113 * s - 0.000042 * s * T, -0.000006 * s];
|
308 | }
|
309 | var t = (epochTo - epochFrom) * 0.01;
|
310 | this.π = _base2.default.horner(t, πCoeff);
|
311 | this.p = _base2.default.horner(t, pCoeff) * t;
|
312 | var η = _base2.default.horner(t, ηCoeff) * t;
|
313 | this.sη = Math.sin(η);
|
314 | this.cη = Math.cos(η);
|
315 | }
|
316 |
|
317 | |
318 |
|
319 |
|
320 |
|
321 |
|
322 |
|
323 |
|
324 |
|
325 |
|
326 |
|
327 |
|
328 | _createClass(EclipticPrecessor, [{
|
329 | key: 'precess',
|
330 | value: function precess(eclFrom) {
|
331 |
|
332 | var _base$sincos7 = _base2.default.sincos(eclFrom.lat),
|
333 | _base$sincos8 = _slicedToArray(_base$sincos7, 2),
|
334 | sβ = _base$sincos8[0],
|
335 | cβ = _base$sincos8[1];
|
336 |
|
337 | var _base$sincos9 = _base2.default.sincos(this.π - eclFrom.lon),
|
338 | _base$sincos10 = _slicedToArray(_base$sincos9, 2),
|
339 | sd = _base$sincos10[0],
|
340 | cd = _base$sincos10[1];
|
341 |
|
342 | var A = this.cη * cβ * sd - this.sη * sβ;
|
343 | var B = cβ * cd;
|
344 | var C = this.cη * sβ + this.sη * cβ * sd;
|
345 | var eclTo = new _coord2.default.Ecliptic();
|
346 | eclTo.lon = this.p + this.π - Math.atan2(A, B);
|
347 | if (C < _base2.default.CosSmallAngle) {
|
348 | eclTo.lat = Math.asin(C);
|
349 | } else {
|
350 | eclTo.lat = Math.acos(Math.hypot(A, B));
|
351 | }
|
352 | return eclTo;
|
353 | }
|
354 |
|
355 | |
356 |
|
357 |
|
358 |
|
359 |
|
360 |
|
361 |
|
362 |
|
363 |
|
364 |
|
365 |
|
366 | }, {
|
367 | key: 'reduceElements',
|
368 | value: function reduceElements(eFrom) {
|
369 | var ψ = this.π + this.p;
|
370 |
|
371 | var _base$sincos11 = _base2.default.sincos(eFrom.inc),
|
372 | _base$sincos12 = _slicedToArray(_base$sincos11, 2),
|
373 | si = _base$sincos12[0],
|
374 | ci = _base$sincos12[1];
|
375 |
|
376 | var _base$sincos13 = _base2.default.sincos(eFrom.node - this.π),
|
377 | _base$sincos14 = _slicedToArray(_base$sincos13, 2),
|
378 | snp = _base$sincos14[0],
|
379 | cnp = _base$sincos14[1];
|
380 |
|
381 | var eTo = new _elementequinox2.default.Elements();
|
382 |
|
383 | eTo.inc = Math.acos(ci * this.cη + si * this.sη * cnp);
|
384 |
|
385 | eTo.node = Math.atan2(si * snp, this.cη * si * cnp - this.sη * ci) + ψ;
|
386 |
|
387 | eTo.peri = Math.atan2(-this.sη * snp, si * this.cη - ci * this.sη * cnp) + eFrom.peri;
|
388 | return eTo;
|
389 | }
|
390 | }]);
|
391 |
|
392 | return EclipticPrecessor;
|
393 | }();
|
394 |
|
395 |
|
396 |
|
397 |
|
398 |
|
399 |
|
400 |
|
401 |
|
402 |
|
403 |
|
404 |
|
405 |
|
406 |
|
407 |
|
408 |
|
409 |
|
410 |
|
411 |
|
412 |
|
413 | function eclipticPosition(eclFrom, epochFrom, epochTo, mα, mδ) {
|
414 | var p = new EclipticPrecessor(epochFrom, epochTo);
|
415 |
|
416 | if (mα !== 0 || mδ !== 0) {
|
417 | var _properMotion = properMotion(mα.rad(), mδ.rad(), epochFrom, eclFrom),
|
418 | lon = _properMotion.lon,
|
419 | lat = _properMotion.lat;
|
420 |
|
421 | var t = epochTo - epochFrom;
|
422 | eclFrom.lon += lon * t;
|
423 | eclFrom.lat += lat * t;
|
424 | }
|
425 | return p.precess(eclFrom);
|
426 | }
|
427 |
|
428 |
|
429 |
|
430 |
|
431 |
|
432 |
|
433 |
|
434 |
|
435 | function properMotion(mα, mδ, epoch, ecl) {
|
436 | var ε = _nutation2.default.meanObliquity(_base2.default.JulianYearToJDE(epoch));
|
437 |
|
438 | var _base$sincos15 = _base2.default.sincos(ε),
|
439 | _base$sincos16 = _slicedToArray(_base$sincos15, 2),
|
440 | εsin = _base$sincos16[0],
|
441 | εcos = _base$sincos16[1];
|
442 |
|
443 | var _ecl$toEquatorial = ecl.toEquatorial(ε),
|
444 | ra = _ecl$toEquatorial.ra,
|
445 | dec = _ecl$toEquatorial.dec;
|
446 |
|
447 | var _base$sincos17 = _base2.default.sincos(ra),
|
448 | _base$sincos18 = _slicedToArray(_base$sincos17, 2),
|
449 | sα = _base$sincos18[0],
|
450 | cα = _base$sincos18[1];
|
451 |
|
452 | var _base$sincos19 = _base2.default.sincos(dec),
|
453 | _base$sincos20 = _slicedToArray(_base$sincos19, 2),
|
454 | sδ = _base$sincos20[0],
|
455 | cδ = _base$sincos20[1];
|
456 |
|
457 | var cβ = Math.cos(ecl.lat);
|
458 | var lon = (mδ * εsin * cα + mα * cδ * (εcos * cδ + εsin * sδ * sα)) / (cβ * cβ);
|
459 | var lat = (mδ * (εcos * cδ + εsin * sδ * sα) - mα * εsin * cα * cδ) / cβ;
|
460 | return new _coord2.default.Ecliptic(lon, lat);
|
461 | }
|
462 |
|
463 |
|
464 |
|
465 |
|
466 |
|
467 |
|
468 |
|
469 |
|
470 |
|
471 |
|
472 |
|
473 |
|
474 |
|
475 |
|
476 |
|
477 |
|
478 |
|
479 |
|
480 |
|
481 |
|
482 | function properMotion3D(eqFrom, epochFrom, epochTo, r, mr, mα, mδ) {
|
483 | var _base$sincos21 = _base2.default.sincos(eqFrom.ra),
|
484 | _base$sincos22 = _slicedToArray(_base$sincos21, 2),
|
485 | sα = _base$sincos22[0],
|
486 | cα = _base$sincos22[1];
|
487 |
|
488 | var _base$sincos23 = _base2.default.sincos(eqFrom.dec),
|
489 | _base$sincos24 = _slicedToArray(_base$sincos23, 2),
|
490 | sδ = _base$sincos24[0],
|
491 | cδ = _base$sincos24[1];
|
492 |
|
493 | var x = r * cδ * cα;
|
494 | var y = r * cδ * sα;
|
495 | var z = r * sδ;
|
496 | var mrr = mr / r;
|
497 | var zmδ = z * mδ.rad();
|
498 | var mx = x * mrr - zmδ * cα - y * mα.rad();
|
499 | var my = y * mrr - zmδ * sα + x * mα.rad();
|
500 | var mz = z * mrr + r * mδ.rad() * cδ;
|
501 | var t = epochTo - epochFrom;
|
502 | var xp = x + t * mx;
|
503 | var yp = y + t * my;
|
504 | var zp = z + t * mz;
|
505 | var eqTo = new _coord2.default.Equatorial();
|
506 | eqTo.ra = Math.atan2(yp, xp);
|
507 | eqTo.dec = Math.atan2(zp, Math.hypot(xp, yp));
|
508 | return eqTo;
|
509 | }
|
510 |
|
511 | exports.default = {
|
512 | approxAnnualPrecession: approxAnnualPrecession,
|
513 | mn: mn,
|
514 | approxPosition: approxPosition,
|
515 | Precessor: Precessor,
|
516 | position: position,
|
517 | EclipticPrecessor: EclipticPrecessor,
|
518 | eclipticPosition: eclipticPosition,
|
519 | properMotion: properMotion,
|
520 | properMotion3D: properMotion3D
|
521 | }; |
\ | No newline at end of file |