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

282 lines
7.5 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var base = require('./base.cjs');
/**
* @copyright 2013 Sonia Keys
* @copyright 2016 commenthol
* @license MIT
* @module moonphase
*/
const { sin, cos } = Math;
const ck = 1 / 1236.85;
const D2R = Math.PI / 180;
/**
* mean synodial lunar month
*/
const meanLunarMonth = 29.530588861;
// (49.1) p. 349
function mean (T) {
return base["default"].horner(T, 2451550.09766, 29.530588861 / ck,
0.00015437, -0.00000015, 0.00000000073)
}
/** snap returns k at specified quarter q nearest year y. */
function snap (y, q) {
const k = (y - 2000) * 12.3685; // (49.2) p. 350
return Math.floor(k - q + 0.5) + q
}
/**
* MeanNew returns the jde of the mean New Moon nearest the given datthis.
* The mean date is within 0.5 day of the true date of New Moon.
*
* @param {Number} year - decimal year
* @returns {Number} jde
*/
function meanNew (year) {
return mean(snap(year, 0) * ck)
}
/**
* MeanFirst returns the jde of the mean First Quarter Moon nearest the given datthis.
* The mean date is within 0.5 day of the true date of First Quarter Moon.
*
* @param {Number} year - decimal year
* @returns {Number} jde
*/
function meanFirst (year) {
return mean(snap(year, 0.25) * ck)
}
/**
* MeanFull returns the jde of the mean Full Moon nearest the given datthis.
* The mean date is within 0.5 day of the true date of Full Moon.
*
* @param {Number} year - decimal year
* @returns {Number} jde
*/
function meanFull (year) {
return mean(snap(year, 0.5) * ck)
}
/**
* MeanLast returns the jde of the mean Last Quarter Moon nearest the given datthis.
* The mean date is within 0.5 day of the true date of Last Quarter Moon.
*
* @param {Number} year - decimal year
* @returns {Number} jde
*/
function meanLast (year) {
return mean(snap(year, 0.75) * ck)
}
/**
* New returns the jde of New Moon nearest the given date.
*
* @param {Number} year - decimal year
* @returns {Number} jde
*/
function newMoon (year) {
const m = new Mp(year, 0);
return mean(m.T) + m.nfc(nc) + m.a()
}
/**
* First returns the jde of First Quarter Moon nearest the given datthis.
*
* @param {Number} year - decimal year
* @returns {Number} jde
*/
function first (year) {
const m = new Mp(year, 0.25);
return mean(m.T) + m.flc() + m.w() + m.a()
}
/**
* Full returns the jde of Full Moon nearest the given datthis.
*
* @param {Number} year - decimal year
* @returns {Number} jde
*/
function full (year) {
const m = new Mp(year, 0.5);
return mean(m.T) + m.nfc(fc) + m.a()
}
/**
* Last returns the jde of Last Quarter Moon nearest the given datthis.
*
* @param {Number} year - decimal year
* @returns {Number} jde
*/
function last (year) {
const m = new Mp(year, 0.75);
return mean(m.T) + m.flc() - m.w() + m.a()
}
class Mp {
constructor (y, q) {
this.A = new Array(14);
const k = this.k = snap(y, q);
const T = this.T = this.k * ck; // (49.3) p. 350
this.E = base["default"].horner(T, 1, -0.002516, -0.0000074);
this.M = base["default"].horner(T, 2.5534 * D2R, 29.1053567 * D2R / ck,
-0.0000014 * D2R, -0.00000011 * D2R);
this.M_ = base["default"].horner(T, 201.5643 * D2R, 385.81693528 * D2R / ck,
0.0107582 * D2R, 0.00001238 * D2R, -0.000000058 * D2R);
this.F = base["default"].horner(T, 160.7108 * D2R, 390.67050284 * D2R / ck,
-0.0016118 * D2R, -0.00000227 * D2R, 0.000000011 * D2R);
this.Ω = base["default"].horner(T, 124.7746 * D2R, -1.56375588 * D2R / ck,
0.0020672 * D2R, 0.00000215 * D2R);
this.A[0] = 299.7 * D2R + 0.107408 * D2R * k - 0.009173 * T * T;
this.A[1] = 251.88 * D2R + 0.016321 * D2R * k;
this.A[2] = 251.83 * D2R + 26.651886 * D2R * k;
this.A[3] = 349.42 * D2R + 36.412478 * D2R * k;
this.A[4] = 84.66 * D2R + 18.206239 * D2R * k;
this.A[5] = 141.74 * D2R + 53.303771 * D2R * k;
this.A[6] = 207.17 * D2R + 2.453732 * D2R * k;
this.A[7] = 154.84 * D2R + 7.30686 * D2R * k;
this.A[8] = 34.52 * D2R + 27.261239 * D2R * k;
this.A[9] = 207.19 * D2R + 0.121824 * D2R * k;
this.A[10] = 291.34 * D2R + 1.844379 * D2R * k;
this.A[11] = 161.72 * D2R + 24.198154 * D2R * k;
this.A[12] = 239.56 * D2R + 25.513099 * D2R * k;
this.A[13] = 331.55 * D2R + 3.592518 * D2R * k;
}
// new or full corrections
nfc (c) {
const { M, M_, E, F, Ω } = this;
return c[0] * sin(M_) +
c[1] * sin(M) * E +
c[2] * sin(2 * M_) +
c[3] * sin(2 * F) +
c[4] * sin(M_ - M) * E +
c[5] * sin(M_ + M) * E +
c[6] * sin(2 * M) * E * E +
c[7] * sin(M_ - 2 * F) +
c[8] * sin(M_ + 2 * F) +
c[9] * sin(2 * M_ + M) * E +
c[10] * sin(3 * M_) +
c[11] * sin(M + 2 * F) * E +
c[12] * sin(M - 2 * F) * E +
c[13] * sin(2 * M_ - M) * E +
c[14] * sin(Ω) +
c[15] * sin(M_ + 2 * M) +
c[16] * sin(2 * (M_ - F)) +
c[17] * sin(3 * M) +
c[18] * sin(M_ + M - 2 * F) +
c[19] * sin(2 * (M_ + F)) +
c[20] * sin(M_ + M + 2 * F) +
c[21] * sin(M_ - M + 2 * F) +
c[22] * sin(M_ - M - 2 * F) +
c[23] * sin(3 * M_ + M) +
c[24] * sin(4 * M_)
}
// first or last corrections
flc () {
const { M, M_, E, F, Ω } = this;
return -0.62801 * sin(M_) +
0.17172 * sin(M) * E +
-0.01183 * sin(M_ + M) * E +
0.00862 * sin(2 * M_) +
0.00804 * sin(2 * F) +
0.00454 * sin(M_ - M) * E +
0.00204 * sin(2 * M) * E * E +
-0.0018 * sin(M_ - 2 * F) +
-0.0007 * sin(M_ + 2 * F) +
-0.0004 * sin(3 * M_) +
-0.00034 * sin(2 * M_ - M) * E +
0.00032 * sin(M + 2 * F) * E +
0.00032 * sin(M - 2 * F) * E +
-0.00028 * sin(M_ + 2 * M) * E * E +
0.00027 * sin(2 * M_ + M) * E +
-0.00017 * sin(Ω) +
-0.00005 * sin(M_ - M - 2 * F) +
0.00004 * sin(2 * M_ + 2 * F) +
-0.00004 * sin(M_ + M + 2 * F) +
0.00004 * sin(M_ - 2 * M) +
0.00003 * sin(M_ + M - 2 * F) +
0.00003 * sin(3 * M) +
0.00002 * sin(2 * M_ - 2 * F) +
0.00002 * sin(M_ - M + 2 * F) +
-0.00002 * sin(3 * M_ + M)
}
w () {
const { M, M_, E, F } = this;
return 0.00306 -
0.00038 * E * cos(M) +
0.00026 * cos(M_) -
0.00002 * (cos(M_ - M) -
cos(M_ + M) -
cos(2 * F)
)
}
// additional corrections
a () {
let a = 0;
ac.forEach((c, i) => {
a += c * sin(this.A[i]);
});
return a
}
}
// new coefficients
const nc = [
-0.4072, 0.17241, 0.01608, 0.01039, 0.00739,
-0.00514, 0.00208, -0.00111, -0.00057, 0.00056,
-0.00042, 0.00042, 0.00038, -0.00024, -0.00017,
-0.00007, 0.00004, 0.00004, 0.00003, 0.00003,
-0.00003, 0.00003, -0.00002, -0.00002, 0.00002
];
// full coefficients
const fc = [
-0.40614, 0.17302, 0.01614, 0.01043, 0.00734,
-0.00515, 0.00209, -0.00111, -0.00057, 0.00056,
-0.00042, 0.00042, 0.00038, -0.00024, -0.00017,
-0.00007, 0.00004, 0.00004, 0.00003, 0.00003,
-0.00003, 0.00003, -0.00002, -0.00002, 0.00002
];
// additional corrections
const ac = [
0.000325, 0.000165, 0.000164, 0.000126, 0.00011,
0.000062, 0.00006, 0.000056, 0.000047, 0.000042,
0.000040, 0.000037, 0.000035, 0.000023
];
var moonphase = {
meanLunarMonth,
meanNew,
meanFirst,
meanFull,
meanLast,
newMoon,
new: newMoon, // BACKWARDS-COMPATIBILITY
first,
full,
last
};
exports["default"] = moonphase;
exports.first = first;
exports.full = full;
exports.last = last;
exports.meanFirst = meanFirst;
exports.meanFull = meanFull;
exports.meanLast = meanLast;
exports.meanLunarMonth = meanLunarMonth;
exports.meanNew = meanNew;
exports.newMoon = newMoon;