UNPKG

12.1 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 mars
12 */
13/**
14 * Mars: Chapter 42, Ephemeris for Physical Observations of Mars.
15 */
16
17exports.physical = physical;
18
19var _base = require('./base');
20
21var _base2 = _interopRequireDefault(_base);
22
23var _coord = require('./coord');
24
25var _coord2 = _interopRequireDefault(_coord);
26
27var _illum = require('./illum');
28
29var _illum2 = _interopRequireDefault(_illum);
30
31var _nutation = require('./nutation');
32
33var _nutation2 = _interopRequireDefault(_nutation);
34
35var _planetposition = require('./planetposition');
36
37var _planetposition2 = _interopRequireDefault(_planetposition);
38
39function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
40
41/**
42 * Physical computes quantities for physical observations of Mars.
43 *
44 * Results:
45 * DE planetocentric declination of the Earth.
46 * DS planetocentric declination of the Sun.
47 * ω Areographic longitude of the central meridian, as seen from Earth.
48 * P Geocentric position angle of Mars' northern rotation pole.
49 * Q Position angle of greatest defect of illumination.
50 * d Apparent diameter of Mars.
51 * k Illuminated fraction of the disk.
52 * q Greatest defect of illumination.
53 *
54 * All angular results (all results except k) are in radians.
55 *
56 * @param {number} jde - Julian ephemeris day
57 * @param {planetposition.Planet} earth
58 * @param {planetposition.Planet} mars
59 */
60function physical(jde, earth, mars) {
61 // (jde float64, earth, mars *pp.V87Planet) (DE, DS, ω, P, Q, d, k, q float64)
62 // Step 1.0
63 var T = _base2.default.J2000Century(jde);
64 var p = Math.PI / 180;
65 // (42.1) p. 288
66 var λ0 = 352.9065 * p + 1.1733 * p * T;
67 var β0 = 63.2818 * p - 0.00394 * p * T;
68 // Step 2.0
69 var earthPos = earth.position(jde);
70 var R = earthPos.range;
71 var fk5 = _planetposition2.default.toFK5(earthPos.lon, earthPos.lat, jde);
72 var _ref = [fk5.lon, fk5.lat],
73 l0 = _ref[0],
74 b0 = _ref[1];
75 // Steps 3, 4.0
76
77 var _base$sincos = _base2.default.sincos(l0),
78 _base$sincos2 = _slicedToArray(_base$sincos, 2),
79 sl0 = _base$sincos2[0],
80 cl0 = _base$sincos2[1];
81
82 var sb0 = Math.sin(b0);
83 var Δ = 0.5; // surely better than 0.0
84 var τ = _base2.default.lightTime(Δ);
85 var l = void 0,
86 b = void 0,
87 r = void 0,
88 x = void 0,
89 y = void 0,
90 z = void 0;
91 function f() {
92 var marsPos = mars.position(jde - τ);
93 r = marsPos.range;
94 var fk5 = _planetposition2.default.toFK5(marsPos.lon, marsPos.lat, jde);
95 l = fk5.lon;
96 b = fk5.lat;
97
98 var _base$sincos3 = _base2.default.sincos(b),
99 _base$sincos4 = _slicedToArray(_base$sincos3, 2),
100 sb = _base$sincos4[0],
101 cb = _base$sincos4[1];
102
103 var _base$sincos5 = _base2.default.sincos(l),
104 _base$sincos6 = _slicedToArray(_base$sincos5, 2),
105 sl = _base$sincos6[0],
106 cl = _base$sincos6[1];
107 // (42.2) p. 289
108
109
110 x = r * cb * cl - R * cl0;
111 y = r * cb * sl - R * sl0;
112 z = r * sb - R * sb0;
113 // (42.3) p. 289
114 Δ = Math.sqrt(x * x + y * y + z * z);
115 τ = _base2.default.lightTime(Δ);
116 }
117 f();
118 f();
119 // Step 5.0
120 var λ = Math.atan2(y, x);
121 var β = Math.atan(z / Math.hypot(x, y));
122 // Step 6.0
123
124 var _base$sincos7 = _base2.default.sincos(β0),
125 _base$sincos8 = _slicedToArray(_base$sincos7, 2),
1260 = _base$sincos8[0],
1270 = _base$sincos8[1];
128
129 var _base$sincos9 = _base2.default.sincos(β),
130 _base$sincos10 = _slicedToArray(_base$sincos9, 2),
131 sβ = _base$sincos10[0],
132 cβ = _base$sincos10[1];
133
134 var DE = Math.asin(-sβ0 * sβ - cβ0 * cβ * Math.cos(λ0 - λ));
135 // Step 7.0
136 var N = 49.5581 * p + 0.7721 * p * T;
137 var lʹ = l - 0.00697 * p / r;
138 var bʹ = b - 0.000225 * p * Math.cos(l - N) / r;
139 // Step 8.0
140
141 var _base$sincos11 = _base2.default.sincos(bʹ),
142 _base$sincos12 = _slicedToArray(_base$sincos11, 2),
143 sbʹ = _base$sincos12[0],
144 cbʹ = _base$sincos12[1];
145
146 var DS = Math.asin(-sβ0 * sbʹ - cβ0 * cbʹ * Math.cos(λ0 - lʹ));
147 // Step 9.0
148 var W = 11.504 * p + 350.89200025 * p * (jde - τ - 2433282.5);
149 // Step 10.0
150 var ε0 = _nutation2.default.meanObliquity(jde);
151
152 var _base$sincos13 = _base2.default.sincos(ε0),
153 _base$sincos14 = _slicedToArray(_base$sincos13, 2),
1540 = _base$sincos14[0],
1550 = _base$sincos14[1];
156
157 var eq = new _coord2.default.Ecliptic(λ0, β0).toEquatorial(ε0);
158 var _ref2 = [eq.ra, eq.dec],
159 α0 = _ref2[0],
160 δ0 = _ref2[1];
161 // Step 11.0
162
163 var u = y * cε0 - z * sε0;
164 var v = y * sε0 + z * cε0;
165 var α = Math.atan2(u, x);
166 var δ = Math.atan(v / Math.hypot(x, u));
167
168 var _base$sincos15 = _base2.default.sincos(δ),
169 _base$sincos16 = _slicedToArray(_base$sincos15, 2),
170 sδ = _base$sincos16[0],
171 cδ = _base$sincos16[1];
172
173 var _base$sincos17 = _base2.default.sincos(δ0),
174 _base$sincos18 = _slicedToArray(_base$sincos17, 2),
1750 = _base$sincos18[0],
1760 = _base$sincos18[1];
177
178 var _base$sincos19 = _base2.default.sincos(α0 - α),
179 _base$sincos20 = _slicedToArray(_base$sincos19, 2),
1800α = _base$sincos20[0],
1810α = _base$sincos20[1];
182
183 var ζ = Math.atan2(sδ0 * cδ * cα0α - sδ * cδ0, cδ * sα0α);
184 // Step 12.0
185 var ω = _base2.default.pmod(W - ζ, 2 * Math.PI);
186 // Step 13.0
187
188 var _nutation$nutation = _nutation2.default.nutation(jde),
189 _nutation$nutation2 = _slicedToArray(_nutation$nutation, 2),
190 Δψ = _nutation$nutation2[0],
191 Δε = _nutation$nutation2[1];
192 // Step 14.0
193
194
195 var _base$sincos21 = _base2.default.sincos(l0 - λ),
196 _base$sincos22 = _slicedToArray(_base$sincos21, 2),
197 sl0λ = _base$sincos22[0],
198 cl0λ = _base$sincos22[1];
199
200 λ += 0.005693 * p * cl0λ / cβ;
201 β += 0.005693 * p * sl0λ * sβ;
202 // Step 15.0
203 λ0 += Δψ;
204 λ += Δψ;
205 var ε = ε0 + Δε;
206 // Step 16.0
207
208 var _base$sincos23 = _base2.default.sincos(ε),
209 _base$sincos24 = _slicedToArray(_base$sincos23, 2),
210 sε = _base$sincos24[0],
211 cε = _base$sincos24[1];
212
213 eq = new _coord2.default.Ecliptic(λ0, β0).toEquatorial(ε);
214 var _ref3 = [eq.ra, eq.dec],
215 α0ʹ = _ref3[0],
216 δ0ʹ = _ref3[1];
217
218 eq = new _coord2.default.Ecliptic(λ, β).toEquatorial(ε);
219 var _ref4 = [eq.ra, eq.dec],
220 αʹ = _ref4[0],
221 δʹ = _ref4[1];
222 // Step 17.0
223
224 var _base$sincos25 = _base2.default.sincos(δ0ʹ),
225 _base$sincos26 = _slicedToArray(_base$sincos25, 2),
2260ʹ = _base$sincos26[0],
2270ʹ = _base$sincos26[1];
228
229 var _base$sincos27 = _base2.default.sincos(δʹ),
230 _base$sincos28 = _slicedToArray(_base$sincos27, 2),
231 sδʹ = _base$sincos28[0],
232 cδʹ = _base$sincos28[1];
233
234 var _base$sincos29 = _base2.default.sincos(α0ʹ - αʹ),
235 _base$sincos30 = _slicedToArray(_base$sincos29, 2),
2360ʹαʹ = _base$sincos30[0],
2370ʹαʹ = _base$sincos30[1];
238 // (42.4) p. 290
239
240
241 var P = Math.atan2(cδ0ʹ * sα0ʹαʹ, sδ0ʹ * cδʹ - cδ0ʹ * sδʹ * cα0ʹαʹ);
242 if (P < 0) {
243 P += 2 * Math.PI;
244 }
245 // Step 18.0
246 var s = l0 + Math.PI;
247
248 var _base$sincos31 = _base2.default.sincos(s),
249 _base$sincos32 = _slicedToArray(_base$sincos31, 2),
250 ss = _base$sincos32[0],
251 cs = _base$sincos32[1];
252
253 var αs = Math.atan2(cε * ss, cs);
254 var δs = Math.asin(sε * ss);
255
256 var _base$sincos33 = _base2.default.sincos(δs),
257 _base$sincos34 = _slicedToArray(_base$sincos33, 2),
258 sδs = _base$sincos34[0],
259 cδs = _base$sincos34[1];
260
261 var _base$sincos35 = _base2.default.sincos(αs - α),
262 _base$sincos36 = _slicedToArray(_base$sincos35, 2),
263 sαsα = _base$sincos36[0],
264 cαsα = _base$sincos36[1];
265
266 var χ = Math.atan2(cδs * sαsα, sδs * cδ - cδs * sδ * cαsα);
267 var Q = χ + Math.PI;
268 // Step 19.0
269 var d = 9.36 / 60 / 60 * Math.PI / 180 / Δ;
270 var k = _illum2.default.fraction(r, Δ, R);
271 var q = (1 - k) * d;
272 return [DE, DS, ω, P, Q, d, k, q];
273}
274
275exports.default = {
276 physical: physical
277};
\No newline at end of file