84 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict';
 | 
						|
 | 
						|
Object.defineProperty(exports, '__esModule', { value: true });
 | 
						|
 | 
						|
var base = require('./base.cjs');
 | 
						|
var coord = require('./coord.cjs');
 | 
						|
var nutation = require('./nutation.cjs');
 | 
						|
var solar = require('./solar.cjs');
 | 
						|
 | 
						|
/**
 | 
						|
 * @copyright 2013 Sonia Keys
 | 
						|
 * @copyright 2016 commenthol
 | 
						|
 * @license MIT
 | 
						|
 * @module eqtime
 | 
						|
 */
 | 
						|
const { cos, sin, tan } = Math;
 | 
						|
 | 
						|
/**
 | 
						|
 * e computes the "equation of time" for the given JDE.
 | 
						|
 *
 | 
						|
 * Parameter planet must be a planetposition.Planet object for Earth obtained
 | 
						|
 * with `new planetposition.Planet('earth')`.
 | 
						|
 *
 | 
						|
 * @param {Number} jde - Julian ephemeris day
 | 
						|
 * @param {planetposition.Planet} earth - VSOP87 planet
 | 
						|
 * @returns {Number} equation of time as an hour angle in radians.
 | 
						|
 */
 | 
						|
function e (jde, earth) {
 | 
						|
  const τ = base["default"].J2000Century(jde) * 0.1;
 | 
						|
  const L0 = l0(τ);
 | 
						|
  // code duplicated from solar.ApparentEquatorialVSOP87 so that
 | 
						|
  // we can keep Δψ and cε
 | 
						|
  const { lon, lat, range } = solar["default"].trueVSOP87(earth, jde);
 | 
						|
  const [Δψ, Δε] = nutation["default"].nutation(jde);
 | 
						|
  const a = -20.4898 / 3600 * Math.PI / 180 / range;
 | 
						|
  const λ = lon + Δψ + a;
 | 
						|
  const ε = nutation["default"].meanObliquity(jde) + Δε;
 | 
						|
  const eq = new coord["default"].Ecliptic(λ, lat).toEquatorial(ε);
 | 
						|
  // (28.1) p. 183
 | 
						|
  const E = L0 - 0.0057183 * Math.PI / 180 - eq.ra + Δψ * cos(ε);
 | 
						|
  return base["default"].pmod(E + Math.PI, 2 * Math.PI) - Math.PI
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * (28.2) p. 183
 | 
						|
 */
 | 
						|
const l0 = function (τ) {
 | 
						|
  return base["default"].horner(τ, 280.4664567, 360007.6982779, 0.03032028,
 | 
						|
    1.0 / 49931, -1.0 / 15300, -1.0 / 2000000) * Math.PI / 180
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * eSmart computes the "equation of time" for the given JDE.
 | 
						|
 *
 | 
						|
 * Result is less accurate that e() but the function has the advantage
 | 
						|
 * of not requiring the V87Planet object.
 | 
						|
 *
 | 
						|
 * @param {Number} jde - Julian ephemeris day
 | 
						|
 * @returns {Number} equation of time as an hour angle in radians.
 | 
						|
 */
 | 
						|
function eSmart (jde) {
 | 
						|
  const ε = nutation["default"].meanObliquity(jde);
 | 
						|
  const t = tan(ε * 0.5);
 | 
						|
  const y = t * t;
 | 
						|
  const T = base["default"].J2000Century(jde);
 | 
						|
  const L0 = l0(T * 0.1);
 | 
						|
  const e = solar["default"].eccentricity(T);
 | 
						|
  const M = solar["default"].meanAnomaly(T);
 | 
						|
  const [sin2L0, cos2L0] = base["default"].sincos(2 * L0);
 | 
						|
  const sinM = sin(M);
 | 
						|
  // (28.3) p. 185
 | 
						|
  return y * sin2L0 - 2 * e * sinM + 4 * e * y * sinM * cos2L0 -
 | 
						|
    y * y * sin2L0 * cos2L0 - 1.25 * e * e * sin(2 * M)
 | 
						|
}
 | 
						|
 | 
						|
var eqtime = {
 | 
						|
  e,
 | 
						|
  eSmart
 | 
						|
};
 | 
						|
 | 
						|
exports["default"] = eqtime;
 | 
						|
exports.e = e;
 | 
						|
exports.eSmart = eSmart;
 |