django-vue3-admin-web/node_modules/astronomia/lib/binary.cjs
2025-10-20 21:21:14 +08:00

87 lines
2.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var base = require('./base.cjs');
/**
* @copyright 2013 Sonia Keys
* @copyright 2016 commenthol
* @license MIT
* @module binary
*/
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.
*/
function meanAnomaly (year, T, P) { // (year, T, P float64) float64
const n = 2 * Math.PI / P;
return base["default"].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.
*/
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["default"].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
*/
function apparentEccentricity (e, i, ω) { // (e, i, ω float64) float64
const cosi = cos(i);
const [sinω, cosω] = base["default"].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))
}
var binary = {
meanAnomaly,
position,
apparentEccentricity
};
exports.apparentEccentricity = apparentEccentricity;
exports["default"] = binary;
exports.meanAnomaly = meanAnomaly;
exports.position = position;