1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | import base from './base';
|
12 | var asin = Math.asin,
|
13 | sin = Math.sin;
|
14 |
|
15 | var D2R = Math.PI / 180;
|
16 |
|
17 | var EARTH_RADIUS = 6378.137;
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | export function parallax(distance) {
|
26 |
|
27 | return asin(EARTH_RADIUS / distance);
|
28 | }
|
29 |
|
30 | function dmf(T) {
|
31 | var d = base.horner(T, 297.8501921 * D2R, 445267.1114034 * D2R, -0.0018819 * D2R, D2R / 545868, -D2R / 113065000);
|
32 | var m = base.horner(T, 357.5291092 * D2R, 35999.0502909 * D2R, -0.0001535 * D2R, D2R / 24490000);
|
33 | var m_ = base.horner(T, 134.9633964 * D2R, 477198.8675055 * D2R, 0.0087414 * D2R, D2R / 69699, -D2R / 14712000);
|
34 | var f = base.horner(T, 93.272095 * D2R, 483202.0175233 * D2R, -0.0036539 * D2R, -D2R / 3526000, D2R / 863310000);
|
35 | return [d, m, m_, f];
|
36 | }
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 | export function position(jde) {
|
51 | var T = base.J2000Century(jde);
|
52 | var l_ = base.horner(T, 218.3164477 * D2R, 481267.88123421 * D2R, -0.0015786 * D2R, D2R / 538841, -D2R / 65194000);
|
53 |
|
54 | var _dmf = dmf(T),
|
55 | d = _dmf[0],
|
56 | m = _dmf[1],
|
57 | m_ = _dmf[2],
|
58 | f = _dmf[3];
|
59 |
|
60 | var a1 = 119.75 * D2R + 131.849 * D2R * T;
|
61 | var a2 = 53.09 * D2R + 479264.29 * D2R * T;
|
62 | var a3 = 313.45 * D2R + 481266.484 * D2R * T;
|
63 | var e = base.horner(T, 1, -0.002516, -0.0000074);
|
64 | var e2 = e * e;
|
65 | var Σl = 3958 * sin(a1) + 1962 * sin(l_ - f) + 318 * sin(a2);
|
66 | var Σr = 0.0;
|
67 | var Σb = -2235 * sin(l_) + 382 * sin(a3) + 175 * sin(a1 - f) + 175 * sin(a1 + f) + 127 * sin(l_ - m_) - 115 * sin(l_ + m_);
|
68 | ta.forEach(function (r) {
|
69 | var _base$sincos = base.sincos(d * r.d + m * r.m + m_ * r.m_ + f * r.f),
|
70 | sina = _base$sincos[0],
|
71 | cosa = _base$sincos[1];
|
72 |
|
73 | switch (r.m) {
|
74 | case 0:
|
75 | Σl += r.Σl * sina;
|
76 | Σr += r.Σr * cosa;
|
77 | break;
|
78 | case -1:
|
79 | case 1:
|
80 | Σl += r.Σl * sina * e;
|
81 | Σr += r.Σr * cosa * e;
|
82 | break;
|
83 | case -2:
|
84 | case 2:
|
85 | Σl += r.Σl * sina * e2;
|
86 | Σr += r.Σr * cosa * e2;
|
87 | break;
|
88 | }
|
89 | });
|
90 |
|
91 | tb.forEach(function (r) {
|
92 | var sb = sin(d * r.d + m * r.m + m_ * r.m_ + f * r.f);
|
93 | switch (r.m) {
|
94 | case 0:
|
95 | Σb += r.Σb * sb;
|
96 | break;
|
97 | case -1:
|
98 | case 1:
|
99 | Σb += r.Σb * sb * e;
|
100 | break;
|
101 | case -2:
|
102 | case 2:
|
103 | Σb += r.Σb * sb * e2;
|
104 | break;
|
105 | }
|
106 | });
|
107 | var lon = base.pmod(l_, 2 * Math.PI) + Σl * 1e-6 * D2R;
|
108 | var lat = Σb * 1e-6 * D2R;
|
109 | var range = 385000.56 + Σr * 1e-3;
|
110 | return new base.Coord(lon, lat, range);
|
111 | }
|
112 |
|
113 | var ta = function () {
|
114 | var ta = [[0, 0, 1, 0, 6288774, -20905355], [2, 0, -1, 0, 1274027, -3699111], [2, 0, 0, 0, 658314, -2955968], [0, 0, 2, 0, 213618, -569925], [0, 1, 0, 0, -185116, 48888], [0, 0, 0, 2, -114332, -3149], [2, 0, -2, 0, 58793, 246158], [2, -1, -1, 0, 57066, -152138], [2, 0, 1, 0, 53322, -170733], [2, -1, 0, 0, 45758, -204586], [0, 1, -1, 0, -40923, -129620], [1, 0, 0, 0, -34720, 108743], [0, 1, 1, 0, -30383, 104755], [2, 0, 0, -2, 15327, 10321], [0, 0, 1, 2, -12528, 0], [0, 0, 1, -2, 10980, 79661], [4, 0, -1, 0, 10675, -34782], [0, 0, 3, 0, 10034, -23210], [4, 0, -2, 0, 8548, -21636], [2, 1, -1, 0, -7888, 24208], [2, 1, 0, 0, -6766, 30824], [1, 0, -1, 0, -5163, -8379], [1, 1, 0, 0, 4987, -16675], [2, -1, 1, 0, 4036, -12831], [2, 0, 2, 0, 3994, -10445], [4, 0, 0, 0, 3861, -11650], [2, 0, -3, 0, 3665, 14403], [0, 1, -2, 0, -2689, -7003], [2, 0, -1, 2, -2602, 0], [2, -1, -2, 0, 2390, 10056], [1, 0, 1, 0, -2348, 6322], [2, -2, 0, 0, 2236, -9884], [0, 1, 2, 0, -2120, 5751], [0, 2, 0, 0, -2069, 0], [2, -2, -1, 0, 2048, -4950], [2, 0, 1, -2, -1773, 4130], [2, 0, 0, 2, -1595, 0], [4, -1, -1, 0, 1215, -3958], [0, 0, 2, 2, -1110, 0], [3, 0, -1, 0, -892, 3258], [2, 1, 1, 0, -810, 2616], [4, -1, -2, 0, 759, -1897], [0, 2, -1, 0, -713, -2117], [2, 2, -1, 0, -700, 2354], [2, 1, -2, 0, 691, 0], [2, -1, 0, -2, 596, 0], [4, 0, 1, 0, 549, -1423], [0, 0, 4, 0, 537, -1117], [4, -1, 0, 0, 520, -1571], [1, 0, -2, 0, -487, -1739], [2, 1, 0, -2, -399, 0], [0, 0, 2, -2, -381, -4421], [1, 1, 1, 0, 351, 0], [3, 0, -2, 0, -340, 0], [4, 0, -3, 0, 330, 0], [2, -1, 2, 0, 327, 0], [0, 2, 1, 0, -323, 1165], [1, 1, -1, 0, 299, 0], [2, 0, 3, 0, 294, 0], [2, 0, -1, -2, 0, 8752]];
|
115 | return ta.map(function (row) {
|
116 | var o = {};['d', 'm', 'm_', 'f', 'Σl', 'Σr'].map(function (D2R, i) {
|
117 | o[D2R] = row[i];
|
118 | });
|
119 | return o;
|
120 | });
|
121 | }();
|
122 |
|
123 | var tb = function () {
|
124 | var tb = [[0, 0, 0, 1, 5128122], [0, 0, 1, 1, 280602], [0, 0, 1, -1, 277693], [2, 0, 0, -1, 173237], [2, 0, -1, 1, 55413], [2, 0, -1, -1, 46271], [2, 0, 0, 1, 32573], [0, 0, 2, 1, 17198], [2, 0, 1, -1, 9266], [0, 0, 2, -1, 8822], [2, -1, 0, -1, 8216], [2, 0, -2, -1, 4324], [2, 0, 1, 1, 4200], [2, 1, 0, -1, -3359], [2, -1, -1, 1, 2463], [2, -1, 0, 1, 2211], [2, -1, -1, -1, 2065], [0, 1, -1, -1, -1870], [4, 0, -1, -1, 1828], [0, 1, 0, 1, -1794], [0, 0, 0, 3, -1749], [0, 1, -1, 1, -1565], [1, 0, 0, 1, -1491], [0, 1, 1, 1, -1475], [0, 1, 1, -1, -1410], [0, 1, 0, -1, -1344], [1, 0, 0, -1, -1335], [0, 0, 3, 1, 1107], [4, 0, 0, -1, 1021], [4, 0, -1, 1, 833], [0, 0, 1, -3, 777], [4, 0, -2, 1, 671], [2, 0, 0, -3, 607], [2, 0, 2, -1, 596], [2, -1, 1, -1, 491], [2, 0, -2, 1, -451], [0, 0, 3, -1, 439], [2, 0, 2, 1, 422], [2, 0, -3, -1, 421], [2, 1, -1, 1, -366], [2, 1, 0, 1, -351], [4, 0, 0, 1, 331], [2, -1, 1, 1, 315], [2, -2, 0, -1, 302], [0, 0, 1, 3, -283], [2, 1, 1, -1, -229], [1, 1, 0, -1, 223], [1, 1, 0, 1, 223], [0, 1, -2, -1, -220], [2, 1, -1, -1, -220], [1, 0, 1, 1, -185], [2, -1, -2, -1, 181], [0, 1, 2, 1, -177], [4, 0, -2, -1, 176], [4, -1, -1, -1, 166], [1, 0, 1, -1, -164], [4, 0, 1, -1, 132], [1, 0, -1, -1, -119], [4, -1, 0, -1, 115], [2, -2, 0, 1, 107]];
|
125 | return tb.map(function (row) {
|
126 | var o = {};['d', 'm', 'm_', 'f', 'Σb'].map(function (D2R, i) {
|
127 | o[D2R] = row[i];
|
128 | });
|
129 | return o;
|
130 | });
|
131 | }();
|
132 |
|
133 |
|
134 |
|
135 |
|
136 |
|
137 |
|
138 |
|
139 | export function node(jde) {
|
140 | return base.pmod(base.horner(base.J2000Century(jde), 125.0445479 * D2R, -1934.1362891 * D2R, 0.0020754 * D2R, D2R / 467441, -D2R / 60616000), 2 * Math.PI);
|
141 | }
|
142 |
|
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 |
|
149 | export function perigee(jde) {
|
150 | return base.pmod(base.horner(base.J2000Century(jde), 83.3532465 * D2R, 4069.0137287 * D2R, -0.01032 * D2R, -D2R / 80053, D2R / 18999000), 2 * Math.PI);
|
151 | }
|
152 |
|
153 |
|
154 |
|
155 |
|
156 |
|
157 |
|
158 |
|
159 |
|
160 |
|
161 | export function trueNode(jde) {
|
162 | var _dmf2 = dmf(base.J2000Century(jde)),
|
163 | d = _dmf2[0],
|
164 | m = _dmf2[1],
|
165 | m_ = _dmf2[2],
|
166 | f = _dmf2[3];
|
167 |
|
168 | return node(jde) + -1.4979 * D2R * sin(2 * (d - f)) + -0.15 * D2R * sin(m) + -0.1226 * D2R * sin(2 * d) + 0.1176 * D2R * sin(2 * f) + -0.0801 * D2R * sin(2 * (m_ - f));
|
169 | }
|
170 |
|
171 | export default {
|
172 | parallax: parallax,
|
173 | position: position,
|
174 | node: node,
|
175 | perigee: perigee,
|
176 | trueNode: trueNode
|
177 | }; |
\ | No newline at end of file |