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

94 lines
2.9 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var interpolation = require('./interpolation.cjs');
/**
* @copyright 2013 Sonia Keys
* @copyright 2016 commenthol
* @license MIT
* @module conjunction
*/
/**
* Planetary computes a conjunction between two moving objects, such as planets.
*
* Conjunction is found with interpolation against length 5 ephemerides.
*
* t1, t5 are times of first and last rows of ephemerides. The scale is
* arbitrary.
*
* cs1 is the ephemeris of the first object. The columns may be celestial
* coordinates in right ascension and declination or ecliptic coordinates in
* longitude and latitude.
*
* cs2 is the ephemeris of the second object, in the same frame as the first.
*
* Return value t is time of conjunction in the scale of t1, t5.
*
* @param {Number} t1 - julian ephemeris day of first row
* @param {Number} t5 - julian ephemeris day of fifth row
* @param {Coord[]} cs1 - ephemeris of first moving object
* @param {Coord[]} cs2 - ephemeris of decond moving object
* @return {Array}
* {Number} t - time of conjunction in JDE
* {Number} Δd - is the amount that object 2 was "above" object 1 at the time of conjunction.
*/
function planetary (t1, t5, cs1, cs2) {
if (cs1.length !== 5 || cs2.length !== 5) {
throw new Error('Five rows required in ephemerides')
}
const dr = new Array(5);
const dd = new Array(5);
cs1.forEach((r, i) => {
dr[i] = cs2[i].ra - cs1[i].ra;
dd[i] = cs2[i].dec - cs1[i].dec;
});
return conj(t1, t5, dr, dd)
}
/**
* Stellar computes a conjunction between a moving and non-moving object.
*
* Arguments and return values same as with Planetary, except the non-moving
* object is c1. The ephemeris of the moving object is cs2.
*
* @param {Number} t1 - julian ephemeris day of first row
* @param {Number} t5 - julian ephemeris day of fifth row
* @param {Coord} c1 - ephemeris of non-moving object
* @param {Coord[]} cs2 - ephemeris of moving object
* @return {Array}
* {Number} t - time of conjunction in JDE
* {Number} Δd - is the amount that object 2 was "above" object 1 at the time of conjunction.
*/
function stellar (t1, t5, c1, cs2) {
if (cs2.length !== 5) {
throw new Error('Five rows required in ephemerides')
}
const dr = new Array(5);
const dd = new Array(5);
cs2.forEach((r, i) => {
dr[i] = cs2[i].ra - c1.ra;
dd[i] = cs2[i].dec - c1.dec;
});
return conj(t1, t5, dr, dd)
}
const conj = function (t1, t5, dr, dd) { // (t1, t5 float64, dr, dd []float64) (t, Δd float64, err error)
let l5 = new interpolation["default"].Len5(t1, t5, dr);
const t = l5.zero(true);
l5 = new interpolation["default"].Len5(t1, t5, dd);
const Δd = l5.interpolateXStrict(t);
return [t, Δd]
};
var conjunction = {
planetary,
stellar
};
exports["default"] = conjunction;
exports.planetary = planetary;
exports.stellar = stellar;