astronomia
Version:
An astronomical library
80 lines (75 loc) • 2.63 kB
JavaScript
/**
* @copyright 2013 Sonia Keys
* @copyright 2016 commenthol
* @license MIT
* @module binary
*/
/**
* Binary: Chapter 57, Binary Stars
*/
import base from './base.js'
const { atan, atan2, cos, sqrt, tan } = Math
/**
* computes mean anomaly for the given date.
*
* @param {Number} year - is a decimal year specifying the date
* @param {Number} T - is time of periastron, as a decimal year
* @param {Number} P - is period of revolution in mean solar years
* @returns {Number} mean anomaly in radians.
*/
export function meanAnomaly (year, T, P) { // (year, T, P float64) float64
const n = 2 * Math.PI / P
return base.pmod(n * (year - T), 2 * Math.PI)
}
/**
* Position computes apparent position angle and angular distance of
* components of a binary star.
*
* @param {Number} a - is apparent semimajor axis in arc seconds
* @param {Number} e - is eccentricity of the true orbit
* @param {Number} i - is inclination relative to the line of sight
* @param {Number} Ω - is position angle of the ascending node
* @param {Number} ω - is longitude of periastron
* @param {Number} E - is eccentric anomaly, computed for example with package kepler
* and the mean anomaly as returned by function M in this package.
* @returns {Number[]} [θ, ρ]
* {Number} θ -is the apparent position angle in radians,
* {Number} ρ is the angular distance in arc seconds.
*/
export function position (a, e, i, Ω, ω, E) { // (a, e, i, Ω, ω, E float64) (θ, ρ float64)
const r = a * (1 - e * cos(E))
const ν = 2 * atan(sqrt((1 + e) / (1 - e)) * tan(E / 2))
const [sinνω, cosνω] = base.sincos(ν + ω)
const cosi = cos(i)
const num = sinνω * cosi
let θ = atan2(num, cosνω) + Ω
if (θ < 0) {
θ += 2 * Math.PI
}
const ρ = r * sqrt(num * num + cosνω * cosνω)
return [θ, ρ]
}
/**
* ApparentEccentricity returns apparent eccenticity of a binary star
* given true orbital elements.
*
* @param {Number} e - is eccentricity of the true orbit
* @param {Number} i - is inclination relative to the line of sight
* @param {Number} ω - is longitude of periastron
* @returns {Number} apparent eccenticity of a binary star
*/
export function apparentEccentricity (e, i, ω) { // (e, i, ω float64) float64
const cosi = cos(i)
const [sinω, cosω] = base.sincos(ω)
const A = (1 - e * e * cosω * cosω) * cosi * cosi
const B = e * e * sinω * cosω * cosi
const C = 1 - e * e * sinω * sinω
const d = A - C
const sqrtD = sqrt(d * d + 4 * B * B)
return sqrt(2 * sqrtD / (A + C + sqrtD))
}
export default {
meanAnomaly,
position,
apparentEccentricity
}