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 solardisk
|
12 | */
|
13 | /**
|
14 | * Solardisk: Chapter 29, Ephemeris for Physical Observations of the Sun.
|
15 | */
|
16 |
|
17 | exports.ephemeris = ephemeris;
|
18 | exports.cycle = cycle;
|
19 |
|
20 | var _base = require('./base');
|
21 |
|
22 | var _base2 = _interopRequireDefault(_base);
|
23 |
|
24 | var _nutation = require('./nutation');
|
25 |
|
26 | var _nutation2 = _interopRequireDefault(_nutation);
|
27 |
|
28 | var _solar = require('./solar');
|
29 |
|
30 | var _solar2 = _interopRequireDefault(_solar);
|
31 |
|
32 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
33 |
|
34 | /**
|
35 | * Ephemeris returns the apparent orientation of the sun at the given jd.
|
36 | *
|
37 | * Results:
|
38 | * P: Position angle of the solar north pole.
|
39 | * B0: Heliographic latitude of the center of the solar disk.
|
40 | * L0: Heliographic longitude of the center of the solar disk.
|
41 | *
|
42 | * All results in radians.
|
43 | */
|
44 | function ephemeris(jd, earth) {
|
45 | // (jd float64, e *pp.V87Planet) (P, B0, L0 float64)
|
46 | var θ = (jd - 2398220) * 2 * Math.PI / 25.38;
|
47 | var I = 7.25 * Math.PI / 180;
|
48 | var K = 73.6667 * Math.PI / 180 + 1.3958333 * Math.PI / 180 * (jd - 2396758) / _base2.default.JulianCentury;
|
49 |
|
50 | var solarPos = _solar2.default.trueVSOP87(earth, jd);
|
51 | var L = solarPos.lon;
|
52 | var R = solarPos.range;
|
53 |
|
54 | var _nutation$nutation = _nutation2.default.nutation(jd),
|
55 | _nutation$nutation2 = _slicedToArray(_nutation$nutation, 2),
|
56 | Δψ = _nutation$nutation2[0],
|
57 | Δε = _nutation$nutation2[1];
|
58 |
|
59 | var ε0 = _nutation2.default.meanObliquity(jd);
|
60 | var ε = ε0 + Δε;
|
61 | var λ = L - 20.4898 / 3600 * Math.PI / 180 / R;
|
62 | var λp = λ + Δψ;
|
63 |
|
64 | var _base$sincos = _base2.default.sincos(λ - K),
|
65 | _base$sincos2 = _slicedToArray(_base$sincos, 2),
|
66 | sλK = _base$sincos2[0],
|
67 | cλK = _base$sincos2[1];
|
68 |
|
69 | var _base$sincos3 = _base2.default.sincos(I),
|
70 | _base$sincos4 = _slicedToArray(_base$sincos3, 2),
|
71 | sI = _base$sincos4[0],
|
72 | cI = _base$sincos4[1];
|
73 |
|
74 | var tx = -Math.cos(λp) * Math.tan(ε);
|
75 | var ty = -cλK * Math.tan(I);
|
76 | var P = Math.atan(tx) + Math.atan(ty);
|
77 | var B0 = Math.asin(sλK * sI);
|
78 | var η = Math.atan2(-sλK * cI, -cλK);
|
79 | var L0 = _base2.default.pmod(η - θ, 2 * Math.PI);
|
80 | return [P, B0, L0];
|
81 | }
|
82 |
|
83 | /**
|
84 | * Cycle returns the jd of the start of the given synodic rotation.
|
85 | *
|
86 | * Argument c is the "Carrington" cycle number.
|
87 | *
|
88 | * Result is a dynamical time (not UT).
|
89 | */
|
90 | function cycle(c) {
|
91 | // (c int) (jde float64)
|
92 | var jde = 2398140.227 + 27.2752316 * c;
|
93 | var m = 281.96 * Math.PI / 180 + 26.882476 * Math.PI / 180 * c;
|
94 |
|
95 | var _base$sincos5 = _base2.default.sincos(2 * m),
|
96 | _base$sincos6 = _slicedToArray(_base$sincos5, 2),
|
97 | s2m = _base$sincos6[0],
|
98 | c2m = _base$sincos6[1];
|
99 |
|
100 | return jde + 0.1454 * Math.sin(m) - 0.0085 * s2m - 0.0141 * c2m;
|
101 | }
|
102 |
|
103 | exports.default = {
|
104 | ephemeris: ephemeris,
|
105 | cycle: cycle
|
106 | }; |
\ | No newline at end of file |