1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.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 |
|
8 | 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"); } }; }(); /**
|
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 |
|
19 | exports.semidiameter = semidiameter;
|
20 | exports.aaturnApparentPolar = aaturnApparentPolar;
|
21 | exports.moonTopocentric = moonTopocentric;
|
22 | exports.moonTopocentric2 = moonTopocentric2;
|
23 | exports.asteroidDiameter = asteroidDiameter;
|
24 | exports.asteroid = asteroid;
|
25 |
|
26 | var _base = require('./base');
|
27 |
|
28 | var _base2 = _interopRequireDefault(_base);
|
29 |
|
30 | var _parallax = require('./parallax');
|
31 |
|
32 | var _parallax2 = _interopRequireDefault(_parallax);
|
33 |
|
34 | function _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 | */
|
41 | var Sun = exports.Sun = 959.63 / 3600 * Math.PI / 180;
|
42 | var Mercury = exports.Mercury = 3.36 / 3600 * Math.PI / 180;
|
43 | var VenusSurface = exports.VenusSurface = 8.34 / 3600 * Math.PI / 180;
|
44 | var VenusCloud = exports.VenusCloud = 8.41 / 3600 * Math.PI / 180;
|
45 | var Mars = exports.Mars = 4.68 / 3600 * Math.PI / 180;
|
46 | var JupiterEquatorial = exports.JupiterEquatorial = 98.44 / 3600 * Math.PI / 180;
|
47 | var JupiterPolar = exports.JupiterPolar = 92.06 / 3600 * Math.PI / 180;
|
48 | var SaturnEquatorial = exports.SaturnEquatorial = 82.73 / 3600 * Math.PI / 180;
|
49 | var SaturnPolar = exports.SaturnPolar = 73.82 / 3600 * Math.PI / 180;
|
50 | var Uranus = exports.Uranus = 35.02 / 3600 * Math.PI / 180;
|
51 | var Neptune = exports.Neptune = 33.50 / 3600 * Math.PI / 180;
|
52 | var Pluto = exports.Pluto = 2.07 / 3600 * Math.PI / 180;
|
53 | var 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 | */
|
62 | function 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 | */
|
78 | function 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 | */
|
97 | function 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 | */
|
129 | function 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 | */
|
140 | function 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 | */
|
153 | function asteroid(d, Δ) {
|
154 | // (d, Δ float64) float64
|
155 | return 0.0013788 * d / Δ / 3600 * Math.PI / 180;
|
156 | }
|
157 |
|
158 | exports.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 |