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 };