UNPKG

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