@typescriptify/sweph 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +422 -0
- package/ephe/semo_18.se1 +0 -0
- package/ephe/sepl_18.se1 +0 -0
- package/originalCode/.eslintrc.json +124 -0
- package/originalCode/.gitattributes +2 -0
- package/originalCode/.github/FUNDING.yml +5 -0
- package/originalCode/.github/workflows/test.yml +35 -0
- package/originalCode/LICENSE +840 -0
- package/originalCode/README.md +91 -0
- package/originalCode/binding.gyp +41 -0
- package/originalCode/constants.js +366 -0
- package/originalCode/docs.gif +0 -0
- package/originalCode/index.d.ts +5115 -0
- package/originalCode/index.js +7 -0
- package/originalCode/index.mjs +109 -0
- package/originalCode/package.json +55 -0
- package/originalCode/src/functions/azalt.cpp +39 -0
- package/originalCode/src/functions/azalt_rev.cpp +35 -0
- package/originalCode/src/functions/calc.cpp +29 -0
- package/originalCode/src/functions/calc_pctr.cpp +31 -0
- package/originalCode/src/functions/calc_ut.cpp +29 -0
- package/originalCode/src/functions/close.cpp +6 -0
- package/originalCode/src/functions/cotrans.cpp +26 -0
- package/originalCode/src/functions/cotrans_sp.cpp +26 -0
- package/originalCode/src/functions/cs2degstr.cpp +19 -0
- package/originalCode/src/functions/cs2lonlatstr.cpp +23 -0
- package/originalCode/src/functions/cs2timestr.cpp +23 -0
- package/originalCode/src/functions/csnorm.cpp +15 -0
- package/originalCode/src/functions/csroundsec.cpp +15 -0
- package/originalCode/src/functions/d2l.cpp +15 -0
- package/originalCode/src/functions/date_conversion.cpp +30 -0
- package/originalCode/src/functions/day_of_week.cpp +15 -0
- package/originalCode/src/functions/degnorm.cpp +15 -0
- package/originalCode/src/functions/deltat.cpp +15 -0
- package/originalCode/src/functions/deltat_ex.cpp +24 -0
- package/originalCode/src/functions/difcs2n.cpp +19 -0
- package/originalCode/src/functions/difcsn.cpp +19 -0
- package/originalCode/src/functions/difdeg2n.cpp +19 -0
- package/originalCode/src/functions/difdegn.cpp +19 -0
- package/originalCode/src/functions/fixstar.cpp +32 -0
- package/originalCode/src/functions/fixstar2.cpp +32 -0
- package/originalCode/src/functions/fixstar2_mag.cpp +28 -0
- package/originalCode/src/functions/fixstar2_ut.cpp +32 -0
- package/originalCode/src/functions/fixstar_mag.cpp +28 -0
- package/originalCode/src/functions/fixstar_ut.cpp +32 -0
- package/originalCode/src/functions/gauquelin_sector.cpp +44 -0
- package/originalCode/src/functions/get_ayanamsa.cpp +15 -0
- package/originalCode/src/functions/get_ayanamsa_ex.cpp +27 -0
- package/originalCode/src/functions/get_ayanamsa_ex_ut.cpp +27 -0
- package/originalCode/src/functions/get_ayanamsa_name.cpp +19 -0
- package/originalCode/src/functions/get_ayanamsa_ut.cpp +15 -0
- package/originalCode/src/functions/get_current_file_data.cpp +28 -0
- package/originalCode/src/functions/get_library_path.cpp +8 -0
- package/originalCode/src/functions/get_orbital_elements.cpp +29 -0
- package/originalCode/src/functions/get_planet_name.cpp +19 -0
- package/originalCode/src/functions/get_tid_acc.cpp +7 -0
- package/originalCode/src/functions/heliacal_pheno_ut.cpp +52 -0
- package/originalCode/src/functions/heliacal_ut.cpp +52 -0
- package/originalCode/src/functions/helio_cross.cpp +33 -0
- package/originalCode/src/functions/helio_cross_ut.cpp +33 -0
- package/originalCode/src/functions/house_name.cpp +20 -0
- package/originalCode/src/functions/house_pos.cpp +36 -0
- package/originalCode/src/functions/houses.cpp +35 -0
- package/originalCode/src/functions/houses_armc.cpp +38 -0
- package/originalCode/src/functions/houses_armc_ex2.cpp +47 -0
- package/originalCode/src/functions/houses_ex.cpp +37 -0
- package/originalCode/src/functions/houses_ex2.cpp +46 -0
- package/originalCode/src/functions/jdet_to_utc.cpp +38 -0
- package/originalCode/src/functions/jdut1_to_utc.cpp +38 -0
- package/originalCode/src/functions/julday.cpp +25 -0
- package/originalCode/src/functions/lat_to_lmt.cpp +27 -0
- package/originalCode/src/functions/lmt_to_lat.cpp +27 -0
- package/originalCode/src/functions/lun_eclipse_how.cpp +34 -0
- package/originalCode/src/functions/lun_eclipse_when.cpp +31 -0
- package/originalCode/src/functions/lun_eclipse_when_loc.cpp +39 -0
- package/originalCode/src/functions/lun_occult_when_glob.cpp +35 -0
- package/originalCode/src/functions/lun_occult_when_loc.cpp +43 -0
- package/originalCode/src/functions/lun_occult_where.cpp +34 -0
- package/originalCode/src/functions/mooncross.cpp +26 -0
- package/originalCode/src/functions/mooncross_node.cpp +30 -0
- package/originalCode/src/functions/mooncross_node_ut.cpp +30 -0
- package/originalCode/src/functions/mooncross_ut.cpp +26 -0
- package/originalCode/src/functions/nod_aps.cpp +42 -0
- package/originalCode/src/functions/nod_aps_ut.cpp +42 -0
- package/originalCode/src/functions/orbit_max_min_true_distance.cpp +37 -0
- package/originalCode/src/functions/pheno.cpp +29 -0
- package/originalCode/src/functions/pheno_ut.cpp +29 -0
- package/originalCode/src/functions/radnorm.cpp +15 -0
- package/originalCode/src/functions/refrac.cpp +23 -0
- package/originalCode/src/functions/refrac_extended.cpp +32 -0
- package/originalCode/src/functions/revjul.cpp +33 -0
- package/originalCode/src/functions/rise_trans.cpp +44 -0
- package/originalCode/src/functions/rise_trans_true_hor.cpp +46 -0
- package/originalCode/src/functions/set_delta_t_userdef.cpp +14 -0
- package/originalCode/src/functions/set_ephe_path.cpp +14 -0
- package/originalCode/src/functions/set_jpl_file.cpp +14 -0
- package/originalCode/src/functions/set_sid_mode.cpp +20 -0
- package/originalCode/src/functions/set_tid_acc.cpp +14 -0
- package/originalCode/src/functions/set_topo.cpp +20 -0
- package/originalCode/src/functions/sidtime.cpp +15 -0
- package/originalCode/src/functions/sidtime0.cpp +21 -0
- package/originalCode/src/functions/sol_eclipse_how.cpp +34 -0
- package/originalCode/src/functions/sol_eclipse_when_glob.cpp +31 -0
- package/originalCode/src/functions/sol_eclipse_when_loc.cpp +39 -0
- package/originalCode/src/functions/sol_eclipse_where.cpp +30 -0
- package/originalCode/src/functions/solcross.cpp +26 -0
- package/originalCode/src/functions/solcross_ut.cpp +26 -0
- package/originalCode/src/functions/split_deg.cpp +35 -0
- package/originalCode/src/functions/time_equ.cpp +25 -0
- package/originalCode/src/functions/utc_time_zone.cpp +48 -0
- package/originalCode/src/functions/utc_to_jd.cpp +37 -0
- package/originalCode/src/functions/version.cpp +8 -0
- package/originalCode/src/functions/vis_limit_mag.cpp +50 -0
- package/originalCode/src/sweph.cpp +150 -0
- package/originalCode/src/sweph.h +119 -0
- package/originalCode/swisseph/swecl.c +6428 -0
- package/originalCode/swisseph/swedate.c +588 -0
- package/originalCode/swisseph/swedate.h +81 -0
- package/originalCode/swisseph/swehel.c +3511 -0
- package/originalCode/swisseph/swehouse.c +3143 -0
- package/originalCode/swisseph/swehouse.h +98 -0
- package/originalCode/swisseph/swejpl.c +958 -0
- package/originalCode/swisseph/swejpl.h +103 -0
- package/originalCode/swisseph/swemmoon.c +1930 -0
- package/originalCode/swisseph/swemplan.c +967 -0
- package/originalCode/swisseph/swemptab.h +10640 -0
- package/originalCode/swisseph/swenut2000a.h +2819 -0
- package/originalCode/swisseph/sweodef.h +326 -0
- package/originalCode/swisseph/sweph.c +8614 -0
- package/originalCode/swisseph/sweph.h +849 -0
- package/originalCode/swisseph/swephexp.h +1020 -0
- package/originalCode/swisseph/swephlib.c +4634 -0
- package/originalCode/swisseph/swephlib.h +189 -0
- package/package.json +28 -0
- package/scripts/gen-swemptab.js +177 -0
- package/scripts/gen-swenut2000a.js +106 -0
- package/src/SwissEph/README.md +268 -0
- package/src/SwissEph/UseCases/Ayanamsa.md +363 -0
- package/src/SwissEph/UseCases/AzimuthAltitude.md +408 -0
- package/src/SwissEph/UseCases/CoordinateSystems.md +337 -0
- package/src/SwissEph/UseCases/DateAndTime.md +368 -0
- package/src/SwissEph/UseCases/DeltaT.md +258 -0
- package/src/SwissEph/UseCases/EphemerisFiles.md +338 -0
- package/src/SwissEph/UseCases/FixedStars.md +300 -0
- package/src/SwissEph/UseCases/GauquelinSectors.md +304 -0
- package/src/SwissEph/UseCases/HeliacalEvents.md +396 -0
- package/src/SwissEph/UseCases/HelioCrossings.md +325 -0
- package/src/SwissEph/UseCases/HousePosition.md +254 -0
- package/src/SwissEph/UseCases/HouseSystems.md +279 -0
- package/src/SwissEph/UseCases/LunarEclipse.md +326 -0
- package/src/SwissEph/UseCases/MeridianTransit.md +279 -0
- package/src/SwissEph/UseCases/MoonCrossings.md +373 -0
- package/src/SwissEph/UseCases/NodesAndApsides.md +307 -0
- package/src/SwissEph/UseCases/Occultation.md +352 -0
- package/src/SwissEph/UseCases/OrbitalElements.md +469 -0
- package/src/SwissEph/UseCases/Phenomena.md +328 -0
- package/src/SwissEph/UseCases/PlanetPositions.md +366 -0
- package/src/SwissEph/UseCases/Planetocentric.md +278 -0
- package/src/SwissEph/UseCases/Refraction.md +314 -0
- package/src/SwissEph/UseCases/RiseAndSet.md +433 -0
- package/src/SwissEph/UseCases/SiderealTime.md +302 -0
- package/src/SwissEph/UseCases/SolarEclipse.md +379 -0
- package/src/SwissEph/UseCases/SunCrossings.md +275 -0
- package/src/SwissEph/UseCases/TopocentricCorrection.md +335 -0
- package/src/SwissEph/errors.ts +10 -0
- package/src/SwissEph/index.ts +823 -0
- package/src/SwissEph/types.ts +291 -0
- package/src/constants.ts +762 -0
- package/src/file-reader.ts +147 -0
- package/src/index.ts +10 -0
- package/src/swecl.ts +4526 -0
- package/src/swedate.ts +376 -0
- package/src/swehel.ts +1939 -0
- package/src/swehouse.ts +2167 -0
- package/src/swejpl.ts +470 -0
- package/src/swemmoon.ts +1318 -0
- package/src/swemplan.ts +585 -0
- package/src/swemptab.ts +4448 -0
- package/src/swenut2000a.ts +2763 -0
- package/src/sweph.ts +3993 -0
- package/src/swephlib.ts +2720 -0
- package/src/types.ts +490 -0
- package/tests/c-style/ayanamsa.test.ts +63 -0
- package/tests/c-style/config.test.ts +96 -0
- package/tests/c-style/crossings.test.ts +81 -0
- package/tests/c-style/date-time.test.ts +114 -0
- package/tests/c-style/eclipses.test.ts +84 -0
- package/tests/c-style/fixed-stars.test.ts +66 -0
- package/tests/c-style/heliacal.test.ts +34 -0
- package/tests/c-style/houses.test.ts +135 -0
- package/tests/c-style/math-utils.test.ts +160 -0
- package/tests/c-style/orbital.test.ts +78 -0
- package/tests/c-style/phenomena.test.ts +42 -0
- package/tests/c-style/planetocentric.test.ts +26 -0
- package/tests/c-style/planets.test.ts +117 -0
- package/tests/c-style/rise-set.test.ts +71 -0
- package/tests/helpers.ts +21 -0
- package/tests/modern/ayanamsa.test.ts +47 -0
- package/tests/modern/calc.test.ts +113 -0
- package/tests/modern/config.test.ts +46 -0
- package/tests/modern/crossings.test.ts +45 -0
- package/tests/modern/eclipses.test.ts +81 -0
- package/tests/modern/errors.test.ts +71 -0
- package/tests/modern/heliacal.test.ts +30 -0
- package/tests/modern/houses.test.ts +87 -0
- package/tests/modern/orbital.test.ts +79 -0
- package/tests/modern/phenomena.test.ts +41 -0
- package/tests/modern/rise-set.test.ts +60 -0
- package/tests/modern/statics.test.ts +99 -0
- package/tests/modern/utilities.test.ts +70 -0
- package/tsconfig.json +20 -0
package/src/swemmoon.ts
ADDED
|
@@ -0,0 +1,1318 @@
|
|
|
1
|
+
/* SWISSEPH
|
|
2
|
+
*
|
|
3
|
+
* Steve Moshier's analytical lunar ephemeris
|
|
4
|
+
*
|
|
5
|
+
* TypeScript translation of swemmoon.c (DE404 version)
|
|
6
|
+
*
|
|
7
|
+
* Copyright (C) 1997 - 2021 Astrodienst AG, Switzerland.
|
|
8
|
+
* All rights reserved. (AGPL)
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* Expansions for the geocentric ecliptic longitude,
|
|
13
|
+
* latitude, and distance of the Moon referred to the mean equinox
|
|
14
|
+
* and ecliptic of date.
|
|
15
|
+
*
|
|
16
|
+
* This version adjusts the ELP2000-85 analytical Lunar theory of
|
|
17
|
+
* Chapront-Touze and Chapront to fit the JPL DE404 long ephemeris
|
|
18
|
+
* on the interval from 3000 B.C. to 3000 A.D.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import {
|
|
22
|
+
J2000, STR, PI, DEGTORAD, RADTODEG, AUNIT,
|
|
23
|
+
OK, ERR, SEFLG_MOSEPH,
|
|
24
|
+
SEI_MOON, SEI_INTP_APOG, SEI_INTP_PERG,
|
|
25
|
+
MOSHLUEPH_START, MOSHLUEPH_END, MOSHNDEPH_START, MOSHNDEPH_END,
|
|
26
|
+
JPL_DE431_START, JPL_DE431_END,
|
|
27
|
+
MOON_SPEED_INTV, MOON_MEAN_DIST, MOON_MEAN_ECC, MOON_MEAN_INCL,
|
|
28
|
+
J_TO_J2000,
|
|
29
|
+
} from './constants';
|
|
30
|
+
|
|
31
|
+
import type { SweData } from './types';
|
|
32
|
+
|
|
33
|
+
import {
|
|
34
|
+
swiPolcart, swiCoortrf, swiCoortrf2, swiPrecess,
|
|
35
|
+
swiCartpol, sweDegnorm, swiMod2PI,
|
|
36
|
+
} from './swephlib';
|
|
37
|
+
|
|
38
|
+
/* =====================================================================
|
|
39
|
+
* DE404 fitted coefficients (z array, 25 values)
|
|
40
|
+
* ===================================================================== */
|
|
41
|
+
const z: Float64Array = new Float64Array([
|
|
42
|
+
/* The following are scaled in arc seconds, time in Julian centuries.
|
|
43
|
+
They replace the corresponding terms in the mean elements. */
|
|
44
|
+
-1.312045233711e+01, /* F, t^2 */
|
|
45
|
+
-1.138215912580e-03, /* F, t^3 */
|
|
46
|
+
-9.646018347184e-06, /* F, t^4 */
|
|
47
|
+
3.146734198839e+01, /* l, t^2 */
|
|
48
|
+
4.768357585780e-02, /* l, t^3 */
|
|
49
|
+
-3.421689790404e-04, /* l, t^4 */
|
|
50
|
+
-6.847070905410e+00, /* D, t^2 */
|
|
51
|
+
-5.834100476561e-03, /* D, t^3 */
|
|
52
|
+
-2.905334122698e-04, /* D, t^4 */
|
|
53
|
+
-5.663161722088e+00, /* L, t^2 */
|
|
54
|
+
5.722859298199e-03, /* L, t^3 */
|
|
55
|
+
-8.466472828815e-05, /* L, t^4 */
|
|
56
|
+
/* The following longitude terms are in arc seconds times 10^5. */
|
|
57
|
+
-8.429817796435e+01, /* t^2 cos(18V - 16E - l) */
|
|
58
|
+
-2.072552484689e+02, /* t^2 sin(18V - 16E - l) */
|
|
59
|
+
7.876842214863e+00, /* t^2 cos(10V - 3E - l) */
|
|
60
|
+
1.836463749022e+00, /* t^2 sin(10V - 3E - l) */
|
|
61
|
+
-1.557471855361e+01, /* t^2 cos(8V - 13E) */
|
|
62
|
+
-2.006969124724e+01, /* t^2 sin(8V - 13E) */
|
|
63
|
+
2.152670284757e+01, /* t^2 cos(4E - 8M + 3J) */
|
|
64
|
+
-6.179946916139e+00, /* t^2 sin(4E - 8M + 3J) */
|
|
65
|
+
-9.070028191196e-01, /* t^2 cos(18V - 16E) */
|
|
66
|
+
-1.270848233038e+01, /* t^2 sin(18V - 16E) */
|
|
67
|
+
-2.145589319058e+00, /* t^2 cos(2J - 5S) */
|
|
68
|
+
1.381936399935e+01, /* t^2 sin(2J - 5S) */
|
|
69
|
+
-1.999840061168e+00, /* t^3 sin(l') */
|
|
70
|
+
]);
|
|
71
|
+
|
|
72
|
+
/* =====================================================================
|
|
73
|
+
* Perturbation tables
|
|
74
|
+
* ===================================================================== */
|
|
75
|
+
|
|
76
|
+
const NLR = 118;
|
|
77
|
+
const LR: Int16Array = new Int16Array([
|
|
78
|
+
/* Longitude Radius
|
|
79
|
+
D l' l F 1" .0001" 1km .0001km */
|
|
80
|
+
|
|
81
|
+
0, 0, 1, 0, 22639, 5858,-20905,-3550,
|
|
82
|
+
2, 0,-1, 0, 4586, 4383, -3699,-1109,
|
|
83
|
+
2, 0, 0, 0, 2369, 9139, -2955,-9676,
|
|
84
|
+
0, 0, 2, 0, 769, 257, -569,-9251,
|
|
85
|
+
0, 1, 0, 0, -666,-4171, 48, 8883,
|
|
86
|
+
0, 0, 0, 2, -411,-5957, -3,-1483,
|
|
87
|
+
2, 0,-2, 0, 211, 6556, 246, 1585,
|
|
88
|
+
2,-1,-1, 0, 205, 4358, -152,-1377,
|
|
89
|
+
2, 0, 1, 0, 191, 9562, -170,-7331,
|
|
90
|
+
2,-1, 0, 0, 164, 7285, -204,-5860,
|
|
91
|
+
0, 1,-1, 0, -147,-3213, -129,-6201,
|
|
92
|
+
1, 0, 0, 0, -124,-9881, 108, 7427,
|
|
93
|
+
0, 1, 1, 0, -109,-3803, 104, 7552,
|
|
94
|
+
2, 0, 0,-2, 55, 1771, 10, 3211,
|
|
95
|
+
0, 0, 1, 2, -45, -996, 0, 0,
|
|
96
|
+
0, 0, 1,-2, 39, 5333, 79, 6606,
|
|
97
|
+
4, 0,-1, 0, 38, 4298, -34,-7825,
|
|
98
|
+
0, 0, 3, 0, 36, 1238, -23,-2104,
|
|
99
|
+
4, 0,-2, 0, 30, 7726, -21,-6363,
|
|
100
|
+
2, 1,-1, 0, -28,-3971, 24, 2085,
|
|
101
|
+
2, 1, 0, 0, -24,-3582, 30, 8238,
|
|
102
|
+
1, 0,-1, 0, -18,-5847, -8,-3791,
|
|
103
|
+
1, 1, 0, 0, 17, 9545, -16,-6747,
|
|
104
|
+
2,-1, 1, 0, 14, 5303, -12,-8314,
|
|
105
|
+
2, 0, 2, 0, 14, 3797, -10,-4448,
|
|
106
|
+
4, 0, 0, 0, 13, 8991, -11,-6500,
|
|
107
|
+
2, 0,-3, 0, 13, 1941, 14, 4027,
|
|
108
|
+
0, 1,-2, 0, -9,-6791, -7, -27,
|
|
109
|
+
2, 0,-1, 2, -9,-3659, 0, 7740,
|
|
110
|
+
2,-1,-2, 0, 8, 6055, 10, 562,
|
|
111
|
+
1, 0, 1, 0, -8,-4531, 6, 3220,
|
|
112
|
+
2,-2, 0, 0, 8, 502, -9,-8845,
|
|
113
|
+
0, 1, 2, 0, -7,-6302, 5, 7509,
|
|
114
|
+
0, 2, 0, 0, -7,-4475, 1, 657,
|
|
115
|
+
2,-2,-1, 0, 7, 3712, -4,-9501,
|
|
116
|
+
2, 0, 1,-2, -6,-3832, 4, 1311,
|
|
117
|
+
2, 0, 0, 2, -5,-7416, 0, 0,
|
|
118
|
+
4,-1,-1, 0, 4, 3740, -3,-9580,
|
|
119
|
+
0, 0, 2, 2, -3,-9976, 0, 0,
|
|
120
|
+
3, 0,-1, 0, -3,-2097, 3, 2582,
|
|
121
|
+
2, 1, 1, 0, -2,-9145, 2, 6164,
|
|
122
|
+
4,-1,-2, 0, 2, 7319, -1,-8970,
|
|
123
|
+
0, 2,-1, 0, -2,-5679, -2,-1171,
|
|
124
|
+
2, 2,-1, 0, -2,-5212, 2, 3536,
|
|
125
|
+
2, 1,-2, 0, 2, 4889, 0, 1437,
|
|
126
|
+
2,-1, 0,-2, 2, 1461, 0, 6571,
|
|
127
|
+
4, 0, 1, 0, 1, 9777, -1,-4226,
|
|
128
|
+
0, 0, 4, 0, 1, 9337, -1,-1169,
|
|
129
|
+
4,-1, 0, 0, 1, 8708, -1,-5714,
|
|
130
|
+
1, 0,-2, 0, -1,-7530, -1,-7385,
|
|
131
|
+
2, 1, 0,-2, -1,-4372, 0,-1357,
|
|
132
|
+
0, 0, 2,-2, -1,-3726, -4,-4212,
|
|
133
|
+
1, 1, 1, 0, 1, 2618, 0,-9333,
|
|
134
|
+
3, 0,-2, 0, -1,-2241, 0, 8624,
|
|
135
|
+
4, 0,-3, 0, 1, 1868, 0,-5142,
|
|
136
|
+
2,-1, 2, 0, 1, 1770, 0,-8488,
|
|
137
|
+
0, 2, 1, 0, -1,-1617, 1, 1655,
|
|
138
|
+
1, 1,-1, 0, 1, 777, 0, 8512,
|
|
139
|
+
2, 0, 3, 0, 1, 595, 0,-6697,
|
|
140
|
+
2, 0, 1, 2, 0,-9902, 0, 0,
|
|
141
|
+
2, 0,-4, 0, 0, 9483, 0, 7785,
|
|
142
|
+
2,-2, 1, 0, 0, 7517, 0,-6575,
|
|
143
|
+
0, 1,-3, 0, 0,-6694, 0,-4224,
|
|
144
|
+
4, 1,-1, 0, 0,-6352, 0, 5788,
|
|
145
|
+
1, 0, 2, 0, 0,-5840, 0, 3785,
|
|
146
|
+
1, 0, 0,-2, 0,-5833, 0,-7956,
|
|
147
|
+
6, 0,-2, 0, 0, 5716, 0,-4225,
|
|
148
|
+
2, 0,-2,-2, 0,-5606, 0, 4726,
|
|
149
|
+
1,-1, 0, 0, 0,-5569, 0, 4976,
|
|
150
|
+
0, 1, 3, 0, 0,-5459, 0, 3551,
|
|
151
|
+
2, 0,-2, 2, 0,-5357, 0, 7740,
|
|
152
|
+
2, 0,-1,-2, 0, 1790, 8, 7516,
|
|
153
|
+
3, 0, 0, 0, 0, 4042, -1,-4189,
|
|
154
|
+
2,-1,-3, 0, 0, 4784, 0, 4950,
|
|
155
|
+
2,-1, 3, 0, 0, 932, 0, -585,
|
|
156
|
+
2, 0, 2,-2, 0,-4538, 0, 2840,
|
|
157
|
+
2,-1,-1, 2, 0,-4262, 0, 373,
|
|
158
|
+
0, 0, 0, 4, 0, 4203, 0, 0,
|
|
159
|
+
0, 1, 0, 2, 0, 4134, 0,-1580,
|
|
160
|
+
6, 0,-1, 0, 0, 3945, 0,-2866,
|
|
161
|
+
2,-1, 0, 2, 0,-3821, 0, 0,
|
|
162
|
+
2,-1, 1,-2, 0,-3745, 0, 2094,
|
|
163
|
+
4, 1,-2, 0, 0,-3576, 0, 2370,
|
|
164
|
+
1, 1,-2, 0, 0, 3497, 0, 3323,
|
|
165
|
+
2,-3, 0, 0, 0, 3398, 0,-4107,
|
|
166
|
+
0, 0, 3, 2, 0,-3286, 0, 0,
|
|
167
|
+
4,-2,-1, 0, 0,-3087, 0,-2790,
|
|
168
|
+
0, 1,-1,-2, 0, 3015, 0, 0,
|
|
169
|
+
4, 0,-1,-2, 0, 3009, 0,-3218,
|
|
170
|
+
2,-2,-2, 0, 0, 2942, 0, 3430,
|
|
171
|
+
6, 0,-3, 0, 0, 2925, 0,-1832,
|
|
172
|
+
2, 1, 2, 0, 0,-2902, 0, 2125,
|
|
173
|
+
4, 1, 0, 0, 0,-2891, 0, 2445,
|
|
174
|
+
4,-1, 1, 0, 0, 2825, 0,-2029,
|
|
175
|
+
3, 1,-1, 0, 0, 2737, 0,-2126,
|
|
176
|
+
0, 1, 1, 2, 0, 2634, 0, 0,
|
|
177
|
+
1, 0, 0, 2, 0, 2543, 0, 0,
|
|
178
|
+
3, 0, 0,-2, 0,-2530, 0, 2010,
|
|
179
|
+
2, 2,-2, 0, 0,-2499, 0,-1089,
|
|
180
|
+
2,-3,-1, 0, 0, 2469, 0,-1481,
|
|
181
|
+
3,-1,-1, 0, 0,-2314, 0, 2556,
|
|
182
|
+
4, 0, 2, 0, 0, 2185, 0,-1392,
|
|
183
|
+
4, 0,-1, 2, 0,-2013, 0, 0,
|
|
184
|
+
0, 2,-2, 0, 0,-1931, 0, 0,
|
|
185
|
+
2, 2, 0, 0, 0,-1858, 0, 0,
|
|
186
|
+
2, 1,-3, 0, 0, 1762, 0, 0,
|
|
187
|
+
4, 0,-2, 2, 0,-1698, 0, 0,
|
|
188
|
+
4,-2,-2, 0, 0, 1578, 0,-1083,
|
|
189
|
+
4,-2, 0, 0, 0, 1522, 0,-1281,
|
|
190
|
+
3, 1, 0, 0, 0, 1499, 0,-1077,
|
|
191
|
+
1,-1,-1, 0, 0,-1364, 0, 1141,
|
|
192
|
+
1,-3, 0, 0, 0,-1281, 0, 0,
|
|
193
|
+
6, 0, 0, 0, 0, 1261, 0, -859,
|
|
194
|
+
2, 0, 2, 2, 0,-1239, 0, 0,
|
|
195
|
+
1,-1, 1, 0, 0,-1207, 0, 1100,
|
|
196
|
+
0, 0, 5, 0, 0, 1110, 0, -589,
|
|
197
|
+
0, 3, 0, 0, 0,-1013, 0, 213,
|
|
198
|
+
4,-1,-3, 0, 0, 998, 0, 0,
|
|
199
|
+
]);
|
|
200
|
+
|
|
201
|
+
const NMB = 77;
|
|
202
|
+
const MB: Int16Array = new Int16Array([
|
|
203
|
+
/* Latitude
|
|
204
|
+
D l' l F 1" .0001" */
|
|
205
|
+
|
|
206
|
+
0, 0, 0, 1,18461, 2387,
|
|
207
|
+
0, 0, 1, 1, 1010, 1671,
|
|
208
|
+
0, 0, 1,-1, 999, 6936,
|
|
209
|
+
2, 0, 0,-1, 623, 6524,
|
|
210
|
+
2, 0,-1, 1, 199, 4837,
|
|
211
|
+
2, 0,-1,-1, 166, 5741,
|
|
212
|
+
2, 0, 0, 1, 117, 2607,
|
|
213
|
+
0, 0, 2, 1, 61, 9120,
|
|
214
|
+
2, 0, 1,-1, 33, 3572,
|
|
215
|
+
0, 0, 2,-1, 31, 7597,
|
|
216
|
+
2,-1, 0,-1, 29, 5766,
|
|
217
|
+
2, 0,-2,-1, 15, 5663,
|
|
218
|
+
2, 0, 1, 1, 15, 1216,
|
|
219
|
+
2, 1, 0,-1, -12, -941,
|
|
220
|
+
2,-1,-1, 1, 8, 8681,
|
|
221
|
+
2,-1, 0, 1, 7, 9586,
|
|
222
|
+
2,-1,-1,-1, 7, 4346,
|
|
223
|
+
0, 1,-1,-1, -6,-7314,
|
|
224
|
+
4, 0,-1,-1, 6, 5796,
|
|
225
|
+
0, 1, 0, 1, -6,-4601,
|
|
226
|
+
0, 0, 0, 3, -6,-2965,
|
|
227
|
+
0, 1,-1, 1, -5,-6324,
|
|
228
|
+
1, 0, 0, 1, -5,-3684,
|
|
229
|
+
0, 1, 1, 1, -5,-3113,
|
|
230
|
+
0, 1, 1,-1, -5, -759,
|
|
231
|
+
0, 1, 0,-1, -4,-8396,
|
|
232
|
+
1, 0, 0,-1, -4,-8057,
|
|
233
|
+
0, 0, 3, 1, 3, 9841,
|
|
234
|
+
4, 0, 0,-1, 3, 6745,
|
|
235
|
+
4, 0,-1, 1, 2, 9985,
|
|
236
|
+
0, 0, 1,-3, 2, 7986,
|
|
237
|
+
4, 0,-2, 1, 2, 4139,
|
|
238
|
+
2, 0, 0,-3, 2, 1863,
|
|
239
|
+
2, 0, 2,-1, 2, 1462,
|
|
240
|
+
2,-1, 1,-1, 1, 7660,
|
|
241
|
+
2, 0,-2, 1, -1,-6244,
|
|
242
|
+
0, 0, 3,-1, 1, 5813,
|
|
243
|
+
2, 0, 2, 1, 1, 5198,
|
|
244
|
+
2, 0,-3,-1, 1, 5156,
|
|
245
|
+
2, 1,-1, 1, -1,-3178,
|
|
246
|
+
2, 1, 0, 1, -1,-2643,
|
|
247
|
+
4, 0, 0, 1, 1, 1919,
|
|
248
|
+
2,-1, 1, 1, 1, 1346,
|
|
249
|
+
2,-2, 0,-1, 1, 859,
|
|
250
|
+
0, 0, 1, 3, -1, -194,
|
|
251
|
+
2, 1, 1,-1, 0,-8227,
|
|
252
|
+
1, 1, 0,-1, 0, 8042,
|
|
253
|
+
1, 1, 0, 1, 0, 8026,
|
|
254
|
+
0, 1,-2,-1, 0,-7932,
|
|
255
|
+
2, 1,-1,-1, 0,-7910,
|
|
256
|
+
1, 0, 1, 1, 0,-6674,
|
|
257
|
+
2,-1,-2,-1, 0, 6502,
|
|
258
|
+
0, 1, 2, 1, 0,-6388,
|
|
259
|
+
4, 0,-2,-1, 0, 6337,
|
|
260
|
+
4,-1,-1,-1, 0, 5958,
|
|
261
|
+
1, 0, 1,-1, 0,-5889,
|
|
262
|
+
4, 0, 1,-1, 0, 4734,
|
|
263
|
+
1, 0,-1,-1, 0,-4299,
|
|
264
|
+
4,-1, 0,-1, 0, 4149,
|
|
265
|
+
2,-2, 0, 1, 0, 3835,
|
|
266
|
+
3, 0, 0,-1, 0,-3518,
|
|
267
|
+
4,-1,-1, 1, 0, 3388,
|
|
268
|
+
2, 0,-1,-3, 0, 3291,
|
|
269
|
+
2,-2,-1, 1, 0, 3147,
|
|
270
|
+
0, 1, 2,-1, 0,-3129,
|
|
271
|
+
3, 0,-1,-1, 0,-3052,
|
|
272
|
+
0, 1,-2, 1, 0,-3013,
|
|
273
|
+
2, 0, 1,-3, 0,-2912,
|
|
274
|
+
2,-2,-1,-1, 0, 2686,
|
|
275
|
+
0, 0, 4, 1, 0, 2633,
|
|
276
|
+
2, 0,-3, 1, 0, 2541,
|
|
277
|
+
2, 0,-1, 3, 0,-2448,
|
|
278
|
+
2, 1, 1, 1, 0,-2370,
|
|
279
|
+
4,-1,-2, 1, 0, 2138,
|
|
280
|
+
4, 0, 1, 1, 0, 2126,
|
|
281
|
+
3, 0,-1, 1, 0,-2059,
|
|
282
|
+
4, 1,-1,-1, 0,-1719,
|
|
283
|
+
]);
|
|
284
|
+
|
|
285
|
+
const NLRT = 38;
|
|
286
|
+
const LRT: Int16Array = new Int16Array([
|
|
287
|
+
/*
|
|
288
|
+
Multiply by T
|
|
289
|
+
Longitude Radius
|
|
290
|
+
D l' l F .1" .00001" .1km .00001km */
|
|
291
|
+
|
|
292
|
+
0, 1, 0, 0, 16, 7680, -1,-2302,
|
|
293
|
+
2,-1,-1, 0, -5,-1642, 3, 8245,
|
|
294
|
+
2,-1, 0, 0, -4,-1383, 5, 1395,
|
|
295
|
+
0, 1,-1, 0, 3, 7115, 3, 2654,
|
|
296
|
+
0, 1, 1, 0, 2, 7560, -2,-6396,
|
|
297
|
+
2, 1,-1, 0, 0, 7118, 0,-6068,
|
|
298
|
+
2, 1, 0, 0, 0, 6128, 0,-7754,
|
|
299
|
+
1, 1, 0, 0, 0,-4516, 0, 4194,
|
|
300
|
+
2,-2, 0, 0, 0,-4048, 0, 4970,
|
|
301
|
+
0, 2, 0, 0, 0, 3747, 0, -540,
|
|
302
|
+
2,-2,-1, 0, 0,-3707, 0, 2490,
|
|
303
|
+
2,-1, 1, 0, 0,-3649, 0, 3222,
|
|
304
|
+
0, 1,-2, 0, 0, 2438, 0, 1760,
|
|
305
|
+
2,-1,-2, 0, 0,-2165, 0,-2530,
|
|
306
|
+
0, 1, 2, 0, 0, 1923, 0,-1450,
|
|
307
|
+
0, 2,-1, 0, 0, 1292, 0, 1070,
|
|
308
|
+
2, 2,-1, 0, 0, 1271, 0,-6070,
|
|
309
|
+
4,-1,-1, 0, 0,-1098, 0, 990,
|
|
310
|
+
2, 0, 0, 0, 0, 1073, 0,-1360,
|
|
311
|
+
2, 0,-1, 0, 0, 839, 0, -630,
|
|
312
|
+
2, 1, 1, 0, 0, 734, 0, -660,
|
|
313
|
+
4,-1,-2, 0, 0, -688, 0, 480,
|
|
314
|
+
2, 1,-2, 0, 0, -630, 0, 0,
|
|
315
|
+
0, 2, 1, 0, 0, 587, 0, -590,
|
|
316
|
+
2,-1, 0,-2, 0, -540, 0, -170,
|
|
317
|
+
4,-1, 0, 0, 0, -468, 0, 390,
|
|
318
|
+
2,-2, 1, 0, 0, -378, 0, 330,
|
|
319
|
+
2, 1, 0,-2, 0, 364, 0, 0,
|
|
320
|
+
1, 1, 1, 0, 0, -317, 0, 240,
|
|
321
|
+
2,-1, 2, 0, 0, -295, 0, 210,
|
|
322
|
+
1, 1,-1, 0, 0, -270, 0, -210,
|
|
323
|
+
2,-3, 0, 0, 0, -256, 0, 310,
|
|
324
|
+
2,-3,-1, 0, 0, -187, 0, 110,
|
|
325
|
+
0, 1,-3, 0, 0, 169, 0, 110,
|
|
326
|
+
4, 1,-1, 0, 0, 158, 0, -150,
|
|
327
|
+
4,-2,-1, 0, 0, -155, 0, 140,
|
|
328
|
+
0, 0, 1, 0, 0, 155, 0, -250,
|
|
329
|
+
2,-2,-2, 0, 0, -148, 0, -170,
|
|
330
|
+
]);
|
|
331
|
+
|
|
332
|
+
const NBT = 16;
|
|
333
|
+
const BT: Int16Array = new Int16Array([
|
|
334
|
+
/*
|
|
335
|
+
Multiply by T
|
|
336
|
+
Latitude
|
|
337
|
+
D l' l F .00001" */
|
|
338
|
+
|
|
339
|
+
2,-1, 0,-1, -7430,
|
|
340
|
+
2, 1, 0,-1, 3043,
|
|
341
|
+
2,-1,-1, 1, -2229,
|
|
342
|
+
2,-1, 0, 1, -1999,
|
|
343
|
+
2,-1,-1,-1, -1869,
|
|
344
|
+
0, 1,-1,-1, 1696,
|
|
345
|
+
0, 1, 0, 1, 1623,
|
|
346
|
+
0, 1,-1, 1, 1418,
|
|
347
|
+
0, 1, 1, 1, 1339,
|
|
348
|
+
0, 1, 1,-1, 1278,
|
|
349
|
+
0, 1, 0,-1, 1217,
|
|
350
|
+
2,-2, 0,-1, -547,
|
|
351
|
+
2,-1, 1,-1, -443,
|
|
352
|
+
2, 1,-1, 1, 331,
|
|
353
|
+
2, 1, 0, 1, 317,
|
|
354
|
+
2, 0, 0,-1, 295,
|
|
355
|
+
]);
|
|
356
|
+
|
|
357
|
+
const NLRT2 = 25;
|
|
358
|
+
const LRT2: Int16Array = new Int16Array([
|
|
359
|
+
/*
|
|
360
|
+
Multiply by T^2
|
|
361
|
+
Longitude Radius
|
|
362
|
+
D l' l F .00001" .00001km */
|
|
363
|
+
|
|
364
|
+
0, 1, 0, 0, 487, -36,
|
|
365
|
+
2,-1,-1, 0, -150, 111,
|
|
366
|
+
2,-1, 0, 0, -120, 149,
|
|
367
|
+
0, 1,-1, 0, 108, 95,
|
|
368
|
+
0, 1, 1, 0, 80, -77,
|
|
369
|
+
2, 1,-1, 0, 21, -18,
|
|
370
|
+
2, 1, 0, 0, 20, -23,
|
|
371
|
+
1, 1, 0, 0, -13, 12,
|
|
372
|
+
2,-2, 0, 0, -12, 14,
|
|
373
|
+
2,-1, 1, 0, -11, 9,
|
|
374
|
+
2,-2,-1, 0, -11, 7,
|
|
375
|
+
0, 2, 0, 0, 11, 0,
|
|
376
|
+
2,-1,-2, 0, -6, -7,
|
|
377
|
+
0, 1,-2, 0, 7, 5,
|
|
378
|
+
0, 1, 2, 0, 6, -4,
|
|
379
|
+
2, 2,-1, 0, 5, -3,
|
|
380
|
+
0, 2,-1, 0, 5, 3,
|
|
381
|
+
4,-1,-1, 0, -3, 3,
|
|
382
|
+
2, 0, 0, 0, 3, -4,
|
|
383
|
+
4,-1,-2, 0, -2, 0,
|
|
384
|
+
2, 1,-2, 0, -2, 0,
|
|
385
|
+
2,-1, 0,-2, -2, 0,
|
|
386
|
+
2, 1, 1, 0, 2, -2,
|
|
387
|
+
2, 0,-1, 0, 2, 0,
|
|
388
|
+
0, 2, 1, 0, 2, 0,
|
|
389
|
+
]);
|
|
390
|
+
|
|
391
|
+
const NBT2 = 12;
|
|
392
|
+
const BT2: Int16Array = new Int16Array([
|
|
393
|
+
/*
|
|
394
|
+
Multiply by T^2
|
|
395
|
+
Latitude
|
|
396
|
+
D l' l F .00001" */
|
|
397
|
+
|
|
398
|
+
2,-1, 0,-1, -22,
|
|
399
|
+
2, 1, 0,-1, 9,
|
|
400
|
+
2,-1, 0, 1, -6,
|
|
401
|
+
2,-1,-1, 1, -6,
|
|
402
|
+
2,-1,-1,-1, -5,
|
|
403
|
+
0, 1, 0, 1, 5,
|
|
404
|
+
0, 1,-1,-1, 5,
|
|
405
|
+
0, 1, 1, 1, 4,
|
|
406
|
+
0, 1, 1,-1, 4,
|
|
407
|
+
0, 1, 0,-1, 4,
|
|
408
|
+
0, 1,-1, 1, 4,
|
|
409
|
+
2,-2, 0,-1, -2,
|
|
410
|
+
]);
|
|
411
|
+
|
|
412
|
+
/* corrections for mean lunar node in degrees, from -13100 to 17200,
|
|
413
|
+
* in 100-year steps. corrections are set to 0 between the years 0 and 3000 */
|
|
414
|
+
const mean_node_corr: Float64Array = new Float64Array([
|
|
415
|
+
-2.56,
|
|
416
|
+
-2.473, -2.392347, -2.316425, -2.239639, -2.167764, -2.095100, -2.024810, -1.957622, -1.890097, -1.826389,
|
|
417
|
+
-1.763335, -1.701047, -1.643016, -1.584186, -1.527309, -1.473352, -1.418917, -1.367736, -1.317202, -1.267269,
|
|
418
|
+
-1.221121, -1.174218, -1.128862, -1.086214, -1.042998, -1.002491, -0.962635, -0.923176, -0.887191, -0.850403,
|
|
419
|
+
-0.814929, -0.782117, -0.748462, -0.717241, -0.686598, -0.656013, -0.628726, -0.600460, -0.573219, -0.548634,
|
|
420
|
+
-0.522931, -0.499285, -0.476273, -0.452978, -0.432663, -0.411386, -0.390788, -0.372825, -0.353681, -0.336230,
|
|
421
|
+
-0.319520, -0.302343, -0.287794, -0.272262, -0.257166, -0.244534, -0.230635, -0.218126, -0.206365, -0.194000,
|
|
422
|
+
-0.183876, -0.172782, -0.161877, -0.153254, -0.143371, -0.134501, -0.126552, -0.117932, -0.111199, -0.103716,
|
|
423
|
+
-0.096160, -0.090718, -0.084046, -0.078007, -0.072959, -0.067235, -0.062990, -0.058102, -0.053070, -0.049786,
|
|
424
|
+
-0.045381, -0.041317, -0.038165, -0.034501, -0.031871, -0.028844, -0.025701, -0.024018, -0.021427, -0.018881,
|
|
425
|
+
-0.017291, -0.015186, -0.013755, -0.012098, -0.010261, -0.009688, -0.008218, -0.006670, -0.005979, -0.004756,
|
|
426
|
+
-0.003991, -0.002996, -0.001974, -0.001975, -0.001213, -0.000377, -0.000356, 5.779e-05, 0.000378, 0.000710,
|
|
427
|
+
0.001092, 0.000767, 0.000985, 0.001443, 0.001069, 0.001141, 0.001321, 0.001462, 0.001695, 0.001319,
|
|
428
|
+
0.001567, 0.001873, 0.001376, 0.001336, 0.001347, 0.001330, 0.001256, 0.000813, 0.000946, 0.001079,
|
|
429
|
+
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
|
430
|
+
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
|
431
|
+
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
|
432
|
+
-0.000364, -0.000452, -0.001091, -0.001159, -0.001136, -0.001798, -0.002249, -0.002622, -0.002990, -0.003555,
|
|
433
|
+
-0.004425, -0.004758, -0.005134, -0.006065, -0.006839, -0.007474, -0.008283, -0.009411, -0.010786, -0.011810,
|
|
434
|
+
-0.012989, -0.014825, -0.016426, -0.017922, -0.019774, -0.021881, -0.024194, -0.026190, -0.028440, -0.031285,
|
|
435
|
+
-0.033817, -0.036318, -0.039212, -0.042456, -0.045799, -0.048994, -0.052710, -0.056948, -0.061017, -0.065181,
|
|
436
|
+
-0.069843, -0.074922, -0.079976, -0.085052, -0.090755, -0.096840, -0.102797, -0.108939, -0.115568, -0.122636,
|
|
437
|
+
-0.129593, -0.136683, -0.144641, -0.152825, -0.161044, -0.169758, -0.178916, -0.188712, -0.198401, -0.208312,
|
|
438
|
+
-0.219395, -0.230407, -0.241577, -0.253508, -0.265640, -0.278556, -0.291330, -0.304353, -0.318815, -0.332882,
|
|
439
|
+
-0.347316, -0.362895, -0.378421, -0.395061, -0.411748, -0.428666, -0.447477, -0.465636, -0.484277, -0.504600,
|
|
440
|
+
-0.524405, -0.545533, -0.567020, -0.588404, -0.612099, -0.634965, -0.658262, -0.683866, -0.708526, -0.734719,
|
|
441
|
+
-0.761800, -0.788562, -0.818092, -0.846885, -0.876177, -0.908385, -0.939371, -0.972027, -1.006149, -1.039634,
|
|
442
|
+
-1.076135, -1.112156, -1.148490, -1.188312, -1.226761, -1.266821, -1.309156, -1.350583, -1.395223, -1.440028,
|
|
443
|
+
-1.485047, -1.534104, -1.582023, -1.631506, -1.684031, -1.735687, -1.790421, -1.846039, -1.901951, -1.961872,
|
|
444
|
+
-2.021179, -2.081987, -2.146259, -2.210031, -2.276609, -2.344904, -2.413795, -2.486559, -2.559564, -2.634215,
|
|
445
|
+
-2.712692, -2.791289, -2.872533, -2.956217, -3.040965, -3.129234, -3.218545, -3.309805, -3.404827, -3.5008,
|
|
446
|
+
-3.601, -3.7, -3.8,
|
|
447
|
+
]);
|
|
448
|
+
|
|
449
|
+
/* corrections for mean lunar apsides in degrees, from -13100 to 17200,
|
|
450
|
+
* in 100-year steps. corrections are set to 0 between the years 0 and 3000 */
|
|
451
|
+
const mean_apsis_corr: Float64Array = new Float64Array([
|
|
452
|
+
7.525,
|
|
453
|
+
7.290, 7.057295, 6.830813, 6.611723, 6.396775, 6.189569, 5.985968, 5.788342, 5.597304, 5.410167,
|
|
454
|
+
5.229946, 5.053389, 4.882187, 4.716494, 4.553532, 4.396734, 4.243718, 4.094282, 3.950865, 3.810366,
|
|
455
|
+
3.674978, 3.543284, 3.414270, 3.290526, 3.168775, 3.050904, 2.937541, 2.826189, 2.719822, 2.616193,
|
|
456
|
+
2.515431, 2.419193, 2.323782, 2.232545, 2.143635, 2.056803, 1.974913, 1.893874, 1.816201, 1.741957,
|
|
457
|
+
1.668083, 1.598335, 1.529645, 1.463016, 1.399693, 1.336905, 1.278097, 1.220965, 1.165092, 1.113071,
|
|
458
|
+
1.060858, 1.011007, 0.963701, 0.916523, 0.872887, 0.829596, 0.788486, 0.750017, 0.711177, 0.675589,
|
|
459
|
+
0.640303, 0.605303, 0.573490, 0.541113, 0.511482, 0.483159, 0.455210, 0.430305, 0.404643, 0.380782,
|
|
460
|
+
0.358524, 0.335405, 0.315244, 0.295131, 0.275766, 0.259223, 0.241586, 0.225890, 0.210404, 0.194775,
|
|
461
|
+
0.181573, 0.167246, 0.154514, 0.143435, 0.131131, 0.121648, 0.111835, 0.102474, 0.094284, 0.085204,
|
|
462
|
+
0.078240, 0.070697, 0.063696, 0.058894, 0.052390, 0.047632, 0.043129, 0.037823, 0.034143, 0.029188,
|
|
463
|
+
0.025648, 0.021972, 0.018348, 0.017127, 0.013989, 0.011967, 0.011003, 0.007865, 0.007033, 0.005574,
|
|
464
|
+
0.004060, 0.003699, 0.002465, 0.002889, 0.002144, 0.001018, 0.001757, -9.67e-05, -0.000734, -0.000392,
|
|
465
|
+
-0.001546, -0.000863, -0.001266, -0.000933, -0.000503, -0.001304, 0.000238, -0.000507, -0.000897, 0.000647,
|
|
466
|
+
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
|
467
|
+
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
|
468
|
+
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
|
469
|
+
0.000514, 0.000683, 0.002228, 0.001974, 0.003485, 0.004280, 0.005409, 0.007468, 0.007938, 0.011012,
|
|
470
|
+
0.012525, 0.013757, 0.016757, 0.017932, 0.020780, 0.023416, 0.026386, 0.030428, 0.033512, 0.038789,
|
|
471
|
+
0.043126, 0.047778, 0.054175, 0.058891, 0.065878, 0.072345, 0.079668, 0.088238, 0.095307, 0.104873,
|
|
472
|
+
0.113533, 0.122336, 0.133205, 0.142922, 0.154871, 0.166488, 0.179234, 0.193928, 0.207262, 0.223089,
|
|
473
|
+
0.238736, 0.254907, 0.273232, 0.291085, 0.311046, 0.331025, 0.351955, 0.374422, 0.396341, 0.420772,
|
|
474
|
+
0.444867, 0.469984, 0.497448, 0.524717, 0.554752, 0.584581, 0.616272, 0.649744, 0.682947, 0.719405,
|
|
475
|
+
0.755834, 0.793780, 0.833875, 0.873893, 0.917340, 0.960429, 1.005471, 1.052384, 1.099317, 1.149508,
|
|
476
|
+
1.200130, 1.253038, 1.307672, 1.363480, 1.422592, 1.481900, 1.544111, 1.607982, 1.672954, 1.741025,
|
|
477
|
+
1.809727, 1.882038, 1.955243, 2.029956, 2.108428, 2.186805, 2.268697, 2.352071, 2.437370, 2.525903,
|
|
478
|
+
2.615415, 2.709082, 2.804198, 2.901704, 3.002606, 3.104412, 3.210406, 3.317733, 3.428386, 3.541634,
|
|
479
|
+
3.656634, 3.775988, 3.896306, 4.020480, 4.146814, 4.275356, 4.408257, 4.542282, 4.681174, 4.822524,
|
|
480
|
+
4.966424, 5.114948, 5.264973, 5.419906, 5.577056, 5.737688, 5.902347, 6.069138, 6.241065, 6.415155,
|
|
481
|
+
6.593317, 6.774853, 6.959322, 7.148845, 7.340334, 7.537156, 7.737358, 7.940882, 8.149932, 8.361576,
|
|
482
|
+
8.579150, 8.799591, 9.024378, 9.254584, 9.487362, 9.726535, 9.968784, 10.216089, 10.467716, 10.725293,
|
|
483
|
+
10.986, 11.25, 11.52,
|
|
484
|
+
]);
|
|
485
|
+
|
|
486
|
+
/* =====================================================================
|
|
487
|
+
* Module-level mutable state (C: static TLS variables)
|
|
488
|
+
* ===================================================================== */
|
|
489
|
+
|
|
490
|
+
const ss: number[][] = [
|
|
491
|
+
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
492
|
+
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
493
|
+
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
494
|
+
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
495
|
+
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
496
|
+
];
|
|
497
|
+
const cc: number[][] = [
|
|
498
|
+
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
499
|
+
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
500
|
+
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
501
|
+
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
502
|
+
[0, 0, 0, 0, 0, 0, 0, 0],
|
|
503
|
+
];
|
|
504
|
+
|
|
505
|
+
let l = 0; /* Moon's ecliptic longitude */
|
|
506
|
+
let B = 0; /* Ecliptic latitude */
|
|
507
|
+
let moonpol = [0.0, 0.0, 0.0];
|
|
508
|
+
|
|
509
|
+
/* Orbit calculation begins */
|
|
510
|
+
let SWELP = 0;
|
|
511
|
+
let M = 0;
|
|
512
|
+
let MP = 0;
|
|
513
|
+
let D = 0;
|
|
514
|
+
let NF = 0;
|
|
515
|
+
let T = 0;
|
|
516
|
+
let T2 = 0;
|
|
517
|
+
let T3 = 0;
|
|
518
|
+
let T4 = 0;
|
|
519
|
+
let f = 0;
|
|
520
|
+
let g = 0;
|
|
521
|
+
let Ve = 0;
|
|
522
|
+
let Ea = 0;
|
|
523
|
+
let Ma = 0;
|
|
524
|
+
let Ju = 0;
|
|
525
|
+
let Sa = 0;
|
|
526
|
+
let cg = 0;
|
|
527
|
+
let sg = 0;
|
|
528
|
+
let l1 = 0;
|
|
529
|
+
let l2 = 0;
|
|
530
|
+
let l3 = 0;
|
|
531
|
+
let l4 = 0;
|
|
532
|
+
|
|
533
|
+
/* =====================================================================
|
|
534
|
+
* Internal helper functions
|
|
535
|
+
* ===================================================================== */
|
|
536
|
+
|
|
537
|
+
/** Reduce arc seconds modulo 360 degrees. Answer in arc seconds. */
|
|
538
|
+
function mods3600(x: number): number {
|
|
539
|
+
return x - 1296000.0 * Math.floor(x / 1296000.0);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/** Compute mean elements (T must be set before calling) */
|
|
543
|
+
function meanElements(): void {
|
|
544
|
+
const fracT = T - Math.trunc(T); /* fmod(T, 1) */
|
|
545
|
+
/* Mean anomaly of sun = l' (J. Laskar) */
|
|
546
|
+
M = mods3600(129600000.0 * fracT - 3418.961646 * T + 1287104.76154);
|
|
547
|
+
M += ((((((((
|
|
548
|
+
1.62e-20 * T
|
|
549
|
+
- 1.0390e-17) * T
|
|
550
|
+
- 3.83508e-15) * T
|
|
551
|
+
+ 4.237343e-13) * T
|
|
552
|
+
+ 8.8555011e-11) * T
|
|
553
|
+
- 4.77258489e-8) * T
|
|
554
|
+
- 1.1297037031e-5) * T
|
|
555
|
+
+ 1.4732069041e-4) * T
|
|
556
|
+
- 0.552891801772) * T2;
|
|
557
|
+
/* DE404: Mean distance of moon from its ascending node = F */
|
|
558
|
+
NF = mods3600(1739232000.0 * fracT + 295263.0983 * T - 2.079419901760e-01 * T + 335779.55755);
|
|
559
|
+
/* Mean anomaly of moon = l */
|
|
560
|
+
MP = mods3600(1717200000.0 * fracT + 715923.4728 * T - 2.035946368532e-01 * T + 485868.28096);
|
|
561
|
+
/* Mean elongation of moon = D */
|
|
562
|
+
D = mods3600(1601856000.0 * fracT + 1105601.4603 * T + 3.962893294503e-01 * T + 1072260.73512);
|
|
563
|
+
/* Mean longitude of moon, referred to mean ecliptic and equinox of date */
|
|
564
|
+
SWELP = mods3600(1731456000.0 * fracT + 1108372.83264 * T - 6.784914260953e-01 * T + 785939.95571);
|
|
565
|
+
/* Higher degree secular terms found by least squares fit */
|
|
566
|
+
NF += ((z[2] * T + z[1]) * T + z[0]) * T2;
|
|
567
|
+
MP += ((z[5] * T + z[4]) * T + z[3]) * T2;
|
|
568
|
+
D += ((z[8] * T + z[7]) * T + z[6]) * T2;
|
|
569
|
+
SWELP += ((z[11] * T + z[10]) * T + z[9]) * T2;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/** Compute planetary mean longitudes */
|
|
573
|
+
function meanElementsPl(): void {
|
|
574
|
+
/* Mean longitudes of planets (Laskar, Bretagnon) */
|
|
575
|
+
Ve = mods3600(210664136.4335482 * T + 655127.283046);
|
|
576
|
+
Ve += ((((((((
|
|
577
|
+
-9.36e-023 * T
|
|
578
|
+
- 1.95e-20) * T
|
|
579
|
+
+ 6.097e-18) * T
|
|
580
|
+
+ 4.43201e-15) * T
|
|
581
|
+
+ 2.509418e-13) * T
|
|
582
|
+
- 3.0622898e-10) * T
|
|
583
|
+
- 2.26602516e-9) * T
|
|
584
|
+
- 1.4244812531e-5) * T
|
|
585
|
+
+ 0.005871373088) * T2;
|
|
586
|
+
Ea = mods3600(129597742.26669231 * T + 361679.214649);
|
|
587
|
+
Ea += ((((((((-1.16e-22 * T
|
|
588
|
+
+ 2.976e-19) * T
|
|
589
|
+
+ 2.8460e-17) * T
|
|
590
|
+
- 1.08402e-14) * T
|
|
591
|
+
- 1.226182e-12) * T
|
|
592
|
+
+ 1.7228268e-10) * T
|
|
593
|
+
+ 1.515912254e-7) * T
|
|
594
|
+
+ 8.863982531e-6) * T
|
|
595
|
+
- 2.0199859001e-2) * T2;
|
|
596
|
+
Ma = mods3600(68905077.59284 * T + 1279559.78866);
|
|
597
|
+
Ma += (-1.043e-5 * T + 9.38012e-3) * T2;
|
|
598
|
+
Ju = mods3600(10925660.428608 * T + 123665.342120);
|
|
599
|
+
Ju += (1.543273e-5 * T - 3.06037836351e-1) * T2;
|
|
600
|
+
Sa = mods3600(4399609.65932 * T + 180278.89694);
|
|
601
|
+
Sa += ((4.475946e-8 * T - 6.874806E-5) * T + 7.56161437443E-1) * T2;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/** Build sin/cos lookup table for multiple angles */
|
|
605
|
+
function sscc_fn(k: number, arg: number, n: number): void {
|
|
606
|
+
const su = Math.sin(arg);
|
|
607
|
+
const cu = Math.cos(arg);
|
|
608
|
+
ss[k][0] = su; /* sin(L) */
|
|
609
|
+
cc[k][0] = cu; /* cos(L) */
|
|
610
|
+
let sv = 2.0 * su * cu;
|
|
611
|
+
let cv = cu * cu - su * su;
|
|
612
|
+
ss[k][1] = sv; /* sin(2L) */
|
|
613
|
+
cc[k][1] = cv;
|
|
614
|
+
for (let i = 2; i < n; i++) {
|
|
615
|
+
const s = su * cv + cu * sv;
|
|
616
|
+
cv = cu * cv - su * sv;
|
|
617
|
+
sv = s;
|
|
618
|
+
ss[k][i] = sv; /* sin( i+1 L ) */
|
|
619
|
+
cc[k][i] = cv;
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
/** Step through the perturbation table */
|
|
624
|
+
function chewm(
|
|
625
|
+
pt: Int16Array, nlines: number, nangles: number,
|
|
626
|
+
typflg: number, ans: number[],
|
|
627
|
+
): void {
|
|
628
|
+
let idx = 0;
|
|
629
|
+
for (let i = 0; i < nlines; i++) {
|
|
630
|
+
let k1 = 0;
|
|
631
|
+
let sv = 0.0;
|
|
632
|
+
let cv = 0.0;
|
|
633
|
+
for (let m = 0; m < nangles; m++) {
|
|
634
|
+
const j = pt[idx++]; /* multiple angle factor */
|
|
635
|
+
if (j) {
|
|
636
|
+
let k = j;
|
|
637
|
+
if (j < 0) k = -k; /* make angle factor > 0 */
|
|
638
|
+
/* sin, cos (k*angle) from lookup table */
|
|
639
|
+
let su = ss[m][k - 1];
|
|
640
|
+
const cu = cc[m][k - 1];
|
|
641
|
+
if (j < 0) su = -su; /* negative angle factor */
|
|
642
|
+
if (k1 === 0) {
|
|
643
|
+
/* Set sin, cos of first angle. */
|
|
644
|
+
sv = su;
|
|
645
|
+
cv = cu;
|
|
646
|
+
k1 = 1;
|
|
647
|
+
} else {
|
|
648
|
+
/* Combine angles by trigonometry. */
|
|
649
|
+
const ff = su * cv + cu * sv;
|
|
650
|
+
cv = cu * cv - su * sv;
|
|
651
|
+
sv = ff;
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
/* Accumulate */
|
|
656
|
+
let j: number, k: number;
|
|
657
|
+
switch (typflg) {
|
|
658
|
+
/* large longitude and radius */
|
|
659
|
+
case 1:
|
|
660
|
+
j = pt[idx++];
|
|
661
|
+
k = pt[idx++];
|
|
662
|
+
ans[0] += (10000.0 * j + k) * sv;
|
|
663
|
+
j = pt[idx++];
|
|
664
|
+
k = pt[idx++];
|
|
665
|
+
if (k) ans[2] += (10000.0 * j + k) * cv;
|
|
666
|
+
break;
|
|
667
|
+
/* longitude and radius */
|
|
668
|
+
case 2:
|
|
669
|
+
j = pt[idx++];
|
|
670
|
+
k = pt[idx++];
|
|
671
|
+
ans[0] += j * sv;
|
|
672
|
+
ans[2] += k * cv;
|
|
673
|
+
break;
|
|
674
|
+
/* large latitude */
|
|
675
|
+
case 3:
|
|
676
|
+
j = pt[idx++];
|
|
677
|
+
k = pt[idx++];
|
|
678
|
+
ans[1] += (10000.0 * j + k) * sv;
|
|
679
|
+
break;
|
|
680
|
+
/* latitude */
|
|
681
|
+
case 4:
|
|
682
|
+
j = pt[idx++];
|
|
683
|
+
ans[1] += j * sv;
|
|
684
|
+
break;
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
/* =====================================================================
|
|
690
|
+
* Moon computation phases (DE404 version)
|
|
691
|
+
* ===================================================================== */
|
|
692
|
+
|
|
693
|
+
function moon1(): void {
|
|
694
|
+
let a: number;
|
|
695
|
+
/* Initialize ss and cc arrays (fix by Bhanu Pinnamaneni) */
|
|
696
|
+
for (let i = 0; i < 5; i++) {
|
|
697
|
+
for (let j = 0; j < 8; j++) {
|
|
698
|
+
ss[i][j] = 0;
|
|
699
|
+
cc[i][j] = 0;
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
sscc_fn(0, STR * D, 6);
|
|
703
|
+
sscc_fn(1, STR * M, 4);
|
|
704
|
+
sscc_fn(2, STR * MP, 4);
|
|
705
|
+
sscc_fn(3, STR * NF, 4);
|
|
706
|
+
moonpol[0] = 0.0;
|
|
707
|
+
moonpol[1] = 0.0;
|
|
708
|
+
moonpol[2] = 0.0;
|
|
709
|
+
/* terms in T^2, scale 1.0 = 10^-5" */
|
|
710
|
+
chewm(LRT2, NLRT2, 4, 2, moonpol);
|
|
711
|
+
chewm(BT2, NBT2, 4, 4, moonpol);
|
|
712
|
+
|
|
713
|
+
f = 18 * Ve - 16 * Ea;
|
|
714
|
+
|
|
715
|
+
g = STR * (f - MP); /* 18V - 16E - l */
|
|
716
|
+
cg = Math.cos(g);
|
|
717
|
+
sg = Math.sin(g);
|
|
718
|
+
l = 6.367278 * cg + 12.747036 * sg; /* t^0 */
|
|
719
|
+
l1 = 23123.70 * cg - 10570.02 * sg; /* t^1 */
|
|
720
|
+
l2 = z[12] * cg + z[13] * sg; /* t^2 */
|
|
721
|
+
moonpol[2] += 5.01 * cg + 2.72 * sg;
|
|
722
|
+
|
|
723
|
+
g = STR * (10.0 * Ve - 3.0 * Ea - MP);
|
|
724
|
+
cg = Math.cos(g);
|
|
725
|
+
sg = Math.sin(g);
|
|
726
|
+
l += -0.253102 * cg + 0.503359 * sg;
|
|
727
|
+
l1 += 1258.46 * cg + 707.29 * sg;
|
|
728
|
+
l2 += z[14] * cg + z[15] * sg;
|
|
729
|
+
|
|
730
|
+
g = STR * (8.0 * Ve - 13.0 * Ea);
|
|
731
|
+
cg = Math.cos(g);
|
|
732
|
+
sg = Math.sin(g);
|
|
733
|
+
l += -0.187231 * cg - 0.127481 * sg;
|
|
734
|
+
l1 += -319.87 * cg - 18.34 * sg;
|
|
735
|
+
l2 += z[16] * cg + z[17] * sg;
|
|
736
|
+
|
|
737
|
+
a = 4.0 * Ea - 8.0 * Ma + 3.0 * Ju;
|
|
738
|
+
g = STR * a;
|
|
739
|
+
cg = Math.cos(g);
|
|
740
|
+
sg = Math.sin(g);
|
|
741
|
+
l += -0.866287 * cg + 0.248192 * sg;
|
|
742
|
+
l1 += 41.87 * cg + 1053.97 * sg;
|
|
743
|
+
l2 += z[18] * cg + z[19] * sg;
|
|
744
|
+
|
|
745
|
+
g = STR * (a - MP);
|
|
746
|
+
cg = Math.cos(g);
|
|
747
|
+
sg = Math.sin(g);
|
|
748
|
+
l += -0.165009 * cg + 0.044176 * sg;
|
|
749
|
+
l1 += 4.67 * cg + 201.55 * sg;
|
|
750
|
+
|
|
751
|
+
g = STR * f; /* 18V - 16E */
|
|
752
|
+
cg = Math.cos(g);
|
|
753
|
+
sg = Math.sin(g);
|
|
754
|
+
l += 0.330401 * cg + 0.661362 * sg;
|
|
755
|
+
l1 += 1202.67 * cg - 555.59 * sg;
|
|
756
|
+
l2 += z[20] * cg + z[21] * sg;
|
|
757
|
+
|
|
758
|
+
g = STR * (f - 2.0 * MP); /* 18V - 16E - 2l */
|
|
759
|
+
cg = Math.cos(g);
|
|
760
|
+
sg = Math.sin(g);
|
|
761
|
+
l += 0.352185 * cg + 0.705041 * sg;
|
|
762
|
+
l1 += 1283.59 * cg - 586.43 * sg;
|
|
763
|
+
|
|
764
|
+
g = STR * (2.0 * Ju - 5.0 * Sa);
|
|
765
|
+
cg = Math.cos(g);
|
|
766
|
+
sg = Math.sin(g);
|
|
767
|
+
l += -0.034700 * cg + 0.160041 * sg;
|
|
768
|
+
l2 += z[22] * cg + z[23] * sg;
|
|
769
|
+
|
|
770
|
+
g = STR * (SWELP - NF);
|
|
771
|
+
cg = Math.cos(g);
|
|
772
|
+
sg = Math.sin(g);
|
|
773
|
+
l += 0.000116 * cg + 7.063040 * sg;
|
|
774
|
+
l1 += 298.8 * sg;
|
|
775
|
+
|
|
776
|
+
/* T^3 terms */
|
|
777
|
+
sg = Math.sin(STR * M);
|
|
778
|
+
/* l3 not initialized in original! Fixed: */
|
|
779
|
+
l3 = z[24] * sg;
|
|
780
|
+
l4 = 0;
|
|
781
|
+
|
|
782
|
+
g = STR * (2.0 * D - M);
|
|
783
|
+
sg = Math.sin(g);
|
|
784
|
+
cg = Math.cos(g);
|
|
785
|
+
moonpol[2] += -0.2655 * cg * T;
|
|
786
|
+
|
|
787
|
+
g = STR * (M - MP);
|
|
788
|
+
moonpol[2] += -0.1568 * Math.cos(g) * T;
|
|
789
|
+
|
|
790
|
+
g = STR * (M + MP);
|
|
791
|
+
moonpol[2] += 0.1309 * Math.cos(g) * T;
|
|
792
|
+
|
|
793
|
+
g = STR * (2.0 * (D + M) - MP);
|
|
794
|
+
sg = Math.sin(g);
|
|
795
|
+
cg = Math.cos(g);
|
|
796
|
+
moonpol[2] += 0.5568 * cg * T;
|
|
797
|
+
|
|
798
|
+
l2 += moonpol[0];
|
|
799
|
+
|
|
800
|
+
g = STR * (2.0 * D - M - MP);
|
|
801
|
+
moonpol[2] += -0.1910 * Math.cos(g) * T;
|
|
802
|
+
|
|
803
|
+
moonpol[1] *= T;
|
|
804
|
+
moonpol[2] *= T;
|
|
805
|
+
|
|
806
|
+
/* terms in T */
|
|
807
|
+
moonpol[0] = 0.0;
|
|
808
|
+
chewm(BT, NBT, 4, 4, moonpol);
|
|
809
|
+
chewm(LRT, NLRT, 4, 1, moonpol);
|
|
810
|
+
|
|
811
|
+
g = STR * (f - MP - NF - 2355767.6); /* 18V - 16E - l - F */
|
|
812
|
+
moonpol[1] += -1127.0 * Math.sin(g);
|
|
813
|
+
g = STR * (f - MP + NF - 235353.6); /* 18V - 16E - l + F */
|
|
814
|
+
moonpol[1] += -1123.0 * Math.sin(g);
|
|
815
|
+
g = STR * (Ea + D + 51987.6);
|
|
816
|
+
moonpol[1] += 1303.0 * Math.sin(g);
|
|
817
|
+
g = STR * SWELP;
|
|
818
|
+
moonpol[1] += 342.0 * Math.sin(g);
|
|
819
|
+
|
|
820
|
+
g = STR * (2.0 * Ve - 3.0 * Ea);
|
|
821
|
+
cg = Math.cos(g);
|
|
822
|
+
sg = Math.sin(g);
|
|
823
|
+
l += -0.343550 * cg - 0.000276 * sg;
|
|
824
|
+
l1 += 105.90 * cg + 336.53 * sg;
|
|
825
|
+
|
|
826
|
+
g = STR * (f - 2.0 * D); /* 18V - 16E - 2D */
|
|
827
|
+
cg = Math.cos(g);
|
|
828
|
+
sg = Math.sin(g);
|
|
829
|
+
l += 0.074668 * cg + 0.149501 * sg;
|
|
830
|
+
l1 += 271.77 * cg - 124.20 * sg;
|
|
831
|
+
|
|
832
|
+
g = STR * (f - 2.0 * D - MP);
|
|
833
|
+
cg = Math.cos(g);
|
|
834
|
+
sg = Math.sin(g);
|
|
835
|
+
l += 0.073444 * cg + 0.147094 * sg;
|
|
836
|
+
l1 += 265.24 * cg - 121.16 * sg;
|
|
837
|
+
|
|
838
|
+
g = STR * (f + 2.0 * D - MP);
|
|
839
|
+
cg = Math.cos(g);
|
|
840
|
+
sg = Math.sin(g);
|
|
841
|
+
l += 0.072844 * cg + 0.145829 * sg;
|
|
842
|
+
l1 += 265.18 * cg - 121.29 * sg;
|
|
843
|
+
|
|
844
|
+
g = STR * (f + 2.0 * (D - MP));
|
|
845
|
+
cg = Math.cos(g);
|
|
846
|
+
sg = Math.sin(g);
|
|
847
|
+
l += 0.070201 * cg + 0.140542 * sg;
|
|
848
|
+
l1 += 255.36 * cg - 116.79 * sg;
|
|
849
|
+
|
|
850
|
+
g = STR * (Ea + D - NF);
|
|
851
|
+
cg = Math.cos(g);
|
|
852
|
+
sg = Math.sin(g);
|
|
853
|
+
l += 0.288209 * cg - 0.025901 * sg;
|
|
854
|
+
l1 += -63.51 * cg - 240.14 * sg;
|
|
855
|
+
|
|
856
|
+
g = STR * (2.0 * Ea - 3.0 * Ju + 2.0 * D - MP);
|
|
857
|
+
cg = Math.cos(g);
|
|
858
|
+
sg = Math.sin(g);
|
|
859
|
+
l += 0.077865 * cg + 0.438460 * sg;
|
|
860
|
+
l1 += 210.57 * cg + 124.84 * sg;
|
|
861
|
+
|
|
862
|
+
g = STR * (Ea - 2.0 * Ma);
|
|
863
|
+
cg = Math.cos(g);
|
|
864
|
+
sg = Math.sin(g);
|
|
865
|
+
l += -0.216579 * cg + 0.241702 * sg;
|
|
866
|
+
l1 += 197.67 * cg + 125.23 * sg;
|
|
867
|
+
|
|
868
|
+
g = STR * (a + MP);
|
|
869
|
+
cg = Math.cos(g);
|
|
870
|
+
sg = Math.sin(g);
|
|
871
|
+
l += -0.165009 * cg + 0.044176 * sg;
|
|
872
|
+
l1 += 4.67 * cg + 201.55 * sg;
|
|
873
|
+
|
|
874
|
+
g = STR * (a + 2.0 * D - MP);
|
|
875
|
+
cg = Math.cos(g);
|
|
876
|
+
sg = Math.sin(g);
|
|
877
|
+
l += -0.133533 * cg + 0.041116 * sg;
|
|
878
|
+
l1 += 6.95 * cg + 187.07 * sg;
|
|
879
|
+
|
|
880
|
+
g = STR * (a - 2.0 * D + MP);
|
|
881
|
+
cg = Math.cos(g);
|
|
882
|
+
sg = Math.sin(g);
|
|
883
|
+
l += -0.133430 * cg + 0.041079 * sg;
|
|
884
|
+
l1 += 6.28 * cg + 169.08 * sg;
|
|
885
|
+
|
|
886
|
+
g = STR * (3.0 * Ve - 4.0 * Ea);
|
|
887
|
+
cg = Math.cos(g);
|
|
888
|
+
sg = Math.sin(g);
|
|
889
|
+
l += -0.175074 * cg + 0.003035 * sg;
|
|
890
|
+
l1 += 49.17 * cg + 150.57 * sg;
|
|
891
|
+
|
|
892
|
+
g = STR * (2.0 * (Ea + D - MP) - 3.0 * Ju + 213534.0);
|
|
893
|
+
l1 += 158.4 * Math.sin(g);
|
|
894
|
+
|
|
895
|
+
l1 += moonpol[0];
|
|
896
|
+
|
|
897
|
+
a = 0.1 * T; /* set amplitude scale of 1.0 = 10^-4 arcsec */
|
|
898
|
+
moonpol[1] *= a;
|
|
899
|
+
moonpol[2] *= a;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
function moon2(): void {
|
|
903
|
+
/* terms in T^0 */
|
|
904
|
+
g = STR * (2 * (Ea - Ju + D) - MP + 648431.172);
|
|
905
|
+
l += 1.14307 * Math.sin(g);
|
|
906
|
+
g = STR * (Ve - Ea + 648035.568);
|
|
907
|
+
l += 0.82155 * Math.sin(g);
|
|
908
|
+
g = STR * (3 * (Ve - Ea) + 2 * D - MP + 647933.184);
|
|
909
|
+
l += 0.64371 * Math.sin(g);
|
|
910
|
+
g = STR * (Ea - Ju + 4424.04);
|
|
911
|
+
l += 0.63880 * Math.sin(g);
|
|
912
|
+
g = STR * (SWELP + MP - NF + 4.68);
|
|
913
|
+
l += 0.49331 * Math.sin(g);
|
|
914
|
+
g = STR * (SWELP - MP - NF + 4.68);
|
|
915
|
+
l += 0.4914 * Math.sin(g);
|
|
916
|
+
g = STR * (SWELP + NF + 2.52);
|
|
917
|
+
l += 0.36061 * Math.sin(g);
|
|
918
|
+
g = STR * (2.0 * Ve - 2.0 * Ea + 736.2);
|
|
919
|
+
l += 0.30154 * Math.sin(g);
|
|
920
|
+
g = STR * (2.0 * Ea - 3.0 * Ju + 2.0 * D - 2.0 * MP + 36138.2);
|
|
921
|
+
l += 0.28282 * Math.sin(g);
|
|
922
|
+
g = STR * (2.0 * Ea - 2.0 * Ju + 2.0 * D - 2.0 * MP + 311.0);
|
|
923
|
+
l += 0.24516 * Math.sin(g);
|
|
924
|
+
g = STR * (Ea - Ju - 2.0 * D + MP + 6275.88);
|
|
925
|
+
l += 0.21117 * Math.sin(g);
|
|
926
|
+
g = STR * (2.0 * (Ea - Ma) - 846.36);
|
|
927
|
+
l += 0.19444 * Math.sin(g);
|
|
928
|
+
g = STR * (2.0 * (Ea - Ju) + 1569.96);
|
|
929
|
+
l -= 0.18457 * Math.sin(g);
|
|
930
|
+
g = STR * (2.0 * (Ea - Ju) - MP - 55.8);
|
|
931
|
+
l += 0.18256 * Math.sin(g);
|
|
932
|
+
g = STR * (Ea - Ju - 2.0 * D + 6490.08);
|
|
933
|
+
l += 0.16499 * Math.sin(g);
|
|
934
|
+
g = STR * (Ea - 2.0 * Ju - 212378.4);
|
|
935
|
+
l += 0.16427 * Math.sin(g);
|
|
936
|
+
g = STR * (2.0 * (Ve - Ea - D) + MP + 1122.48);
|
|
937
|
+
l += 0.16088 * Math.sin(g);
|
|
938
|
+
g = STR * (Ve - Ea - MP + 32.04);
|
|
939
|
+
l -= 0.15350 * Math.sin(g);
|
|
940
|
+
g = STR * (Ea - Ju - MP + 4488.88);
|
|
941
|
+
l += 0.14346 * Math.sin(g);
|
|
942
|
+
g = STR * (2.0 * (Ve - Ea + D) - MP - 8.64);
|
|
943
|
+
l += 0.13594 * Math.sin(g);
|
|
944
|
+
g = STR * (2.0 * (Ve - Ea - D) + 1319.76);
|
|
945
|
+
l += 0.13432 * Math.sin(g);
|
|
946
|
+
g = STR * (Ve - Ea - 2.0 * D + MP - 56.16);
|
|
947
|
+
l -= 0.13122 * Math.sin(g);
|
|
948
|
+
g = STR * (Ve - Ea + MP + 54.36);
|
|
949
|
+
l -= 0.12722 * Math.sin(g);
|
|
950
|
+
g = STR * (3.0 * (Ve - Ea) - MP + 433.8);
|
|
951
|
+
l += 0.12539 * Math.sin(g);
|
|
952
|
+
g = STR * (Ea - Ju + MP + 4002.12);
|
|
953
|
+
l += 0.10994 * Math.sin(g);
|
|
954
|
+
g = STR * (20.0 * Ve - 21.0 * Ea - 2.0 * D + MP - 317511.72);
|
|
955
|
+
l += 0.10652 * Math.sin(g);
|
|
956
|
+
g = STR * (26.0 * Ve - 29.0 * Ea - MP + 270002.52);
|
|
957
|
+
l += 0.10490 * Math.sin(g);
|
|
958
|
+
g = STR * (3.0 * Ve - 4.0 * Ea + D - MP - 322765.56);
|
|
959
|
+
l += 0.10386 * Math.sin(g);
|
|
960
|
+
|
|
961
|
+
g = STR * (SWELP + 648002.556);
|
|
962
|
+
B = 8.04508 * Math.sin(g);
|
|
963
|
+
g = STR * (Ea + D + 996048.252);
|
|
964
|
+
B += 1.51021 * Math.sin(g);
|
|
965
|
+
g = STR * (f - MP + NF + 95554.332);
|
|
966
|
+
B += 0.63037 * Math.sin(g);
|
|
967
|
+
g = STR * (f - MP - NF + 95553.792);
|
|
968
|
+
B += 0.63014 * Math.sin(g);
|
|
969
|
+
g = STR * (SWELP - MP + 2.9);
|
|
970
|
+
B += 0.45587 * Math.sin(g);
|
|
971
|
+
g = STR * (SWELP + MP + 2.5);
|
|
972
|
+
B += -0.41573 * Math.sin(g);
|
|
973
|
+
g = STR * (SWELP - 2.0 * NF + 3.2);
|
|
974
|
+
B += 0.32623 * Math.sin(g);
|
|
975
|
+
g = STR * (SWELP - 2.0 * D + 2.5);
|
|
976
|
+
B += 0.29855 * Math.sin(g);
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
function moon3(): void {
|
|
980
|
+
/* terms in T^0 */
|
|
981
|
+
moonpol[0] = 0.0;
|
|
982
|
+
chewm(LR, NLR, 4, 1, moonpol);
|
|
983
|
+
chewm(MB, NMB, 4, 3, moonpol);
|
|
984
|
+
l += (((l4 * T + l3) * T + l2) * T + l1) * T * 1.0e-5;
|
|
985
|
+
moonpol[0] = SWELP + l + 1.0e-4 * moonpol[0];
|
|
986
|
+
moonpol[1] = 1.0e-4 * moonpol[1] + B;
|
|
987
|
+
moonpol[2] = 1.0e-4 * moonpol[2] + 385000.52899; /* kilometers */
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
/** Compute final ecliptic polar coordinates */
|
|
991
|
+
function moon4(): void {
|
|
992
|
+
moonpol[2] /= AUNIT / 1000;
|
|
993
|
+
moonpol[0] = STR * mods3600(moonpol[0]);
|
|
994
|
+
moonpol[1] = STR * moonpol[1];
|
|
995
|
+
B = moonpol[1];
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
/* =====================================================================
|
|
999
|
+
* Ecliptic of date → equatorial J2000 conversion
|
|
1000
|
+
* ===================================================================== */
|
|
1001
|
+
|
|
1002
|
+
function ecldatEqu2000(swed: SweData, tjd: number, xpm: Float64Array | number[]): void {
|
|
1003
|
+
/* cartesian */
|
|
1004
|
+
swiPolcart(xpm, xpm);
|
|
1005
|
+
/* equatorial */
|
|
1006
|
+
swiCoortrf2(xpm, xpm, -swed.oec.seps, swed.oec.ceps);
|
|
1007
|
+
/* j2000 */
|
|
1008
|
+
swiPrecess(xpm, tjd, 0, J_TO_J2000, swed);
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
/* =====================================================================
|
|
1012
|
+
* Correction functions for mean node and apogee
|
|
1013
|
+
* ===================================================================== */
|
|
1014
|
+
|
|
1015
|
+
const CORR_MNODE_JD_T0GREG = -3063616.5; /* 1 jan -13100 greg. */
|
|
1016
|
+
|
|
1017
|
+
function corrMeanNode(J: number): number {
|
|
1018
|
+
const J0 = CORR_MNODE_JD_T0GREG;
|
|
1019
|
+
const dayscty = 36524.25;
|
|
1020
|
+
if (J < JPL_DE431_START) return 0;
|
|
1021
|
+
if (J > JPL_DE431_END) return 0;
|
|
1022
|
+
const dJ = J - J0;
|
|
1023
|
+
const i = Math.floor(dJ / dayscty);
|
|
1024
|
+
const dfrac = (dJ - i * dayscty) / dayscty;
|
|
1025
|
+
const dcor0 = mean_node_corr[i];
|
|
1026
|
+
const dcor1 = mean_node_corr[i + 1];
|
|
1027
|
+
return dcor0 + dfrac * (dcor1 - dcor0);
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
const CORR_MAPOG_JD_T0GREG = -3063616.5; /* 1 jan -13100 greg. */
|
|
1031
|
+
|
|
1032
|
+
function corrMeanApog(J: number): number {
|
|
1033
|
+
const J0 = CORR_MAPOG_JD_T0GREG;
|
|
1034
|
+
const dayscty = 36524.25;
|
|
1035
|
+
if (J < JPL_DE431_START) return 0;
|
|
1036
|
+
if (J > JPL_DE431_END) return 0;
|
|
1037
|
+
const dJ = J - J0;
|
|
1038
|
+
const i = Math.floor(dJ / dayscty);
|
|
1039
|
+
const dfrac = (dJ - i * dayscty) / dayscty;
|
|
1040
|
+
const dcor0 = mean_apsis_corr[i];
|
|
1041
|
+
const dcor1 = mean_apsis_corr[i + 1];
|
|
1042
|
+
return dcor0 + dfrac * (dcor1 - dcor0);
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
/* =====================================================================
|
|
1046
|
+
* Public exported functions
|
|
1047
|
+
* ===================================================================== */
|
|
1048
|
+
|
|
1049
|
+
/**
|
|
1050
|
+
* Calculate geometric coordinates of Moon without light time or
|
|
1051
|
+
* nutation correction.
|
|
1052
|
+
*
|
|
1053
|
+
* @param J Julian Ephemeris Date
|
|
1054
|
+
* @param pol output array: pol[0]=lon, pol[1]=lat, pol[2]=radius (radians, au)
|
|
1055
|
+
* @returns 0 (OK)
|
|
1056
|
+
*/
|
|
1057
|
+
export function swiMoshmoon2(J: number, pol: Float64Array | number[]): number {
|
|
1058
|
+
T = (J - J2000) / 36525.0;
|
|
1059
|
+
T2 = T * T;
|
|
1060
|
+
meanElements();
|
|
1061
|
+
meanElementsPl();
|
|
1062
|
+
moon1();
|
|
1063
|
+
moon2();
|
|
1064
|
+
moon3();
|
|
1065
|
+
moon4();
|
|
1066
|
+
for (let i = 0; i < 3; i++) {
|
|
1067
|
+
pol[i] = moonpol[i];
|
|
1068
|
+
}
|
|
1069
|
+
return 0;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
/**
|
|
1073
|
+
* Moshier's moon with speed computation.
|
|
1074
|
+
*
|
|
1075
|
+
* @param swed SweData state
|
|
1076
|
+
* @param tjd Julian day
|
|
1077
|
+
* @param doSave if true, save into swed.pldat[SEI_MOON]
|
|
1078
|
+
* @param xpmret optional output array (6 doubles) for position+speed
|
|
1079
|
+
* @returns OK or ERR
|
|
1080
|
+
*/
|
|
1081
|
+
export function swiMoshmoon(
|
|
1082
|
+
swed: SweData, tjd: number, doSave: boolean,
|
|
1083
|
+
xpmret: Float64Array | number[] | null, serr?: string[],
|
|
1084
|
+
): number {
|
|
1085
|
+
const pdp = swed.pldat[SEI_MOON];
|
|
1086
|
+
let xpm: Float64Array | number[];
|
|
1087
|
+
const xx = new Float64Array(6);
|
|
1088
|
+
if (doSave) {
|
|
1089
|
+
xpm = pdp.x;
|
|
1090
|
+
} else {
|
|
1091
|
+
xpm = xx;
|
|
1092
|
+
}
|
|
1093
|
+
/* allow 0.2 day tolerance so that true node interval fits in */
|
|
1094
|
+
if (tjd < MOSHLUEPH_START - 0.2 || tjd > MOSHLUEPH_END + 0.2) {
|
|
1095
|
+
if (serr != null) {
|
|
1096
|
+
serr[0] = (serr[0] || '') +
|
|
1097
|
+
`jd ${tjd} outside Moshier's Moon range ${MOSHLUEPH_START.toFixed(2)} .. ${MOSHLUEPH_END.toFixed(2)} `;
|
|
1098
|
+
}
|
|
1099
|
+
return ERR;
|
|
1100
|
+
}
|
|
1101
|
+
/* if moon has already been computed */
|
|
1102
|
+
if (tjd === pdp.teval && pdp.iephe === SEFLG_MOSEPH) {
|
|
1103
|
+
if (xpmret != null) {
|
|
1104
|
+
for (let i = 0; i <= 5; i++) xpmret[i] = pdp.x[i];
|
|
1105
|
+
}
|
|
1106
|
+
return OK;
|
|
1107
|
+
}
|
|
1108
|
+
/* else compute moon */
|
|
1109
|
+
swiMoshmoon2(tjd, xpm);
|
|
1110
|
+
if (doSave) {
|
|
1111
|
+
pdp.teval = tjd;
|
|
1112
|
+
pdp.xflgs = -1;
|
|
1113
|
+
pdp.iephe = SEFLG_MOSEPH;
|
|
1114
|
+
}
|
|
1115
|
+
/* Moshier moon is referred to ecliptic of date. But we need
|
|
1116
|
+
* equatorial positions for several reasons. */
|
|
1117
|
+
ecldatEqu2000(swed, tjd, xpm);
|
|
1118
|
+
/* speed from 2 other positions */
|
|
1119
|
+
const x1 = new Float64Array(6);
|
|
1120
|
+
const x2 = new Float64Array(6);
|
|
1121
|
+
let t = tjd + MOON_SPEED_INTV;
|
|
1122
|
+
swiMoshmoon2(t, x1);
|
|
1123
|
+
ecldatEqu2000(swed, t, x1);
|
|
1124
|
+
t = tjd - MOON_SPEED_INTV;
|
|
1125
|
+
swiMoshmoon2(t, x2);
|
|
1126
|
+
ecldatEqu2000(swed, t, x2);
|
|
1127
|
+
for (let i = 0; i <= 2; i++) {
|
|
1128
|
+
const b = (x1[i] - x2[i]) / 2;
|
|
1129
|
+
const a = (x1[i] + x2[i]) / 2 - xpm[i];
|
|
1130
|
+
xpm[i + 3] = (2 * a + b) / MOON_SPEED_INTV;
|
|
1131
|
+
}
|
|
1132
|
+
if (xpmret != null) {
|
|
1133
|
+
for (let i = 0; i <= 5; i++) xpmret[i] = xpm[i];
|
|
1134
|
+
}
|
|
1135
|
+
return OK;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
/**
|
|
1139
|
+
* Mean lunar node.
|
|
1140
|
+
*
|
|
1141
|
+
* @param J Julian day
|
|
1142
|
+
* @param pol output array for position (polar ecliptic of date)
|
|
1143
|
+
* @returns OK or ERR
|
|
1144
|
+
*/
|
|
1145
|
+
export function swiMeanNode(
|
|
1146
|
+
J: number, pol: Float64Array | number[], serr?: string[],
|
|
1147
|
+
): number {
|
|
1148
|
+
T = (J - J2000) / 36525.0;
|
|
1149
|
+
T2 = T * T;
|
|
1150
|
+
T3 = T * T2;
|
|
1151
|
+
T4 = T2 * T2;
|
|
1152
|
+
if (J < MOSHNDEPH_START || J > MOSHNDEPH_END) {
|
|
1153
|
+
if (serr != null) {
|
|
1154
|
+
serr[0] = (serr[0] || '') +
|
|
1155
|
+
`jd ${J} outside mean node range ${MOSHNDEPH_START.toFixed(2)} .. ${MOSHNDEPH_END.toFixed(2)} `;
|
|
1156
|
+
}
|
|
1157
|
+
return ERR;
|
|
1158
|
+
}
|
|
1159
|
+
meanElements();
|
|
1160
|
+
const dcor = corrMeanNode(J) * 3600;
|
|
1161
|
+
/* longitude */
|
|
1162
|
+
pol[0] = swiMod2PI((SWELP - NF - dcor) * STR);
|
|
1163
|
+
/* latitude */
|
|
1164
|
+
pol[1] = 0.0;
|
|
1165
|
+
/* distance */
|
|
1166
|
+
pol[2] = MOON_MEAN_DIST / AUNIT; /* or should it be derived from mean orbital ellipse? */
|
|
1167
|
+
return OK;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
/**
|
|
1171
|
+
* Mean lunar apogee (dark moon, Lilith).
|
|
1172
|
+
*
|
|
1173
|
+
* @param J Julian day
|
|
1174
|
+
* @param pol output array for position (polar ecliptic of date)
|
|
1175
|
+
* @returns OK or ERR
|
|
1176
|
+
*/
|
|
1177
|
+
export function swiMeanApog(
|
|
1178
|
+
J: number, pol: Float64Array | number[], serr?: string[],
|
|
1179
|
+
): number {
|
|
1180
|
+
T = (J - J2000) / 36525.0;
|
|
1181
|
+
T2 = T * T;
|
|
1182
|
+
T3 = T * T2;
|
|
1183
|
+
T4 = T2 * T2;
|
|
1184
|
+
if (J < MOSHNDEPH_START || J > MOSHNDEPH_END) {
|
|
1185
|
+
if (serr != null) {
|
|
1186
|
+
serr[0] = (serr[0] || '') +
|
|
1187
|
+
`jd ${J} outside mean apogee range ${MOSHNDEPH_START.toFixed(2)} .. ${MOSHNDEPH_END.toFixed(2)} `;
|
|
1188
|
+
}
|
|
1189
|
+
return ERR;
|
|
1190
|
+
}
|
|
1191
|
+
meanElements();
|
|
1192
|
+
pol[0] = swiMod2PI((SWELP - MP) * STR + PI);
|
|
1193
|
+
pol[1] = 0;
|
|
1194
|
+
pol[2] = MOON_MEAN_DIST * (1 + MOON_MEAN_ECC) / AUNIT; /* apogee */
|
|
1195
|
+
/* Lilith / Dark Moon projection onto ecliptic */
|
|
1196
|
+
let dcor = corrMeanApog(J) * DEGTORAD;
|
|
1197
|
+
pol[0] = swiMod2PI(pol[0] - dcor);
|
|
1198
|
+
/* apogee is now projected onto ecliptic */
|
|
1199
|
+
let node = (SWELP - NF) * STR;
|
|
1200
|
+
dcor = corrMeanNode(J) * DEGTORAD;
|
|
1201
|
+
node = swiMod2PI(node - dcor);
|
|
1202
|
+
pol[0] = swiMod2PI(pol[0] - node);
|
|
1203
|
+
swiPolcart(pol, pol);
|
|
1204
|
+
swiCoortrf(pol, pol, -MOON_MEAN_INCL * DEGTORAD);
|
|
1205
|
+
swiCartpol(pol, pol);
|
|
1206
|
+
pol[0] = swiMod2PI(pol[0] + node);
|
|
1207
|
+
return OK;
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
/**
|
|
1211
|
+
* Mean lunar elements (node, dnode, perigee, dperigee).
|
|
1212
|
+
*
|
|
1213
|
+
* @param tjd Julian day
|
|
1214
|
+
* @returns object with node, dnode, peri, dperi in degrees
|
|
1215
|
+
*/
|
|
1216
|
+
export function swiMeanLunarElements(
|
|
1217
|
+
tjd: number,
|
|
1218
|
+
): { node: number; dnode: number; peri: number; dperi: number } {
|
|
1219
|
+
T = (tjd - J2000) / 36525.0;
|
|
1220
|
+
T2 = T * T;
|
|
1221
|
+
meanElements();
|
|
1222
|
+
let node = sweDegnorm((SWELP - NF) * STR * RADTODEG);
|
|
1223
|
+
let peri = sweDegnorm((SWELP - MP) * STR * RADTODEG);
|
|
1224
|
+
T -= 1.0 / 36525;
|
|
1225
|
+
meanElements();
|
|
1226
|
+
let dnode = sweDegnorm(node - (SWELP - NF) * STR * RADTODEG);
|
|
1227
|
+
dnode -= 360;
|
|
1228
|
+
const dperi = sweDegnorm(peri - (SWELP - MP) * STR * RADTODEG);
|
|
1229
|
+
let dcor = corrMeanNode(tjd);
|
|
1230
|
+
node = sweDegnorm(node - dcor);
|
|
1231
|
+
dcor = corrMeanApog(tjd);
|
|
1232
|
+
peri = sweDegnorm(peri - dcor);
|
|
1233
|
+
return { node, dnode, peri, dperi };
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
/**
|
|
1237
|
+
* Calculate geometric coordinates of true interpolated Moon apsides.
|
|
1238
|
+
*
|
|
1239
|
+
* @param J Julian day
|
|
1240
|
+
* @param pol output array (3 doubles)
|
|
1241
|
+
* @param ipli SEI_INTP_APOG or SEI_INTP_PERG
|
|
1242
|
+
* @returns 0
|
|
1243
|
+
*/
|
|
1244
|
+
export function swiIntpApsides(
|
|
1245
|
+
J: number, pol: Float64Array | number[], ipli: number,
|
|
1246
|
+
): number {
|
|
1247
|
+
const rsv = [0.0, 0.0, 0.0];
|
|
1248
|
+
const zMP = 27.55454988;
|
|
1249
|
+
const fNF = 27.212220817 / zMP;
|
|
1250
|
+
const fD = 29.530588835 / zMP;
|
|
1251
|
+
const fLP = 27.321582 / zMP;
|
|
1252
|
+
const fM = 365.2596359 / zMP;
|
|
1253
|
+
const fVe = 224.7008001 / zMP;
|
|
1254
|
+
const fEa = 365.2563629 / zMP;
|
|
1255
|
+
const fMa = 686.9798519 / zMP;
|
|
1256
|
+
const fJu = 4332.589348 / zMP;
|
|
1257
|
+
const fSa = 10759.22722 / zMP;
|
|
1258
|
+
|
|
1259
|
+
T = (J - J2000) / 36525.0;
|
|
1260
|
+
T2 = T * T;
|
|
1261
|
+
T4 = T2 * T2;
|
|
1262
|
+
meanElements();
|
|
1263
|
+
meanElementsPl();
|
|
1264
|
+
|
|
1265
|
+
const sNF = mods3600(NF);
|
|
1266
|
+
const sD = mods3600(D);
|
|
1267
|
+
const sLP = mods3600(SWELP);
|
|
1268
|
+
const sMP = mods3600(MP);
|
|
1269
|
+
const sM = M;
|
|
1270
|
+
const sVe = Ve;
|
|
1271
|
+
const sEa = Ea;
|
|
1272
|
+
const sMa = Ma;
|
|
1273
|
+
const sJu = Ju;
|
|
1274
|
+
const sSa = Sa;
|
|
1275
|
+
|
|
1276
|
+
let niter = 4;
|
|
1277
|
+
if (ipli === SEI_INTP_PERG) { MP = 0.0; niter = 5; }
|
|
1278
|
+
if (ipli === SEI_INTP_APOG) { MP = 648000.0; niter = 4; }
|
|
1279
|
+
|
|
1280
|
+
let cMP = 0;
|
|
1281
|
+
let dd = 18000.0;
|
|
1282
|
+
let mMP = 0, mLP = 0, mNF = 0, mD = 0;
|
|
1283
|
+
|
|
1284
|
+
for (let iii = 0; iii <= niter; iii++) {
|
|
1285
|
+
const dMP = sMP - MP;
|
|
1286
|
+
mLP = sLP - dMP;
|
|
1287
|
+
mNF = sNF - dMP;
|
|
1288
|
+
mD = sD - dMP;
|
|
1289
|
+
mMP = sMP - dMP;
|
|
1290
|
+
for (let ii = 0; ii <= 2; ii++) {
|
|
1291
|
+
MP = mMP + (ii - 1) * dd;
|
|
1292
|
+
NF = mNF + (ii - 1) * dd / fNF;
|
|
1293
|
+
D = mD + (ii - 1) * dd / fD;
|
|
1294
|
+
SWELP = mLP + (ii - 1) * dd / fLP;
|
|
1295
|
+
M = sM + (ii - 1) * dd / fM;
|
|
1296
|
+
Ve = sVe + (ii - 1) * dd / fVe;
|
|
1297
|
+
Ea = sEa + (ii - 1) * dd / fEa;
|
|
1298
|
+
Ma = sMa + (ii - 1) * dd / fMa;
|
|
1299
|
+
Ju = sJu + (ii - 1) * dd / fJu;
|
|
1300
|
+
Sa = sSa + (ii - 1) * dd / fSa;
|
|
1301
|
+
moon1();
|
|
1302
|
+
moon2();
|
|
1303
|
+
moon3();
|
|
1304
|
+
moon4();
|
|
1305
|
+
if (ii === 1) {
|
|
1306
|
+
for (let i = 0; i < 3; i++) pol[i] = moonpol[i];
|
|
1307
|
+
}
|
|
1308
|
+
rsv[ii] = moonpol[2];
|
|
1309
|
+
}
|
|
1310
|
+
cMP = (1.5 * rsv[0] - 2 * rsv[1] + 0.5 * rsv[2]) / (rsv[0] + rsv[2] - 2 * rsv[1]);
|
|
1311
|
+
cMP *= dd;
|
|
1312
|
+
cMP = cMP - dd;
|
|
1313
|
+
mMP += cMP;
|
|
1314
|
+
MP = mMP;
|
|
1315
|
+
dd /= 10;
|
|
1316
|
+
}
|
|
1317
|
+
return 0;
|
|
1318
|
+
}
|