UNPKG

14.2 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 jupiter
12 */
13/**
14 * Jupiter: Chapter 42, Ephemeris for Physical Observations of Jupiter.
15 */
16
17exports.physical = physical;
18exports.physical2 = physical2;
19
20var _base = require('./base');
21
22var _base2 = _interopRequireDefault(_base);
23
24var _nutation = require('./nutation');
25
26var _nutation2 = _interopRequireDefault(_nutation);
27
28var _planetposition = require('./planetposition');
29
30var _planetposition2 = _interopRequireDefault(_planetposition);
31
32function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
34/**
35 * Physical computes quantities for physical observations of Jupiter.
36 *
37 * All angular results in radians.
38 *
39 * @param {number} jde - Julian ephemeris day
40 * @param {planetposition.Planet} earth
41 * @param {planetposition.Planet} jupiter
42 * @return {Array}
43 * {number} DS - Planetocentric declination of the Sun.
44 * {number} DE - Planetocentric declination of the Earth.
45 * {number} ω1 - Longitude of the System I central meridian of the illuminated disk,
46 * as seen from Earth.
47 * {number} ω2 - Longitude of the System II central meridian of the illuminated disk,
48 * as seen from Earth.
49 * {number} P - Geocentric position angle of Jupiter's northern rotation pole.
50 */
51function physical(jde, earth, jupiter) {
52 // (jde float64, earth, jupiter *pp.V87Planet) (DS, DE, ω1, ω2, P float64)
53 // Step 1.0
54 var d = jde - 2433282.5;
55 var T1 = d / _base2.default.JulianCentury;
56 var p = Math.PI / 180;
57 var α0 = 268 * p + 0.1061 * p * T1;
58 var δ0 = 64.5 * p - 0.0164 * p * T1;
59 // Step 2.0
60 var W1 = 17.71 * p + 877.90003539 * p * d;
61 var W2 = 16.838 * p + 870.27003539 * p * d;
62 // Step 3.0
63 var pos = earth.position(jde);
64 var _ref = [pos.lon, pos.lat, pos.range],
65 l0 = _ref[0],
66 b0 = _ref[1],
67 R = _ref[2];
68
69 var fk5 = _planetposition2.default.toFK5(l0, b0, jde);
70 l0 = fk5.lon;
71 b0 = fk5.lat;
72 // Steps 4-7.
73
74 var _base$sincos = _base2.default.sincos(l0),
75 _base$sincos2 = _slicedToArray(_base$sincos, 2),
76 sl0 = _base$sincos2[0],
77 cl0 = _base$sincos2[1];
78
79 var sb0 = Math.sin(b0);
80 var Δ = 4.0; // surely better than 0.0
81
82 var l = void 0,
83 b = void 0,
84 r = void 0,
85 x = void 0,
86 y = void 0,
87 z = void 0;
88 var f = function f() {
89 var τ = _base2.default.lightTime(Δ);
90 var pos = jupiter.position(jde - τ);
91 l = pos.lon;
92 b = pos.lat;
93 r = pos.range;
94 var fk5 = _planetposition2.default.toFK5(l, b, 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 };
116 f();
117 f();
118
119 // Step 8.0
120 var ε0 = _nutation2.default.meanObliquity(jde);
121 // Step 9.0
122
123 var _base$sincos7 = _base2.default.sincos(ε0),
124 _base$sincos8 = _slicedToArray(_base$sincos7, 2),
1250 = _base$sincos8[0],
1260 = _base$sincos8[1];
127
128 var _base$sincos9 = _base2.default.sincos(l),
129 _base$sincos10 = _slicedToArray(_base$sincos9, 2),
130 sl = _base$sincos10[0],
131 cl = _base$sincos10[1];
132
133 var _base$sincos11 = _base2.default.sincos(b),
134 _base$sincos12 = _slicedToArray(_base$sincos11, 2),
135 sb = _base$sincos12[0],
136 cb = _base$sincos12[1];
137
138 var αs = Math.atan2(cε0 * sl - sε0 * sb / cb, cl);
139 var δs = Math.asin(cε0 * sb + sε0 * cb * sl);
140 // Step 10.0
141
142 var _base$sincos13 = _base2.default.sincos(δs),
143 _base$sincos14 = _slicedToArray(_base$sincos13, 2),
144 sδs = _base$sincos14[0],
145 cδs = _base$sincos14[1];
146
147 var _base$sincos15 = _base2.default.sincos(δ0),
148 _base$sincos16 = _slicedToArray(_base$sincos15, 2),
1490 = _base$sincos16[0],
1500 = _base$sincos16[1];
151
152 var DS = Math.asin(-sδ0 * sδs - cδ0 * cδs * Math.cos(α0 - αs));
153 // Step 11.0
154 var u = y * cε0 - z * sε0;
155 var v = y * sε0 + z * cε0;
156 var α = Math.atan2(u, x);
157 var δ = Math.atan(v / Math.hypot(x, u));
158
159 var _base$sincos17 = _base2.default.sincos(δ),
160 _base$sincos18 = _slicedToArray(_base$sincos17, 2),
161 sδ = _base$sincos18[0],
162 cδ = _base$sincos18[1];
163
164 var _base$sincos19 = _base2.default.sincos(α0 - α),
165 _base$sincos20 = _slicedToArray(_base$sincos19, 2),
1660α = _base$sincos20[0],
1670α = _base$sincos20[1];
168
169 var ζ = Math.atan2(sδ0 * cδ * cα0α - sδ * cδ0, cδ * sα0α);
170 // Step 12.0
171 var DE = Math.asin(-sδ0 * sδ - cδ0 * cδ * Math.cos(α0 - α));
172 // Step 13.0
173 var ω1 = W1 - ζ - 5.07033 * p * Δ;
174 var ω2 = W2 - ζ - 5.02626 * p * Δ;
175 // Step 14.0
176 var C = (2 * r * Δ + R * R - r * r - Δ * Δ) / (4 * r * Δ);
177 if (Math.sin(l - l0) < 0) {
178 C = -C;
179 }
180 ω1 = _base2.default.pmod(ω1 + C, 2 * Math.PI);
181 ω2 = _base2.default.pmod(ω2 + C, 2 * Math.PI);
182 // Step 15.0
183
184 var _nutation$nutation = _nutation2.default.nutation(jde),
185 _nutation$nutation2 = _slicedToArray(_nutation$nutation, 2),
186 Δψ = _nutation$nutation2[0],
187 Δε = _nutation$nutation2[1];
188
189 var ε = ε0 + Δε;
190 // Step 16.0
191
192 var _base$sincos21 = _base2.default.sincos(ε),
193 _base$sincos22 = _slicedToArray(_base$sincos21, 2),
194 sε = _base$sincos22[0],
195 cε = _base$sincos22[1];
196
197 var _base$sincos23 = _base2.default.sincos(α),
198 _base$sincos24 = _slicedToArray(_base$sincos23, 2),
199 sα = _base$sincos24[0],
200 cα = _base$sincos24[1];
201
202 α += 0.005693 * p * (cα * cl0 * cε + sα * sl0) / cδ;
203 δ += 0.005693 * p * (cl0 * cε * (sε / cε * cδ - sα * sδ) + cα * sδ * sl0);
204 // Step 17.0
205 var tδ = sδ / cδ;
206 var Δα = (cε + sε * sα * tδ) * Δψ - cα * tδ * Δε;
207 var Δδ = sε * cα * Δψ + sα * Δε;
208 var αʹ = α + Δα;
209 var δʹ = δ + Δδ;
210
211 var _base$sincos25 = _base2.default.sincos(α0),
212 _base$sincos26 = _slicedToArray(_base$sincos25, 2),
2130 = _base$sincos26[0],
2140 = _base$sincos26[1];
215
216 var0 = sδ0 / cδ0;
217 var Δα0 = (cε + sε * sα0 * tδ0) * Δψ - cα0 * tδ0 * Δε;
218 var Δδ0 = sε * cα0 * Δψ + sα0 * Δε;
219 var α0ʹ = α0 + Δα0;
220 var δ0ʹ = δ0 + Δδ0;
221 // Step 18.0
222
223 var _base$sincos27 = _base2.default.sincos(δʹ),
224 _base$sincos28 = _slicedToArray(_base$sincos27, 2),
225 sδʹ = _base$sincos28[0],
226 cδʹ = _base$sincos28[1];
227
228 var _base$sincos29 = _base2.default.sincos(δ0ʹ),
229 _base$sincos30 = _slicedToArray(_base$sincos29, 2),
2300ʹ = _base$sincos30[0],
2310ʹ = _base$sincos30[1];
232
233 var _base$sincos31 = _base2.default.sincos(α0ʹ - αʹ),
234 _base$sincos32 = _slicedToArray(_base$sincos31, 2),
2350ʹαʹ = _base$sincos32[0],
2360ʹαʹ = _base$sincos32[1];
237 // (42.4) p. 290
238
239
240 var P = Math.atan2(cδ0ʹ * sα0ʹαʹ, sδ0ʹ * cδʹ - cδ0ʹ * sδʹ * cα0ʹαʹ);
241 if (P < 0) {
242 P += 2 * Math.PI;
243 }
244 return [DS, DE, ω1, ω2, P];
245}
246
247/**
248 * Physical2 computes quantities for physical observations of Jupiter.
249 *
250 * Results are less accurate than with Physical().
251 * All angular results in radians.
252 *
253 * @param {number} jde - Julian ephemeris day
254 * @return {Array}
255 * {number} DS - Planetocentric declination of the Sun.
256 * {number} DE - Planetocentric declination of the Earth.
257 * {number} ω1 - Longitude of the System I central meridian of the illuminated disk,
258 * as seen from Earth.
259 * {number} ω2 - Longitude of the System II central meridian of the illuminated disk,
260 * as seen from Earth.
261 */
262function physical2(jde) {
263 // (jde float64) (DS, DE, ω1, ω2 float64)
264 var d = jde - _base2.default.J2000;
265 var p = Math.PI / 180;
266 var V = 172.74 * p + 0.00111588 * p * d;
267 var M = 357.529 * p + 0.9856003 * p * d;
268 var sV = Math.sin(V);
269 var N = 20.02 * p + 0.0830853 * p * d + 0.329 * p * sV;
270 var J = 66.115 * p + 0.9025179 * p * d - 0.329 * p * sV;
271
272 var _base$sincos33 = _base2.default.sincos(M),
273 _base$sincos34 = _slicedToArray(_base$sincos33, 2),
274 sM = _base$sincos34[0],
275 cM = _base$sincos34[1];
276
277 var _base$sincos35 = _base2.default.sincos(N),
278 _base$sincos36 = _slicedToArray(_base$sincos35, 2),
279 sN = _base$sincos36[0],
280 cN = _base$sincos36[1];
281
282 var _base$sincos37 = _base2.default.sincos(2 * M),
283 _base$sincos38 = _slicedToArray(_base$sincos37, 2),
284 s2M = _base$sincos38[0],
285 c2M = _base$sincos38[1];
286
287 var _base$sincos39 = _base2.default.sincos(2 * N),
288 _base$sincos40 = _slicedToArray(_base$sincos39, 2),
289 s2N = _base$sincos40[0],
290 c2N = _base$sincos40[1];
291
292 var A = 1.915 * p * sM + 0.02 * p * s2M;
293 var B = 5.555 * p * sN + 0.168 * p * s2N;
294 var K = J + A - B;
295 var R = 1.00014 - 0.01671 * cM - 0.00014 * c2M;
296 var r = 5.20872 - 0.25208 * cN - 0.00611 * c2N;
297
298 var _base$sincos41 = _base2.default.sincos(K),
299 _base$sincos42 = _slicedToArray(_base$sincos41, 2),
300 sK = _base$sincos42[0],
301 cK = _base$sincos42[1];
302
303 var Δ = Math.sqrt(r * r + R * R - 2 * r * R * cK);
304 var ψ = Math.asin(R / Δ * sK);
305 var dd = d - Δ / 173;
306 var ω1 = 210.98 * p + 877.8169088 * p * dd + ψ - B;
307 var ω2 = 187.23 * p + 870.1869088 * p * dd + ψ - B;
308 var C = Math.sin(ψ / 2);
309 C *= C;
310 if (sK > 0) {
311 C = -C;
312 }
313 ω1 = _base2.default.pmod(ω1 + C, 2 * Math.PI);
314 ω2 = _base2.default.pmod(ω2 + C, 2 * Math.PI);
315 var λ = 34.35 * p + 0.083091 * p * d + 0.329 * p * sV + B;
316 var DS = 3.12 * p * Math.sin(λ + 42.8 * p);
317 var DE = DS - 2.22 * p * Math.sin(ψ) * Math.cos(λ + 22 * p) - 1.3 * p * (r - Δ) / Δ * Math.sin(λ - 100.5 * p);
318 return [DS, DE, ω1, ω2];
319}
320
321exports.default = {
322 physical: physical,
323 physical2: physical2
324};
\No newline at end of file