astronomia
Version:
An astronomical library
541 lines (493 loc) • 11.8 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var base = require('./base.cjs');
/**
* @copyright 2013 Sonia Keys
* @copyright 2016 commenthol
* @license MIT
* @module planetary
*/
/**
* Mean computes some intermediate values for a mean planetary configuration
* given a year and a row of coefficients from Table 36.A, p. 250.0
*/
function mean (y, a) { // (y float64, a *ca) (J, M, T float64)
// (36.1) p. 250
const k = Math.floor((365.2425 * y + 1721060 - a.A) / a.B + 0.5);
const J = a.A + k * a.B;
const M = base["default"].pmod(a.M0 + k * a.M1, 360) * Math.PI / 180;
const T = base["default"].J2000Century(J);
return [J, M, T]
}
/**
* Sum computes a sum of periodic terms.
*/
function sum (T, M, c) { // (T, M float64, c [][]float64) float64
let j = base["default"].horner(T, c[0]);
let mm = 0.0;
for (let i = 1; i < c.length; i++) {
mm += M;
const [smm, cmm] = base["default"].sincos(mm);
j += smm * base["default"].horner(T, c[i]);
i++;
j += cmm * base["default"].horner(T, c[i]);
}
return j
}
/**
* ms returns a mean time corrected by a sum.
*/
function ms (y, a, c) { // (y float64, a *ca, c [][]float64) float64
const [J, M, T] = mean(y, a);
return J + sum(T, M, c)
}
/**
* MercuryInfConj returns the time of an inferior conjunction of Mercury.
*
* Result is time (as a jde) of the event nearest the given time (as a
* decimal year.)
*/
function mercuryInfConj (y) { // (y float64) (jde float64)
return ms(y, micA, micB)
}
/**
* MercurySupConj returns the time of a superior conjunction of Mercury.
*
* Result is time (as a jde) of the event nearest the given time (as a
* decimal year.)
*/
function mercurySupConj (y) { // (y float64) (jde float64)
return ms(y, mscA, mscB)
}
/**
* VenusInfConj returns the time of an inferior conjunction of Venus.
*
* Result is time (as a jde) of the event nearest the given time (as a
* decimal year.)
*/
function venusInfConj (y) { // (y float64) (jde float64)
return ms(y, vicA, vicB)
}
/**
* MarsOpp returns the time of an opposition of Mars.
*
* Result is time (as a jde) of the event nearest the given time (as a
* decimal year.)
*/
function marsOpp (y) { // (y float64) (jde float64)
return ms(y, moA, moB)
}
/**
* SumA computes the sum of periodic terms with "additional angles"
*/
function sumA (T, M, c, aa) { // (T, M float64, c [][]float64, aa []caa) float64
let i = c.length - 2 * aa.length;
let j = sum(T, M, c.slice(0, i));
for (let k = 0; k < aa.length; k++) {
const [saa, caa] = base["default"].sincos((aa[k].c + aa[k].f * T) * Math.PI / 180);
j += saa * base["default"].horner(T, c[i]);
i++;
j += caa * base["default"].horner(T, c[i]);
i++;
}
return j
}
/**
* Msa returns a mean time corrected by a sum.
*/
function msa (y, a, c, aa) { // (y float64, a *ca, c [][]float64, aa []caa) float64
const [J, M, T] = mean(y, a);
return J + sumA(T, M, c, aa)
}
/**
* JupiterOpp returns the time of an opposition of Jupiter.
*
* Result is time (as a jde) of the event nearest the given time (as a
* decimal year.)
*/
function jupiterOpp (y) { // (y float64) (jde float64)
return msa(y, joA, joB, jaa)
}
/**
* SaturnOpp returns the time of an opposition of Saturn.
*
* Result is time (as a jde) of the event nearest the given time (as a
* decimal year.)
*/
function saturnOpp (y) { // (y float64) (jde float64)
return msa(y, soA, soB, saa)
}
/**
* SaturnConj returns the time of a conjunction of Saturn.
*
* Result is time (as a jde) of the event nearest the given time (as a
* decimal year.)
*/
function saturnConj (y) { // (y float64) (jde float64)
return msa(y, scA, scB, saa)
}
/**
* UranusOpp returns the time of an opposition of Uranus.
*
* Result is time (as a jde) of the event nearest the given time (as a
* decimal year.)
*/
function uranusOpp (y) { // (y float64) (jde float64)
return msa(y, uoA, uoB, uaa)
}
/**
* NeptuneOpp returns the time of an opposition of Neptune.
*
* Result is time (as a jde) of the event nearest the given time (as a
* decimal year.)
*/
function neptuneOpp (y) { // (y float64) (jde float64)
return msa(y, noA, noB, naa)
}
/**
* El computes time and elongation of a greatest elongation event.
*/
function el (y, a, t, e) { // (y float64, a *ca, t, e [][]float64) (jde, elongation float64)
const [J, M, T] = mean(y, micA);
return [J + sum(T, M, t), sum(T, M, e) * Math.PI / 180]
}
/**
* MercuryEastElongation returns the time and elongation of a greatest eastern elongation of Mercury.
*
* Result is time (as a jde) of the event nearest the given time (as a
* decimal year.)
*/
function mercuryEastElongation (y) { // (y float64) (jde, elongation float64)
return el(y, micA, met, mee)
}
/**
* MercuryWestElongation returns the time and elongation of a greatest western elongation of Mercury.
*
* Result is time (as a jde) of the event nearest the given time (as a
* decimal year.)
*/
function mercuryWestElongation (y) { // (y float64) (jde, elongation float64)
return el(y, micA, mwt, mwe)
}
function marsStation2 (y) { // (y float64) (jde float64)
const [J, M, T] = mean(y, moA);
return J + sum(T, M, ms2)
}
/**
* ca holds coefficients from one line of table 36.A, p. 250
*/
function Ca (A, B, M0, M1) {
this.A = A;
this.B = B;
this.M0 = M0;
this.M1 = M1;
}
/**
* Table 36.A, p. 250
*/
const micA = new Ca(2451612.023, 115.8774771, 63.5867, 114.2088742);
const mscA = new Ca(2451554.084, 115.8774771, 6.4822, 114.2088742);
const vicA = new Ca(2451996.706, 583.921361, 82.7311, 215.513058);
const moA = new Ca(2452097.382, 779.936104, 181.9573, 48.705244);
const joA = new Ca(2451870.628, 398.884046, 318.4681, 33.140229);
const soA = new Ca(2451870.17, 378.091904, 318.0172, 12.647487);
const scA = new Ca(2451681.124, 378.091904, 131.6934, 12.647487);
const uoA = new Ca(2451764.317, 369.656035, 213.6884, 4.333093);
const noA = new Ca(2451753.122, 367.486703, 202.6544, 2.194998);
/**
* caa holds coefficients for "additional angles" for outer planets
* as given on p. 251
*/
function Caa (c, f) {
this.c = c;
this.f = f;
}
const jaa = [
new Caa(82.74, 40.76)
];
const saa = [
new Caa(82.74, 40.76),
new Caa(29.86, 1181.36),
new Caa(14.13, 590.68),
new Caa(220.02, 1262.87)
];
const uaa = [
new Caa(207.83, 8.51),
new Caa(108.84, 419.96)
];
const naa = [
new Caa(207.83, 8.51),
new Caa(276.74, 209.98)
];
/**
* Table 33.B, p. 256
*/
/**
* Mercury inferior conjunction
*/
const micB = [
[],
[-6.2008, 0.0074, 0.00003],
[-3.275, -0.0197, 0.00001],
[],
[],
[],
[-0.1768, 0, 0.00001],
[-0.0211, -0.0004],
[],
[],
[-0.004, 0.0001]
];
/**
* Mercury superior conjunction
*/
const mscB = [
[-0.0548, -0.0002],
[],
[],
[],
[],
[],
[],
[-0.0128, -0.0008],
[],
[-0.0122, -0.0002],
[]
];
/**
* Venus inferior conjunction
*/
const vicB = [
[-0.0096, 0.0002, -0.00001],
[],
[],
[],
[],
[],
[]
];
/**
* Mars opposition
*/
const moB = [
[-0.3088, 0, 0.00002],
[-17.6965, 0.0363, 0.00005],
[],
[-0.2162, -0.0198, -0.00001],
[-4.5028, -0.0019, 0.00007],
[],
[],
[-0.3636, -0.0001, 0.00002],
[],
[],
[-0.098, -0.0011]
];
/**
* Jupiter opposition
*/
const joB = [
[-0.1029, 0, -0.00009],
[-1.9658, -0.0056, 0.00007],
[],
[-0.2081, -0.0013],
[-0.1116, -0.001],
[],
[-0.0097, -0.0001],
[],
[]
];
/**
* Saturn opposition
*/
const soB = [
[-0.0209, 0.0006, 0.00023],
[],
[],
[],
[],
[],
[],
[],
[-0.851, 0.0044, 0.00068],
[],
[],
[],
[],
[],
[]
];
/**
* Saturn conjunction
*/
const scB = [
[],
[-8.5885, 0.0411, 0.00020],
[-1.147, 0.0352, -0.00011],
[],
[],
[-0.0169, 0.0002],
[-0.0109, 0.0004],
[],
[-0.851, 0.0044, 0.00068],
[],
[],
[],
[],
[],
[]
];
/**
* Uranus opposition
*/
const uoB = [
[],
[-0.1048, 0.0246],
[-5.1221, 0.0104, 0.00003],
[-0.1428, 0.0005],
[-0.0148, -0.0013],
[],
[],
[],
[],
[],
[]
];
/**
* Neptune opposition [
*/
const noB = [
[-0.014, 0, 0.00001],
[-1.3486, 0.001, 0.00001],
[],
[-0.0082, -0.0002, 0.00001],
[],
[],
[-0.5964],
[],
[]
];
/**
* Table 36.C, p. 259
*/
/**
* Mercury east time correction
*/
const met = [
[-21.6106, 0.0002],
[-1.9803, -0.006, 0.00001],
[],
[],
[],
[-0.1121, -0.0001, 0.00001],
[-0.0098, -0.0015],
[],
[],
[-0.0061],
[-0.0032, -0.0001]
];
/**
* Mercury east elongation
*/
const mee = [
[],
[-4.2666, 0.0054, 0.00002],
[-1.8537, -0.0137],
[],
[-0.068, 0.0026],
[-0.0524, -0.0003],
[],
[],
[-0.0013, 0.0001],
[-0.0021],
[]
];
/**
* Mercury west time correction
*/
const mwt = [
[],
[],
[-2.7661, -0.0011, 0.00001],
[],
[],
[],
[-0.0184, 0.0007],
[-0.0051, -0.0001],
[],
[],
[]
];
/**
* Mercury west elongation
*/
const mwe = [
[],
[],
[],
[],
[-0.3873, 0.0008, 0.00001],
[-0.0369, -0.0001],
[],
[],
[],
[],
[-0.0011]
];
/**
* Table 36.D, p. 261
*/
/**
* Mars Station 2
*/
const ms2 = [
[],
[-12.6163, 0.0417, -0.00001],
[],
[-1.636, -0.019],
[-3.9657, 0.0045, 0.00007],
[],
[],
[-0.3128, 0.0017, 0.00002],
[],
[-0.0021, -0.0016],
[-0.1497, -0.0006]
];
var planetary = {
mean,
sum,
ms,
mercuryInfConj,
mercurySupConj,
venusInfConj,
marsOpp,
sumA,
msa,
jupiterOpp,
saturnOpp,
saturnConj,
uranusOpp,
neptuneOpp,
el,
mercuryEastElongation,
mercuryWestElongation,
marsStation2
};
exports["default"] = planetary;
exports.el = el;
exports.jupiterOpp = jupiterOpp;
exports.marsOpp = marsOpp;
exports.marsStation2 = marsStation2;
exports.mean = mean;
exports.mercuryEastElongation = mercuryEastElongation;
exports.mercuryInfConj = mercuryInfConj;
exports.mercurySupConj = mercurySupConj;
exports.mercuryWestElongation = mercuryWestElongation;
exports.ms = ms;
exports.msa = msa;
exports.neptuneOpp = neptuneOpp;
exports.saturnConj = saturnConj;
exports.saturnOpp = saturnOpp;
exports.sum = sum;
exports.sumA = sumA;
exports.uranusOpp = uranusOpp;
exports.venusInfConj = venusInfConj;