303 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			303 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
Object.defineProperty(exports, '__esModule', { value: true });
 | 
						|
 | 
						|
var base = require('./base.cjs');
 | 
						|
 | 
						|
/**
 | 
						|
 * @copyright 2013 Sonia Keys
 | 
						|
 * @copyright 2016 commenthol
 | 
						|
 * @license MIT
 | 
						|
 * @module illum
 | 
						|
 */
 | 
						|
 | 
						|
const { toDeg } = base["default"];
 | 
						|
const D2R = Math.PI / 180;
 | 
						|
 | 
						|
/**
 | 
						|
 * PhaseAngle computes the phase angle of a planet.
 | 
						|
 *
 | 
						|
 * Argument r is planet's distance to Sun, Δ its distance to Earth, and R
 | 
						|
 * the distance from Sun to Earth.  All distances in AU.
 | 
						|
 *
 | 
						|
 * Result in radians.
 | 
						|
 */
 | 
						|
function phaseAngle (r, Δ, R) { // (r, Δ, R float64)  float64
 | 
						|
  return Math.acos((r * r + Δ * Δ - R * R) / (2 * r * Δ))
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Fraction computes the illuminated fraction of the disk of a planet.
 | 
						|
 *
 | 
						|
 * Argument r is planet's distance to Sun, Δ its distance to Earth, and R
 | 
						|
 * the distance from Sun to Earth.  All distances in AU.
 | 
						|
 */
 | 
						|
function fraction (r, Δ, R) { // (r, Δ, R float64)  float64
 | 
						|
  // (41.2) p. 283
 | 
						|
  const s = r + Δ;
 | 
						|
  return (s * s - R * R) / (4 * r * Δ)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * PhaseAngle2 computes the phase angle of a planet.
 | 
						|
 *
 | 
						|
 * Arguments L, B, R are heliocentric ecliptical coordinates of the planet.
 | 
						|
 * L0, R0 are longitude and radius for Earth, Δ is distance from Earth to
 | 
						|
 * the planet.  All distances in AU, angles in radians.
 | 
						|
 *
 | 
						|
 * The phase angle result is in radians.
 | 
						|
 */
 | 
						|
function phaseAngle2 (L, B, R, L0, R0, Δ) { // (L, B, R, L0, R0, Δ float64)  float64
 | 
						|
  // (41.3) p. 283
 | 
						|
  return Math.acos((R - R0 * Math.cos(B) * Math.cos(L - L0)) / Δ)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * PhaseAngle3 computes the phase angle of a planet.
 | 
						|
 *
 | 
						|
 * Arguments L, B are heliocentric ecliptical longitude and latitude of the
 | 
						|
 * planet.  x, y, z are cartesian coordinates of the planet, Δ is distance
 | 
						|
 * from Earth to the planet.  All distances in AU, angles in radians.
 | 
						|
 *
 | 
						|
 * The phase angle result is in radians.
 | 
						|
 */
 | 
						|
function phaseAngle3 (L, B, x, y, z, Δ) { // (L, B, x, y, z, Δ float64)  float64
 | 
						|
  // (41.4) p. 283
 | 
						|
  const [sL, cL] = base["default"].sincos(L);
 | 
						|
  const [sB, cB] = base["default"].sincos(B);
 | 
						|
  return Math.acos((x * cB * cL + y * cB * sL + z * sB) / Δ)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * FractionVenus computes an approximation of the illumanted fraction of Venus.
 | 
						|
 */
 | 
						|
function fractionVenus (jde) { // (jde float64)  float64
 | 
						|
  const T = base["default"].J2000Century(jde);
 | 
						|
  const V = (261.51 + 22518.443 * T) * D2R;
 | 
						|
  const M = (177.53 + 35999.05 * T) * D2R;
 | 
						|
  const N = (50.42 + 58517.811 * T) * D2R;
 | 
						|
  const W = V + (1.91 * Math.sin(M) + 0.78 * Math.sin(N)) * D2R;
 | 
						|
  const Δ = Math.sqrt(1.52321 + 1.44666 * Math.cos(W));
 | 
						|
  const s = 0.72333 + Δ;
 | 
						|
  return (s * s - 1) / 2.89332 / Δ
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Mercury computes the visual magnitude of Mercury.
 | 
						|
 * Formula by G. Müller
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth,
 | 
						|
 * and i the phase angle in radians.
 | 
						|
 */
 | 
						|
function mercury (r, Δ, i) { // (r, Δ, i float64)  float64
 | 
						|
  const s = toDeg(i) - 50;
 | 
						|
  return 1.16 + 5 * Math.log10(r * Δ) + (0.02838 + 0.0001023 * s) * s
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Venus computes the visual magnitude of Venus.
 | 
						|
 * Formula by G. Müller
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth,
 | 
						|
 * and i the phase angle in radians.
 | 
						|
 */
 | 
						|
function venus (r, Δ, i) { // (r, Δ, i float64)  float64
 | 
						|
  const iDeg = toDeg(i);
 | 
						|
  return -4 + 5 * Math.log10(r * Δ) + (0.01322 + 0.0000004247 * iDeg * iDeg) * iDeg
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Mars computes the visual magnitude of Mars.
 | 
						|
 * Formula by G. Müller
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth,
 | 
						|
 * and i the phase angle in radians.
 | 
						|
 */
 | 
						|
function mars (r, Δ, i) { // (r, Δ, i float64)  float64
 | 
						|
  return -1.3 + 5 * Math.log10(r * Δ) + 0.01486 * toDeg(i)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Jupiter computes the visual magnitude of Jupiter.
 | 
						|
 * Formula by G. Müller
 | 
						|
 * Effect of phase not considered
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth.
 | 
						|
 */
 | 
						|
function jupiter (r, Δ) { // (r, Δ float64)  float64
 | 
						|
  return -8.93 + 5 * Math.log10(r * Δ)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Saturn computes the visual magnitude of Saturn.
 | 
						|
 * Formula by G. Müller
 | 
						|
 * Sun's altitude above the plane of the ring is not considered.
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth.
 | 
						|
 * B is the Saturnicentric latitude of the Earth referred to the plane of
 | 
						|
 * Saturn's ring.
 | 
						|
 * ΔU (in radians) is the difference between the Saturnicentric longitudes
 | 
						|
 * of the Sun and the Earth, measured in the plane of the ring.
 | 
						|
 * You can use saturndisk.Disk() to obtain B and ΔU.
 | 
						|
 */
 | 
						|
function saturn (r, Δ, B, ΔU) { // (r, Δ, B, ΔU float64)  float64
 | 
						|
  const s = Math.sin(Math.abs(B));
 | 
						|
  return -8.68 + 5 * Math.log10(r * Δ) + 0.044 * Math.abs(toDeg(ΔU)) - 2.6 * s + 1.25 * s * s
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Uranus computes the visual magnitude of Uranus.
 | 
						|
 * Formula by G. Müller
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth.
 | 
						|
 */
 | 
						|
function uranus (r, Δ) { // (r, Δ float64)  float64
 | 
						|
  return -6.85 + 5 * Math.log10(r * Δ)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Neptune computes the visual magnitude of Neptune.
 | 
						|
 * Formulae by G. Müller
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth.
 | 
						|
 */
 | 
						|
function neptune (r, Δ) { // (r, Δ float64)  float64
 | 
						|
  return -7.05 + 5 * Math.log10(r * Δ)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Mercury84 computes the visual magnitude of Mercury.
 | 
						|
 * The formula is that adopted in "Astronomical Almanac" in 1984.0
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth,
 | 
						|
 * and i the phase angle in radians.
 | 
						|
 */
 | 
						|
function mercury84 (r, Δ, i) { // (r, Δ, i float64)  float64
 | 
						|
  return base["default"].horner(toDeg(i), -0.42 + 5 * Math.log10(r * Δ),
 | 
						|
    0.038, -0.000273, 0.000002)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Venus84 computes the visual magnitude of Venus.
 | 
						|
 * The formula is that adopted in "Astronomical Almanac" in 1984.0
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth,
 | 
						|
 * and i the phase angle in radians.
 | 
						|
 */
 | 
						|
function venus84 (r, Δ, i) { // (r, Δ, i float64)  float64
 | 
						|
  return base["default"].horner(toDeg(i), -4.4 + 5 * Math.log10(r * Δ),
 | 
						|
    0.0009, 0.000239, -0.00000065)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Mars84 computes the visual magnitude of Mars.
 | 
						|
 * The formula is that adopted in "Astronomical Almanac" in 1984.0
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth,
 | 
						|
 * and i the phase angle in radians.
 | 
						|
 */
 | 
						|
function mars84 (r, Δ, i) { // (r, Δ, i float64)  float64
 | 
						|
  return -1.52 + 5 * Math.log10(r * Δ) + 0.016 * toDeg(i)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Jupiter84 computes the visual magnitude of Jupiter.
 | 
						|
 * The formula is that adopted in "Astronomical Almanac" in 1984.0
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth,
 | 
						|
 * and i the phase angle in radians.
 | 
						|
 */
 | 
						|
function jupiter84 (r, Δ, i) { // (r, Δ, i float64)  float64
 | 
						|
  return -9.4 + 5 * Math.log10(r * Δ) + 0.005 * toDeg(i)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Saturn84 computes the visual magnitude of Saturn.
 | 
						|
 * The formula is that adopted in "Astronomical Almanac" in 1984.0
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth.
 | 
						|
 * B is the Saturnicentric latitude of the Earth referred to the plane of
 | 
						|
 * Saturn's ring.
 | 
						|
 * ΔU (in radians) is the difference between the Saturnicentric longitudes
 | 
						|
 * of the Sun and the Earth, measured in the plane of the ring.
 | 
						|
 */
 | 
						|
function saturn84 (r, Δ, B, ΔU) { // (r, Δ, B, ΔU float64)  float64
 | 
						|
  const s = Math.sin(Math.abs(B));
 | 
						|
  return -8.88 + 5 * Math.log10(r * Δ) + 0.044 * Math.abs(toDeg(ΔU)) - 2.6 * s + 1.25 * s * s
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Uranus84 computes the visual magnitude of Uranus.
 | 
						|
 * The formula is that adopted in "Astronomical Almanac" in 1984.0
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth.
 | 
						|
 */
 | 
						|
function uranus84 (r, Δ) { // (r, Δ float64)  float64
 | 
						|
  return -7.19 + 5 * Math.log10(r * Δ)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Neptune84 computes the visual magnitude of Neptune.
 | 
						|
 * The formula is that adopted in "Astronomical Almanac" in 1984.0
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth.
 | 
						|
 */
 | 
						|
function neptune84 (r, Δ) { // (r, Δ float64)  float64
 | 
						|
  return -6.87 + 5 * Math.log10(r * Δ)
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Pluto84 computes the visual magnitude of Pluto.
 | 
						|
 * The formula is that adopted in "Astronomical Almanac" in 1984.0
 | 
						|
 *
 | 
						|
 * Argument r is the planet's distance from the Sun, Δ the distance from Earth.
 | 
						|
 */
 | 
						|
function pluto84 (r, Δ) { // (r, Δ float64)  float64
 | 
						|
  return -1 + 5 * Math.log10(r * Δ)
 | 
						|
}
 | 
						|
 | 
						|
var illum = {
 | 
						|
  phaseAngle,
 | 
						|
  fraction,
 | 
						|
  phaseAngle2,
 | 
						|
  phaseAngle3,
 | 
						|
  fractionVenus,
 | 
						|
  mercury,
 | 
						|
  venus,
 | 
						|
  mars,
 | 
						|
  jupiter,
 | 
						|
  saturn,
 | 
						|
  uranus,
 | 
						|
  neptune,
 | 
						|
  mercury84,
 | 
						|
  venus84,
 | 
						|
  mars84,
 | 
						|
  jupiter84,
 | 
						|
  saturn84,
 | 
						|
  uranus84,
 | 
						|
  neptune84,
 | 
						|
  pluto84
 | 
						|
};
 | 
						|
 | 
						|
exports["default"] = illum;
 | 
						|
exports.fraction = fraction;
 | 
						|
exports.fractionVenus = fractionVenus;
 | 
						|
exports.jupiter = jupiter;
 | 
						|
exports.jupiter84 = jupiter84;
 | 
						|
exports.mars = mars;
 | 
						|
exports.mars84 = mars84;
 | 
						|
exports.mercury = mercury;
 | 
						|
exports.mercury84 = mercury84;
 | 
						|
exports.neptune = neptune;
 | 
						|
exports.neptune84 = neptune84;
 | 
						|
exports.phaseAngle = phaseAngle;
 | 
						|
exports.phaseAngle2 = phaseAngle2;
 | 
						|
exports.phaseAngle3 = phaseAngle3;
 | 
						|
exports.pluto84 = pluto84;
 | 
						|
exports.saturn = saturn;
 | 
						|
exports.saturn84 = saturn84;
 | 
						|
exports.uranus = uranus;
 | 
						|
exports.uranus84 = uranus84;
 | 
						|
exports.venus = venus;
 | 
						|
exports.venus84 = venus84;
 |