95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.6 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 elementequinox
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Elements are the orbital elements of a solar system object which change
 | 
						|
 * from one equinox to another.
 | 
						|
 *
 | 
						|
 * @param {Number} inc  - inclination
 | 
						|
 * @param {Number} node - longitude of ascending node (Ω)
 | 
						|
 * @param {Number} peri - argument of perihelion (ω)
 | 
						|
 */
 | 
						|
class Elements {
 | 
						|
  constructor (inc, node, peri) {
 | 
						|
    if (typeof inc === 'object') {
 | 
						|
      node = inc.pode;
 | 
						|
      peri = inc.peri;
 | 
						|
      inc = inc.inc;
 | 
						|
    }
 | 
						|
    this.inc = inc || 0;
 | 
						|
    this.node = node || 0;
 | 
						|
    this.peri = peri || 0;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
// (24.4) p. 161
 | 
						|
const S = 0.0001139788;
 | 
						|
const C = 0.9999999935;
 | 
						|
/**
 | 
						|
 * ReduceB1950ToJ2000 reduces orbital elements of a solar system body from
 | 
						|
 * equinox B1950 to J2000.
 | 
						|
 *
 | 
						|
 * @param {Elements} eFrom
 | 
						|
 * @returns {Elements} eTo
 | 
						|
 */
 | 
						|
function reduceB1950ToJ2000 (eFrom) {
 | 
						|
  const W = eFrom.node - 174.298782 * Math.PI / 180;
 | 
						|
  const [si, ci] = base["default"].sincos(eFrom.inc);
 | 
						|
  const [sW, cW] = base["default"].sincos(W);
 | 
						|
  const A = si * sW;
 | 
						|
  const B = C * si * cW - S * ci;
 | 
						|
  const eTo = new Elements();
 | 
						|
  eTo.inc = Math.asin(Math.hypot(A, B));
 | 
						|
  eTo.node = base["default"].pmod(174.997194 * Math.PI / 180 + Math.atan2(A, B),
 | 
						|
    2 * Math.PI);
 | 
						|
  eTo.peri = base["default"].pmod(eFrom.peri + Math.atan2(-S * sW, C * si - S * ci * cW),
 | 
						|
    2 * Math.PI);
 | 
						|
  return eTo
 | 
						|
}
 | 
						|
 | 
						|
const Lp = 4.50001688 * Math.PI / 180;
 | 
						|
const L = 5.19856209 * Math.PI / 180;
 | 
						|
const J = 0.00651966 * Math.PI / 180;
 | 
						|
 | 
						|
/**
 | 
						|
 * ReduceB1950ToJ2000 reduces orbital elements of a solar system body from
 | 
						|
 * equinox B1950 in the FK4 system to equinox J2000 in the FK5 system.
 | 
						|
 *
 | 
						|
 * @param {Elements} eFrom
 | 
						|
 * @returns {Elements} eTo
 | 
						|
 */
 | 
						|
function reduceB1950FK4ToJ2000FK5 (eFrom) {
 | 
						|
  const W = L + eFrom.node;
 | 
						|
  const [si, ci] = base["default"].sincos(eFrom.inc);
 | 
						|
  const [sJ, cJ] = base["default"].sincos(J);
 | 
						|
  const [sW, cW] = base["default"].sincos(W);
 | 
						|
  const eTo = new Elements();
 | 
						|
  eTo.inc = Math.acos(ci * cJ - si * sJ * cW);
 | 
						|
  eTo.node = base["default"].pmod(Math.atan2(si * sW, ci * sJ + si * cJ * cW) - Lp,
 | 
						|
    2 * Math.PI);
 | 
						|
  eTo.peri = base["default"].pmod(eFrom.peri + Math.atan2(sJ * sW, si * cJ + ci * sJ * cW),
 | 
						|
    2 * Math.PI);
 | 
						|
  return eTo
 | 
						|
}
 | 
						|
 | 
						|
var elementequinox = {
 | 
						|
  Elements,
 | 
						|
  reduceB1950ToJ2000,
 | 
						|
  reduceB1950FK4ToJ2000FK5
 | 
						|
};
 | 
						|
 | 
						|
exports.Elements = Elements;
 | 
						|
exports["default"] = elementequinox;
 | 
						|
exports.reduceB1950FK4ToJ2000FK5 = reduceB1950FK4ToJ2000FK5;
 | 
						|
exports.reduceB1950ToJ2000 = reduceB1950ToJ2000;
 |