1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | import base from './base';
|
12 | import coord from './coord';
|
13 | import _nutation from './nutation';
|
14 | import precess from './precess';
|
15 | import solar from './solar';
|
16 | var cos = Math.cos,
|
17 | tan = Math.tan;
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 | export function nutation(α, δ, jd) {
|
31 |
|
32 | var ε = _nutation.meanObliquity(jd);
|
33 |
|
34 | var _base$sincos = base.sincos(ε),
|
35 | sinε = _base$sincos[0],
|
36 | cosε = _base$sincos[1];
|
37 |
|
38 | var _nutation$nutation = _nutation.nutation(jd),
|
39 | Δψ = _nutation$nutation[0],
|
40 | Δε = _nutation$nutation[1];
|
41 |
|
42 | var _base$sincos2 = base.sincos(α),
|
43 | sinα = _base$sincos2[0],
|
44 | cosα = _base$sincos2[1];
|
45 |
|
46 | var tanδ = tan(δ);
|
47 |
|
48 | var Δα1 = (cosε + sinε * sinα * tanδ) * Δψ - cosα * tanδ * Δε;
|
49 | var Δδ1 = sinε * cosα * Δψ + sinα * Δε;
|
50 | return [Δα1, Δδ1];
|
51 | }
|
52 |
|
53 |
|
54 |
|
55 |
|
56 | var κ = 20.49552 * Math.PI / 180 / 3600;
|
57 |
|
58 |
|
59 |
|
60 |
|
61 | export function perihelion(T) {
|
62 |
|
63 | return base.horner(T, 102.93735, 1.71946, 0.00046) * Math.PI / 180;
|
64 | }
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 | export function eclipticAberration(λ, β, jd) {
|
71 |
|
72 | var T = base.J2000Century(jd);
|
73 |
|
74 | var _solar$trueLongitude = solar.trueLongitude(T),
|
75 | lon = _solar$trueLongitude.lon,
|
76 | ano = _solar$trueLongitude.ano;
|
77 |
|
78 |
|
79 | var e = solar.eccentricity(T);
|
80 | var π = perihelion(T);
|
81 |
|
82 | var _base$sincos3 = base.sincos(β),
|
83 | sβ = _base$sincos3[0],
|
84 | cβ = _base$sincos3[1];
|
85 |
|
86 | var _base$sincos4 = base.sincos(lon - λ),
|
87 | ssλ = _base$sincos4[0],
|
88 | csλ = _base$sincos4[1];
|
89 |
|
90 | var _base$sincos5 = base.sincos(π - λ),
|
91 | sinπλ = _base$sincos5[0],
|
92 | cosπλ = _base$sincos5[1];
|
93 |
|
94 |
|
95 |
|
96 | var Δλ = κ * (e * cosπλ - csλ) / cβ;
|
97 | var Δβ = -κ * sβ * (ssλ - e * sinπλ);
|
98 | return [Δλ, Δβ];
|
99 | }
|
100 |
|
101 |
|
102 |
|
103 |
|
104 |
|
105 | export function aberration(α, δ, jd) {
|
106 |
|
107 | var ε = _nutation.meanObliquity(jd);
|
108 | var T = base.J2000Century(jd);
|
109 |
|
110 | var _solar$trueLongitude2 = solar.trueLongitude(T),
|
111 | lon = _solar$trueLongitude2.lon,
|
112 | ano = _solar$trueLongitude2.ano;
|
113 |
|
114 |
|
115 | var e = solar.eccentricity(T);
|
116 | var π = perihelion(T);
|
117 |
|
118 | var _base$sincos6 = base.sincos(α),
|
119 | sinα = _base$sincos6[0],
|
120 | cosα = _base$sincos6[1];
|
121 |
|
122 | var _base$sincos7 = base.sincos(δ),
|
123 | sinδ = _base$sincos7[0],
|
124 | cosδ = _base$sincos7[1];
|
125 |
|
126 | var _base$sincos8 = base.sincos(lon),
|
127 | sins = _base$sincos8[0],
|
128 | coss = _base$sincos8[1];
|
129 |
|
130 | var _base$sincos9 = base.sincos(π),
|
131 | sinπ = _base$sincos9[0],
|
132 | cosπ = _base$sincos9[1];
|
133 |
|
134 | var cosε = cos(ε);
|
135 | var q1 = cosα * cosε;
|
136 |
|
137 | var Δα2 = κ * (e * (q1 * cosπ + sinα * sinπ) - (q1 * coss + sinα * sins)) / cosδ;
|
138 | var q2 = cosε * (tan(ε) * cosδ - sinα * sinδ);
|
139 | var q3 = cosα * sinδ;
|
140 | var Δδ2 = κ * (e * (cosπ * q2 + sinπ * q3) - (coss * q2 + sins * q3));
|
141 | return [Δα2, Δδ2];
|
142 | }
|
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 |
|
149 |
|
150 |
|
151 | export function position(eqFrom, epochFrom, epochTo, mα, mδ) {
|
152 |
|
153 | var eqTo = precess.position(eqFrom, epochFrom, epochTo, mα, mδ);
|
154 | var jd = base.JulianYearToJDE(epochTo);
|
155 |
|
156 | var _nutation2 = nutation(eqTo.ra, eqTo.dec, jd),
|
157 | Δα1 = _nutation2[0],
|
158 | Δδ1 = _nutation2[1];
|
159 |
|
160 | var _aberration = aberration(eqTo.ra, eqTo.dec, jd),
|
161 | Δα2 = _aberration[0],
|
162 | Δδ2 = _aberration[1];
|
163 |
|
164 | eqTo.ra += Δα1 + Δα2;
|
165 | eqTo.dec += Δδ1 + Δδ2;
|
166 | return eqTo;
|
167 | }
|
168 |
|
169 |
|
170 |
|
171 |
|
172 |
|
173 | export function aberrationRonVondrak(α, δ, jd) {
|
174 |
|
175 | var T = base.J2000Century(jd);
|
176 | var r = {
|
177 | T: T,
|
178 | L2: 3.1761467 + 1021.3285546 * T,
|
179 | L3: 1.7534703 + 628.3075849 * T,
|
180 | L4: 6.2034809 + 334.0612431 * T,
|
181 | L5: 0.5995465 + 52.9690965 * T,
|
182 | L6: 0.8740168 + 21.3299095 * T,
|
183 | L7: 5.4812939 + 7.4781599 * T,
|
184 | L8: 5.3118863 + 3.8133036 * T,
|
185 | Lp: 3.8103444 + 8399.6847337 * T,
|
186 | D: 5.1984667 + 7771.3771486 * T,
|
187 | Mp: 2.3555559 + 8328.6914289 * T,
|
188 | F: 1.6279052 + 8433.4661601 * T
|
189 | };
|
190 | var Xp = 0;
|
191 | var Yp = 0;
|
192 | var Zp = 0;
|
193 |
|
194 | for (var i = 35; i >= 0; i--) {
|
195 | var _rvTerm$i = rvTerm[i](r),
|
196 | x = _rvTerm$i[0],
|
197 | y = _rvTerm$i[1],
|
198 | z = _rvTerm$i[2];
|
199 |
|
200 | Xp += x;
|
201 | Yp += y;
|
202 | Zp += z;
|
203 | }
|
204 |
|
205 | var _base$sincos10 = base.sincos(α),
|
206 | sinα = _base$sincos10[0],
|
207 | cosα = _base$sincos10[1];
|
208 |
|
209 | var _base$sincos11 = base.sincos(δ),
|
210 | sinδ = _base$sincos11[0],
|
211 | cosδ = _base$sincos11[1];
|
212 |
|
213 |
|
214 |
|
215 | return [(Yp * cosα - Xp * sinα) / (c * cosδ), -((Xp * cosα + Yp * sinα) * sinδ - Zp * cosδ) / c];
|
216 | }
|
217 |
|
218 | var c = 17314463350;
|
219 |
|
220 |
|
221 | var rvTerm = [function (r) {
|
222 |
|
223 | var _base$sincos12 = base.sincos(r.L3),
|
224 | sinA = _base$sincos12[0],
|
225 | cosA = _base$sincos12[1];
|
226 |
|
227 | return [(-1719914 - 2 * r.T) * sinA - 25 * cosA, (25 - 13 * r.T) * sinA + (1578089 + 156 * r.T) * cosA, (10 + 32 * r.T) * sinA + (684185 - 358 * r.T) * cosA];
|
228 | }, function (r) {
|
229 |
|
230 | var _base$sincos13 = base.sincos(2 * r.L3),
|
231 | sinA = _base$sincos13[0],
|
232 | cosA = _base$sincos13[1];
|
233 |
|
234 | return [(6434 + 141 * r.T) * sinA + (28007 - 107 * r.T) * cosA, (25697 - 95 * r.T) * sinA + (-5904 - 130 * r.T) * cosA, (11141 - 48 * r.T) * sinA + (-2559 - 55 * r.T) * cosA];
|
235 | }, function (r) {
|
236 |
|
237 | var _base$sincos14 = base.sincos(r.L5),
|
238 | sinA = _base$sincos14[0],
|
239 | cosA = _base$sincos14[1];
|
240 |
|
241 | return [715 * sinA, 6 * sinA - 657 * cosA, -15 * sinA - 282 * cosA];
|
242 | }, function (r) {
|
243 |
|
244 | var _base$sincos15 = base.sincos(r.Lp),
|
245 | sinA = _base$sincos15[0],
|
246 | cosA = _base$sincos15[1];
|
247 |
|
248 | return [715 * sinA, -656 * cosA, -285 * cosA];
|
249 | }, function (r) {
|
250 |
|
251 | var _base$sincos16 = base.sincos(3 * r.L3),
|
252 | sinA = _base$sincos16[0],
|
253 | cosA = _base$sincos16[1];
|
254 |
|
255 | return [(486 - 5 * r.T) * sinA + (-236 - 4 * r.T) * cosA, (-216 - 4 * r.T) * sinA + (-446 + 5 * r.T) * cosA, -94 * sinA - 193 * cosA];
|
256 | }, function (r) {
|
257 |
|
258 | var _base$sincos17 = base.sincos(r.L6),
|
259 | sinA = _base$sincos17[0],
|
260 | cosA = _base$sincos17[1];
|
261 |
|
262 | return [159 * sinA, 2 * sinA - 147 * cosA, -6 * sinA - 61 * cosA];
|
263 | }, function (r) {
|
264 |
|
265 | var cosA = Math.cos(r.F);
|
266 | return [0, 26 * cosA, -59 * cosA];
|
267 | }, function (r) {
|
268 |
|
269 | var _base$sincos18 = base.sincos(r.Lp + r.Mp),
|
270 | sinA = _base$sincos18[0],
|
271 | cosA = _base$sincos18[1];
|
272 |
|
273 | return [39 * sinA, -36 * cosA, -16 * cosA];
|
274 | }, function (r) {
|
275 |
|
276 | var _base$sincos19 = base.sincos(2 * r.L5),
|
277 | sinA = _base$sincos19[0],
|
278 | cosA = _base$sincos19[1];
|
279 |
|
280 | return [33 * sinA - 10 * cosA, -9 * sinA - 30 * cosA, -5 * sinA - 13 * cosA];
|
281 | }, function (r) {
|
282 |
|
283 | var _base$sincos20 = base.sincos(2 * r.L3 - r.L5),
|
284 | sinA = _base$sincos20[0],
|
285 | cosA = _base$sincos20[1];
|
286 |
|
287 | return [31 * sinA + cosA, sinA - 28 * cosA, -12 * cosA];
|
288 | }, function (r) {
|
289 |
|
290 | var _base$sincos21 = base.sincos(3 * r.L3 - 8 * r.L4 + 3 * r.L5),
|
291 | sinA = _base$sincos21[0],
|
292 | cosA = _base$sincos21[1];
|
293 |
|
294 | return [8 * sinA - 28 * cosA, 25 * sinA + 8 * cosA, 11 * sinA + 3 * cosA];
|
295 | }, function (r) {
|
296 |
|
297 | var _base$sincos22 = base.sincos(5 * r.L3 - 8 * r.L4 + 3 * r.L5),
|
298 | sinA = _base$sincos22[0],
|
299 | cosA = _base$sincos22[1];
|
300 |
|
301 | return [8 * sinA - 28 * cosA, -25 * sinA - 8 * cosA, -11 * sinA + -3 * cosA];
|
302 | }, function (r) {
|
303 |
|
304 | var _base$sincos23 = base.sincos(2 * r.L2 - r.L3),
|
305 | sinA = _base$sincos23[0],
|
306 | cosA = _base$sincos23[1];
|
307 |
|
308 | return [21 * sinA, -19 * cosA, -8 * cosA];
|
309 | }, function (r) {
|
310 |
|
311 | var _base$sincos24 = base.sincos(r.L2),
|
312 | sinA = _base$sincos24[0],
|
313 | cosA = _base$sincos24[1];
|
314 |
|
315 | return [-19 * sinA, 17 * cosA, 8 * cosA];
|
316 | }, function (r) {
|
317 |
|
318 | var _base$sincos25 = base.sincos(r.L7),
|
319 | sinA = _base$sincos25[0],
|
320 | cosA = _base$sincos25[1];
|
321 |
|
322 | return [17 * sinA, -16 * cosA, -7 * cosA];
|
323 | }, function (r) {
|
324 |
|
325 | var _base$sincos26 = base.sincos(r.L3 - 2 * r.L5),
|
326 | sinA = _base$sincos26[0],
|
327 | cosA = _base$sincos26[1];
|
328 |
|
329 | return [16 * sinA, 15 * cosA, sinA + 7 * cosA];
|
330 | }, function (r) {
|
331 |
|
332 | var _base$sincos27 = base.sincos(r.L8),
|
333 | sinA = _base$sincos27[0],
|
334 | cosA = _base$sincos27[1];
|
335 |
|
336 | return [16 * sinA, sinA - 15 * cosA, -3 * sinA - 6 * cosA];
|
337 | }, function (r) {
|
338 |
|
339 | var _base$sincos28 = base.sincos(r.L3 + r.L5),
|
340 | sinA = _base$sincos28[0],
|
341 | cosA = _base$sincos28[1];
|
342 |
|
343 | return [11 * sinA - cosA, -sinA - 10 * cosA, -sinA - 5 * cosA];
|
344 | }, function (r) {
|
345 |
|
346 | var _base$sincos29 = base.sincos(2 * r.L2 - 2 * r.L3),
|
347 | sinA = _base$sincos29[0],
|
348 | cosA = _base$sincos29[1];
|
349 |
|
350 | return [-11 * cosA, -10 * sinA, -4 * sinA];
|
351 | }, function (r) {
|
352 |
|
353 | var _base$sincos30 = base.sincos(r.L3 - r.L5),
|
354 | sinA = _base$sincos30[0],
|
355 | cosA = _base$sincos30[1];
|
356 |
|
357 | return [-11 * sinA - 2 * cosA, -2 * sinA + 9 * cosA, -sinA + 4 * cosA];
|
358 | }, function (r) {
|
359 |
|
360 | var _base$sincos31 = base.sincos(4 * r.L3),
|
361 | sinA = _base$sincos31[0],
|
362 | cosA = _base$sincos31[1];
|
363 |
|
364 | return [-7 * sinA - 8 * cosA, -8 * sinA + 6 * cosA, -3 * sinA + 3 * cosA];
|
365 | }, function (r) {
|
366 |
|
367 | var _base$sincos32 = base.sincos(3 * r.L3 - 2 * r.L5),
|
368 | sinA = _base$sincos32[0],
|
369 | cosA = _base$sincos32[1];
|
370 |
|
371 | return [-10 * sinA, 9 * cosA, 4 * cosA];
|
372 | }, function (r) {
|
373 |
|
374 | var _base$sincos33 = base.sincos(r.L2 - 2 * r.L3),
|
375 | sinA = _base$sincos33[0],
|
376 | cosA = _base$sincos33[1];
|
377 |
|
378 | return [-9 * sinA, -9 * cosA, -4 * cosA];
|
379 | }, function (r) {
|
380 |
|
381 | var _base$sincos34 = base.sincos(2 * r.L2 - 3 * r.L3),
|
382 | sinA = _base$sincos34[0],
|
383 | cosA = _base$sincos34[1];
|
384 |
|
385 | return [-9 * sinA, -8 * cosA, -4 * cosA];
|
386 | }, function (r) {
|
387 |
|
388 | var _base$sincos35 = base.sincos(2 * r.L6),
|
389 | sinA = _base$sincos35[0],
|
390 | cosA = _base$sincos35[1];
|
391 |
|
392 | return [-9 * cosA, -8 * sinA, -3 * sinA];
|
393 | }, function (r) {
|
394 |
|
395 | var _base$sincos36 = base.sincos(2 * r.L2 - 4 * r.L3),
|
396 | sinA = _base$sincos36[0],
|
397 | cosA = _base$sincos36[1];
|
398 |
|
399 | return [-9 * cosA, 8 * sinA, 3 * sinA];
|
400 | }, function (r) {
|
401 |
|
402 | var _base$sincos37 = base.sincos(3 * r.L3 - 2 * r.L4),
|
403 | sinA = _base$sincos37[0],
|
404 | cosA = _base$sincos37[1];
|
405 |
|
406 | return [8 * sinA, -8 * cosA, -3 * cosA];
|
407 | }, function (r) {
|
408 |
|
409 | var _base$sincos38 = base.sincos(r.Lp + 2 * r.D - r.Mp),
|
410 | sinA = _base$sincos38[0],
|
411 | cosA = _base$sincos38[1];
|
412 |
|
413 | return [8 * sinA, -7 * cosA, -3 * cosA];
|
414 | }, function (r) {
|
415 |
|
416 | var _base$sincos39 = base.sincos(8 * r.L2 - 12 * r.L3),
|
417 | sinA = _base$sincos39[0],
|
418 | cosA = _base$sincos39[1];
|
419 |
|
420 | return [-4 * sinA - 7 * cosA, -6 * sinA + 4 * cosA, -3 * sinA + 2 * cosA];
|
421 | }, function (r) {
|
422 |
|
423 | var _base$sincos40 = base.sincos(8 * r.L2 - 14 * r.L3),
|
424 | sinA = _base$sincos40[0],
|
425 | cosA = _base$sincos40[1];
|
426 |
|
427 | return [-4 * sinA - 7 * cosA, 6 * sinA - 4 * cosA, 3 * sinA - 2 * cosA];
|
428 | }, function (r) {
|
429 |
|
430 | var _base$sincos41 = base.sincos(2 * r.L4),
|
431 | sinA = _base$sincos41[0],
|
432 | cosA = _base$sincos41[1];
|
433 |
|
434 | return [-6 * sinA - 5 * cosA, -4 * sinA + 5 * cosA, -2 * sinA + 2 * cosA];
|
435 | }, function (r) {
|
436 |
|
437 | var _base$sincos42 = base.sincos(3 * r.L2 - 4 * r.L3),
|
438 | sinA = _base$sincos42[0],
|
439 | cosA = _base$sincos42[1];
|
440 |
|
441 | return [-sinA - cosA, -2 * sinA - 7 * cosA, sinA - 4 * cosA];
|
442 | }, function (r) {
|
443 |
|
444 | var _base$sincos43 = base.sincos(2 * r.L3 - 2 * r.L5),
|
445 | sinA = _base$sincos43[0],
|
446 | cosA = _base$sincos43[1];
|
447 |
|
448 | return [4 * sinA - 6 * cosA, -5 * sinA - 4 * cosA, -2 * sinA - 2 * cosA];
|
449 | }, function (r) {
|
450 |
|
451 | var _base$sincos44 = base.sincos(3 * r.L2 - 3 * r.L3),
|
452 | sinA = _base$sincos44[0],
|
453 | cosA = _base$sincos44[1];
|
454 |
|
455 | return [-7 * cosA, -6 * sinA, -3 * sinA];
|
456 | }, function (r) {
|
457 |
|
458 | var _base$sincos45 = base.sincos(2 * r.L3 - 2 * r.L4),
|
459 | sinA = _base$sincos45[0],
|
460 | cosA = _base$sincos45[1];
|
461 |
|
462 | return [5 * sinA - 5 * cosA, -4 * sinA - 5 * cosA, -2 * sinA - 2 * cosA];
|
463 | }, function (r) {
|
464 |
|
465 | var _base$sincos46 = base.sincos(r.Lp - 2 * r.D),
|
466 | sinA = _base$sincos46[0],
|
467 | cosA = _base$sincos46[1];
|
468 |
|
469 | return [5 * sinA, -5 * cosA, -2 * cosA];
|
470 | }];
|
471 |
|
472 |
|
473 |
|
474 |
|
475 |
|
476 |
|
477 |
|
478 |
|
479 |
|
480 |
|
481 |
|
482 |
|
483 | export function positionRonVondrak(eqFrom, epochTo, mα, mδ) {
|
484 |
|
485 | var t = epochTo - 2000;
|
486 | var eqTo = new coord.Equatorial();
|
487 | eqTo.ra = eqFrom.ra + mα.rad() * t;
|
488 | eqTo.dec = eqFrom.dec + mδ.rad() * t;
|
489 | var jd = base.JulianYearToJDE(epochTo);
|
490 |
|
491 | var _aberrationRonVondrak = aberrationRonVondrak(eqTo.ra, eqTo.dec, jd),
|
492 | Δα = _aberrationRonVondrak[0],
|
493 | Δδ = _aberrationRonVondrak[1];
|
494 |
|
495 | eqTo.ra += Δα;
|
496 | eqTo.dec += Δδ;
|
497 | eqTo = precess.position(eqTo, 2000, epochTo, 0, 0);
|
498 |
|
499 | var _nutation3 = nutation(eqTo.ra, eqTo.dec, jd),
|
500 | Δα1 = _nutation3[0],
|
501 | Δδ1 = _nutation3[1];
|
502 |
|
503 | eqTo.ra += Δα1;
|
504 | eqTo.dec += Δδ1;
|
505 | return eqTo;
|
506 | }
|
507 |
|
508 | export default {
|
509 | nutation: nutation,
|
510 | perihelion: perihelion,
|
511 | eclipticAberration: eclipticAberration,
|
512 | aberration: aberration,
|
513 | position: position,
|
514 | aberrationRonVondrak: aberrationRonVondrak,
|
515 | positionRonVondrak: positionRonVondrak
|
516 | }; |
\ | No newline at end of file |