1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.PlanetRise = exports.times = exports.approxTimes = exports.Stdh0Lunar = exports.stdh0Lunar = exports.Stdh0LunarMean = exports.stdh0LunarMean = exports.Stdh0Solar = exports.stdh0Solar = exports.Stdh0Stellar = exports.stdh0Stellar = exports.stdh0 = exports.meanRefraction = exports.errorBelowHorizon = exports.errorAboveHorizon = undefined;
|
7 |
|
8 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
9 |
|
10 | var _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"); } }; }();
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | exports.refraction = refraction;
|
22 | exports.hourAngle = hourAngle;
|
23 |
|
24 | var _base = require('./base');
|
25 |
|
26 | var _base2 = _interopRequireDefault(_base);
|
27 |
|
28 | var _deltat = require('./deltat');
|
29 |
|
30 | var _deltat2 = _interopRequireDefault(_deltat);
|
31 |
|
32 | var _elliptic = require('./elliptic');
|
33 |
|
34 | var _elliptic2 = _interopRequireDefault(_elliptic);
|
35 |
|
36 | var _interpolation = require('./interpolation');
|
37 |
|
38 | var _interpolation2 = _interopRequireDefault(_interpolation);
|
39 |
|
40 | var _julian = require('./julian');
|
41 |
|
42 | var _julian2 = _interopRequireDefault(_julian);
|
43 |
|
44 | var _sexagesimal = require('./sexagesimal');
|
45 |
|
46 | var _sexagesimal2 = _interopRequireDefault(_sexagesimal);
|
47 |
|
48 | var _sidereal = require('./sidereal');
|
49 |
|
50 | var _sidereal2 = _interopRequireDefault(_sidereal);
|
51 |
|
52 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
53 |
|
54 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
55 |
|
56 | var acos = Math.acos,
|
57 | asin = Math.asin,
|
58 | cos = Math.cos,
|
59 | sin = Math.sin;
|
60 |
|
61 |
|
62 | var SECS_PER_DEGREE = 240;
|
63 | var SECS_PER_DAY = 86400;
|
64 | var D2R = Math.PI / 180;
|
65 |
|
66 | var errorAboveHorizon = exports.errorAboveHorizon = _base2.default.errorCode('always above horizon', -1);
|
67 | var errorBelowHorizon = exports.errorBelowHorizon = _base2.default.errorCode('always below horizon', 1);
|
68 |
|
69 |
|
70 |
|
71 |
|
72 | var meanRefraction = exports.meanRefraction = new _sexagesimal2.default.Angle(false, 0, 34, 0).rad();
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 |
|
79 |
|
80 | var stdh0 = exports.stdh0 = {
|
81 | stellar: -meanRefraction,
|
82 | solar: new _sexagesimal2.default.Angle(true, 0, 50, 0).rad(),
|
83 |
|
84 | lunar: new _sexagesimal2.default.Angle(false, 0, 0, 0.7275).rad(),
|
85 | lunarMean: new _sexagesimal2.default.Angle(false, 0, 0, 0.125).rad()
|
86 |
|
87 | |
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 | };function refraction(h0, corr) {
|
94 | if (!corr) {
|
95 | return h0;
|
96 | } else {
|
97 | return h0 - meanRefraction - corr;
|
98 | }
|
99 | }
|
100 |
|
101 |
|
102 |
|
103 |
|
104 | var stdh0Stellar = exports.stdh0Stellar = function stdh0Stellar(_refraction) {
|
105 | return refraction(stdh0.stellar, _refraction);
|
106 | };
|
107 | var Stdh0Stellar = exports.Stdh0Stellar = stdh0Stellar();
|
108 |
|
109 |
|
110 |
|
111 | var stdh0Solar = exports.stdh0Solar = function stdh0Solar(_refraction) {
|
112 | return refraction(stdh0.solar, _refraction);
|
113 | };
|
114 | var Stdh0Solar = exports.Stdh0Solar = stdh0Solar();
|
115 |
|
116 |
|
117 |
|
118 |
|
119 | var stdh0LunarMean = exports.stdh0LunarMean = function stdh0LunarMean(_refraction) {
|
120 | return stdh0.lunarMean - refraction(_refraction);
|
121 | };
|
122 | var Stdh0LunarMean = exports.Stdh0LunarMean = stdh0LunarMean();
|
123 |
|
124 |
|
125 |
|
126 |
|
127 |
|
128 |
|
129 |
|
130 |
|
131 | var stdh0Lunar = exports.stdh0Lunar = function stdh0Lunar(π, refraction) {
|
132 | refraction = refraction || meanRefraction;
|
133 | return stdh0.lunar * π - refraction;
|
134 | };
|
135 | var Stdh0Lunar = exports.Stdh0Lunar = stdh0Lunar;
|
136 |
|
137 |
|
138 |
|
139 |
|
140 | function hourAngle(lat, h0, δ) {
|
141 |
|
142 | var cosH = (sin(h0) - sin(lat) * sin(δ)) / (cos(lat) * cos(δ));
|
143 | if (cosH < -1) {
|
144 | throw errorAboveHorizon;
|
145 | } else if (cosH > 1) {
|
146 | throw errorBelowHorizon;
|
147 | }
|
148 | var H = acos(cosH);
|
149 | return H;
|
150 | }
|
151 |
|
152 |
|
153 |
|
154 |
|
155 |
|
156 |
|
157 |
|
158 | function _mt(lon, α, th0) {
|
159 |
|
160 | var mt = (lon + α) * SECS_PER_DEGREE * 180 / Math.PI - th0;
|
161 | return mt;
|
162 | }
|
163 |
|
164 |
|
165 |
|
166 |
|
167 |
|
168 |
|
169 | function _th0(Th0, m) {
|
170 |
|
171 |
|
172 |
|
173 | var th0 = _base2.default.pmod(Th0 + m * 360.985647 / 360, SECS_PER_DAY);
|
174 | return th0;
|
175 | }
|
176 |
|
177 |
|
178 |
|
179 | function _compatibility(rs) {
|
180 | var _rs = [rs.rise, rs.transit, rs.set];
|
181 | _rs.rise = rs.rise;
|
182 | _rs.transit = rs.transit;
|
183 | _rs.set = rs.set;
|
184 | return _rs;
|
185 | }
|
186 |
|
187 |
|
188 |
|
189 |
|
190 |
|
191 |
|
192 |
|
193 |
|
194 |
|
195 |
|
196 |
|
197 |
|
198 |
|
199 |
|
200 |
|
201 |
|
202 |
|
203 |
|
204 |
|
205 |
|
206 | function _approxTimes(p, h0, Th0, α, δ) {
|
207 | var H0 = hourAngle(p.lat, h0, δ) * SECS_PER_DEGREE * 180 / Math.PI;
|
208 |
|
209 |
|
210 | var mt = _mt(p.lon, α, Th0);
|
211 | var rs = {};
|
212 | rs.transit = _base2.default.pmod(mt, SECS_PER_DAY);
|
213 | rs.rise = _base2.default.pmod(mt - H0, SECS_PER_DAY);
|
214 | rs.set = _base2.default.pmod(mt + H0, SECS_PER_DAY);
|
215 | return _compatibility(rs);
|
216 | }
|
217 |
|
218 |
|
219 |
|
220 |
|
221 |
|
222 |
|
223 |
|
224 |
|
225 |
|
226 |
|
227 |
|
228 |
|
229 |
|
230 |
|
231 |
|
232 |
|
233 |
|
234 |
|
235 |
|
236 |
|
237 |
|
238 |
|
239 | exports.approxTimes = _approxTimes;
|
240 | function _times(p, ΔT, h0, Th0, α3, δ3) {
|
241 |
|
242 | var rs = _approxTimes(p, h0, Th0, α3[1], δ3[1]);
|
243 | var d3α = new _interpolation2.default.Len3(-SECS_PER_DAY, SECS_PER_DAY, α3);
|
244 | var d3δ = new _interpolation2.default.Len3(-SECS_PER_DAY, SECS_PER_DAY, δ3);
|
245 |
|
246 |
|
247 | var ut = rs.transit + ΔT;
|
248 | var α = d3α.interpolateX(ut);
|
249 | var th0 = _th0(Th0, rs.transit);
|
250 | var H = -1 * _mt(p.lon, α, th0);
|
251 | rs.transit -= H;
|
252 |
|
253 |
|
254 |
|
255 | var _base$sincos = _base2.default.sincos(p.lat),
|
256 | _base$sincos2 = _slicedToArray(_base$sincos, 2),
|
257 | sLat = _base$sincos2[0],
|
258 | cLat = _base$sincos2[1];
|
259 |
|
260 | var adjustRS = function adjustRS(m) {
|
261 | var ut = m + ΔT;
|
262 | var α = d3α.interpolateX(ut);
|
263 | var δ = d3δ.interpolateX(ut);
|
264 | var th0 = _th0(Th0, m);
|
265 | var H = -1 * _mt(p.lon, α, th0);
|
266 | var Hrad = H / SECS_PER_DEGREE * D2R;
|
267 | var h = asin(sLat * sin(δ) + cLat * cos(δ) * cos(Hrad));
|
268 | var Δm = SECS_PER_DAY * (h - h0) / (cos(δ) * cLat * sin(Hrad) * 2 * Math.PI);
|
269 | return m + Δm;
|
270 | };
|
271 |
|
272 | rs.rise = adjustRS(rs.rise);
|
273 | rs.set = adjustRS(rs.set);
|
274 |
|
275 | return _compatibility(rs);
|
276 | }
|
277 |
|
278 |
|
279 |
|
280 |
|
281 | exports.times = _times;
|
282 |
|
283 | var PlanetRise = exports.PlanetRise = function () {
|
284 | |
285 |
|
286 |
|
287 |
|
288 |
|
289 |
|
290 |
|
291 |
|
292 |
|
293 |
|
294 | function PlanetRise(jd, lat, lon, earth, planet, opts) {
|
295 | _classCallCheck(this, PlanetRise);
|
296 |
|
297 | this.opts = opts || {};
|
298 | this.refraction = this.opts.refraction || stdh0Stellar();
|
299 | if (jd instanceof Date) {
|
300 | jd = new _julian2.default.Calendar().fromDate(jd).toJD();
|
301 | }
|
302 | this.jd = Math.floor(jd - 0.5) + 0.5;
|
303 | this.lat = lat * D2R;
|
304 | this.lon = lon * D2R;
|
305 | var cal = new _julian2.default.Calendar().fromJD(this.jd);
|
306 | this.jde = cal.toJDE();
|
307 | this.ΔT = _deltat2.default.deltaT(cal.toYear());
|
308 | this.earth = earth;
|
309 | this.planet = planet;
|
310 | }
|
311 |
|
312 | _createClass(PlanetRise, [{
|
313 | key: 'approxTimes',
|
314 | value: function approxTimes() {
|
315 | var body = _elliptic2.default.position(this.planet, this.earth, this.jde);
|
316 | var Th0 = _sidereal2.default.apparent0UT(this.jd);
|
317 | var rs = _approxTimes({ lat: this.lat, lon: this.lon }, this.refraction, Th0, body.ra, body.dec);
|
318 | return this._rsToJD(rs);
|
319 | }
|
320 | }, {
|
321 | key: 'times',
|
322 | value: function times() {
|
323 | var body = [_elliptic2.default.position(this.planet, this.earth, this.jde - 1), _elliptic2.default.position(this.planet, this.earth, this.jde), _elliptic2.default.position(this.planet, this.earth, this.jde + 1)];
|
324 | var Th0 = _sidereal2.default.apparent0UT(this.jd);
|
325 | var rs = _times({ lat: this.lat, lon: this.lon }, this.ΔT, this.refraction, Th0, this._toArr(body, 'ra'), this._toArr(body, 'dec'));
|
326 | return this._rsToJD(rs);
|
327 | }
|
328 |
|
329 |
|
330 | }, {
|
331 | key: '_toArr',
|
332 | value: function _toArr(body, p) {
|
333 | return body.map(function (item) {
|
334 | return item[p];
|
335 | });
|
336 | }
|
337 |
|
338 |
|
339 | }, {
|
340 | key: '_rsToJD',
|
341 | value: function _rsToJD(rs) {
|
342 | return {
|
343 | rise: this._toJD(rs.rise),
|
344 | transit: this._toJD(rs.transit),
|
345 | set: this._toJD(rs.set)
|
346 | };
|
347 | }
|
348 | /** @private */
|
349 |
|
350 | }, {
|
351 | key: '_toJD',
|
352 | value: function _toJD(secs) {
|
353 | var jd = this.jd + secs / 86400;
|
354 | if (this.opts.date) {
|
355 | return new _julian2.default.Calendar().fromJD(jd).toDate();
|
356 | } else {
|
357 | return jd;
|
358 | }
|
359 | }
|
360 | }]);
|
361 |
|
362 | return PlanetRise;
|
363 | }();
|
364 |
|
365 | exports.default = {
|
366 | errorAboveHorizon: errorAboveHorizon,
|
367 | errorBelowHorizon: errorBelowHorizon,
|
368 | meanRefraction: meanRefraction,
|
369 | stdh0: stdh0,
|
370 | refraction: refraction,
|
371 | stdh0Stellar: stdh0Stellar,
|
372 | Stdh0Stellar: Stdh0Stellar,
|
373 | stdh0Solar: stdh0Solar,
|
374 | Stdh0Solar: Stdh0Solar,
|
375 | stdh0LunarMean: stdh0LunarMean,
|
376 | Stdh0LunarMean: Stdh0LunarMean,
|
377 | stdh0Lunar: stdh0Lunar,
|
378 | Stdh0Lunar: Stdh0Lunar,
|
379 | hourAngle: hourAngle,
|
380 | approxTimes: _approxTimes,
|
381 | times: _times,
|
382 | PlanetRise: PlanetRise
|
383 | }; |
\ | No newline at end of file |