UNPKG

6.93 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 solardisk
12 */
13/**
14 * Solardisk: Chapter 29, Ephemeris for Physical Observations of the Sun.
15 */
16
17exports.ephemeris = ephemeris;
18exports.cycle = cycle;
19
20var _base = require('./base');
21
22var _base2 = _interopRequireDefault(_base);
23
24var _nutation = require('./nutation');
25
26var _nutation2 = _interopRequireDefault(_nutation);
27
28var _solar = require('./solar');
29
30var _solar2 = _interopRequireDefault(_solar);
31
32function _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 */
44function 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 */
90function 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
103exports.default = {
104 ephemeris: ephemeris,
105 cycle: cycle
106};
\No newline at end of file