1 const paBinaryData = require("./data/pa-binarydata");
  2 const paMacros = require('./pa-macros.js');
  3 const paUtils = require('./pa-utils.js');
  4 
  5 /**
  6  * Calculate orbital data for binary star.
  7  */
  8 function binaryStarOrbit(greenwichDateDay, greenwichDateMonth, greenwichDateYear, binaryName) {
  9     var [binary_name, period, epochPeri, longPeri, ecc, axis, incl, paNode] = paBinaryData.getBinaryData(binaryName);
 10 
 11     var yYears = (greenwichDateYear + (paMacros.civilDateToJulianDate(greenwichDateDay, greenwichDateMonth, greenwichDateYear) - paMacros.civilDateToJulianDate(0, 1, greenwichDateYear)) / 365.242191) - Number(epochPeri);
 12     var mDeg = 360 * yYears / Number(period);
 13     var mRad = paUtils.degreesToRadians(mDeg - 360 * Math.floor(mDeg / 360));
 14     var eccentricity = Number(ecc);
 15     var trueAnomalyRad = paMacros.trueAnomaly(mRad, eccentricity);
 16     var rArcsec = (1 - eccentricity * Math.cos(paMacros.eccentricAnomaly(mRad, eccentricity))) * Number(axis);
 17     var taPeriRad = trueAnomalyRad + paUtils.degreesToRadians(Number(longPeri));
 18 
 19     var y = Math.sin(taPeriRad) * Math.cos(paUtils.degreesToRadians(Number(incl)));
 20     var x = Math.cos(taPeriRad);
 21     var aDeg = paMacros.degrees(Math.atan2(y, x));
 22     var thetaDeg1 = aDeg + Number(paNode);
 23     var thetaDeg2 = thetaDeg1 - 360 * Math.floor(thetaDeg1 / 360);
 24     var rhoArcsec = rArcsec * Math.cos(taPeriRad) / Math.cos(paUtils.degreesToRadians(thetaDeg2 - Number(paNode)));
 25 
 26     var positionAngleDeg = paUtils.round(thetaDeg2, 1);
 27     var separationArcsec = paUtils.round(rhoArcsec, 2);
 28 
 29     return [positionAngleDeg, separationArcsec];
 30 }
 31 
 32 
 33 module.exports = {
 34     binaryStarOrbit
 35 };