UNPKG

9.53 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.Moon = exports.Pluto = exports.Neptune = exports.Uranus = exports.SaturnPolar = exports.SaturnEquatorial = exports.JupiterPolar = exports.JupiterEquatorial = exports.Mars = exports.VenusCloud = exports.VenusSurface = exports.Mercury = exports.Sun = undefined;
7
8var _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"); } }; }(); /**
9 * @copyright 2013 Sonia Keys
10 * @copyright 2016 commenthol
11 * @license MIT
12 * @module semidiameter
13 */
14/**
15 * Semidiameter: Chapter 55, Semidiameters of the Sun, Moon, and Planets.
16 */
17
18
19exports.semidiameter = semidiameter;
20exports.aaturnApparentPolar = aaturnApparentPolar;
21exports.moonTopocentric = moonTopocentric;
22exports.moonTopocentric2 = moonTopocentric2;
23exports.asteroidDiameter = asteroidDiameter;
24exports.asteroid = asteroid;
25
26var _base = require('./base');
27
28var _base2 = _interopRequireDefault(_base);
29
30var _parallax = require('./parallax');
31
32var _parallax2 = _interopRequireDefault(_parallax);
33
34function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
36/* eslint-disable no-multi-spaces */
37/**
38 * Standard semidiameters at unit distance of 1 AU.
39 * Values are scaled here to radians.
40 */
41var Sun = exports.Sun = 959.63 / 3600 * Math.PI / 180;
42var Mercury = exports.Mercury = 3.36 / 3600 * Math.PI / 180;
43var VenusSurface = exports.VenusSurface = 8.34 / 3600 * Math.PI / 180;
44var VenusCloud = exports.VenusCloud = 8.41 / 3600 * Math.PI / 180;
45var Mars = exports.Mars = 4.68 / 3600 * Math.PI / 180;
46var JupiterEquatorial = exports.JupiterEquatorial = 98.44 / 3600 * Math.PI / 180;
47var JupiterPolar = exports.JupiterPolar = 92.06 / 3600 * Math.PI / 180;
48var SaturnEquatorial = exports.SaturnEquatorial = 82.73 / 3600 * Math.PI / 180;
49var SaturnPolar = exports.SaturnPolar = 73.82 / 3600 * Math.PI / 180;
50var Uranus = exports.Uranus = 35.02 / 3600 * Math.PI / 180;
51var Neptune = exports.Neptune = 33.50 / 3600 * Math.PI / 180;
52var Pluto = exports.Pluto = 2.07 / 3600 * Math.PI / 180;
53var Moon = exports.Moon = 358473400 / _base2.default.AU / 3600 * Math.PI / 180;
54/* eslint-enable */
55
56/**
57 * Semidiameter returns semidiameter at specified distance.
58 *
59 * When used with S0 values provided, Δ must be observer-body distance in AU.
60 * Result will then be in radians.
61 */
62function semidiameter(s0, Δ) {
63 // (s0, Δ float64) float64
64 return s0 / Δ;
65}
66
67/**
68 * SaturnApparentPolar returns apparent polar semidiameter of Saturn
69 * at specified distance.
70 *
71 * Argument Δ must be observer-Saturn distance in AU. Argument B is
72 * Saturnicentric latitude of the observer as given by function saturnring.UB()
73 * for example.
74 *
75 * Result is semidiameter in units of package variables SaturnPolar and
76 * SaturnEquatorial, nominally radians.
77 */
78function aaturnApparentPolar(Δ, B) {
79 // (Δ, B float64) float64
80 var k = SaturnPolar / SaturnEquatorial;
81 k = 1 - k * k;
82 var cB = Math.cos(B);
83 return SaturnEquatorial / Δ * Math.sqrt(1 - k * cB * cB);
84}
85
86/**
87 * MoonTopocentric returns observed topocentric semidiameter of the Moon.
88 *
89 * Δ is distance to Moon in AU.
90 * δ is declination of Moon in radians.
91 * H is hour angle of Moon in radians.
92 * ρsφʹ, ρcφʹ are parallax constants as returned by
93 * globe.Ellipsoid.ParallaxConstants, for example.
94 *
95 * Result is semidiameter in radians.
96 */
97function moonTopocentric(Δ, δ, H, ρsφʹ, ρcφʹ) {
98 // (Δ, δ, H, ρsφʹ, ρcφʹ float64) float64
99 var k = 0.272481;
100 var sπ = Math.sin(_parallax2.default.Horizontal(Δ));
101 // q computed by (40.6, 40.7) p. 280, ch 40.0
102
103 var _base$sincos = _base2.default.sincos(δ),
104 _base$sincos2 = _slicedToArray(_base$sincos, 2),
105 sδ = _base$sincos2[0],
106 cδ = _base$sincos2[1];
107
108 var _base$sincos3 = _base2.default.sincos(H),
109 _base$sincos4 = _slicedToArray(_base$sincos3, 2),
110 sH = _base$sincos4[0],
111 cH = _base$sincos4[1];
112
113 var A = cδ * sH;
114 var B = cδ * cH - ρcφʹ * sπ;
115 var C = sδ - ρsφʹ * sπ;
116 var q = Math.sqrt(A * A + B * B + C * C);
117 return k / q * sπ;
118}
119
120/**
121 * MoonTopocentric2 returns observed topocentric semidiameter of the Moon
122 * by a less rigorous method.
123 *
124 * Δ is distance to Moon in AU, h is altitude of the Moon above the observer's
125 * horizon in radians.
126 *
127 * Result is semidiameter in radians.
128 */
129function moonTopocentric2(Δ, h) {
130 // (Δ, h float64) float64
131 return Moon / Δ * (1 + Math.sin(h) * Math.sin(_parallax2.default.Horizontal(Δ)));
132}
133
134/**
135 * AsteroidDiameter returns approximate diameter given absolute magnitude H
136 * and albedo A.
137 *
138 * Result is in km.
139 */
140function asteroidDiameter(H, A) {
141 // (H, A float64) float64
142 return Math.pow(10, 3.12 - 0.2 * H - 0.5 * Math.log10(A));
143}
144
145/**
146 * Asteroid returns semidiameter of an asteroid with a given diameter
147 * at given distance.
148 *
149 * Argument d is diameter in km, Δ is distance in AU.
150 *
151 * Result is semidiameter in radians.
152 */
153function asteroid(d, Δ) {
154 // (d, Δ float64) float64
155 return 0.0013788 * d / Δ / 3600 * Math.PI / 180;
156}
157
158exports.default = {
159 Sun: Sun,
160 Mercury: Mercury,
161 VenusSurface: VenusSurface,
162 VenusCloud: VenusCloud,
163 Mars: Mars,
164 JupiterEquatorial: JupiterEquatorial,
165 JupiterPolar: JupiterPolar,
166 SaturnEquatorial: SaturnEquatorial,
167 SaturnPolar: SaturnPolar,
168 Uranus: Uranus,
169 Neptune: Neptune,
170 Pluto: Pluto,
171 Moon: Moon,
172 semidiameter: semidiameter,
173 aaturnApparentPolar: aaturnApparentPolar,
174 moonTopocentric: moonTopocentric,
175 moonTopocentric2: moonTopocentric2,
176 asteroidDiameter: asteroidDiameter,
177 asteroid: asteroid
178};
\No newline at end of file