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

164 lines
4.9 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var base = require('./base.cjs');
var nutation = require('./nutation.cjs');
var solar = require('./solar.cjs');
/**
* @copyright 2013 Sonia Keys
* @copyright 2016 commenthol
* @license MIT
* @module solarxyz
*/
/**
* Position returns rectangular coordinates referenced to the mean equinox of date.
* @param {planetposition.Planet} earth - VSOP87Planet Earth
* @param {Number} jde - Julian ephemeris day
* @return {object} rectangular coordinates
* {Number} x
* {Number} y
* {Number} z
*/
function position (earth, jde) { // (e *pp.V87Planet, jde float64) (x, y, z float64)
// (26.1) p. 171
const { lon, lat, range } = solar["default"].trueVSOP87(earth, jde);
const [, ] = base["default"].sincos(nutation["default"].meanObliquity(jde));
const [ss, cs] = base["default"].sincos(lon);
const = Math.sin(lat);
const x = range * cs;
const y = range * (ss * - * );
const z = range * (ss * + * );
return { x, y, z }
}
/**
* LongitudeJ2000 returns geometric longitude referenced to equinox J2000.
* @param {planetposition.Planet} earth - VSOP87Planet Earth
* @param {Number} jde - Julian ephemeris day
* @return {Number} geometric longitude referenced to equinox J2000.
*/
function longitudeJ2000 (earth, jde) {
const lon = earth.position2000(jde).lon;
return base["default"].pmod(lon + Math.PI - 0.09033 / 3600 * Math.PI / 180, 2 * Math.PI)
}
/**
* PositionJ2000 returns rectangular coordinates referenced to equinox J2000.
* @param {planetposition.Planet} earth - VSOP87Planet Earth
* @param {Number} jde - Julian ephemeris day
* @return {object} rectangular coordinates
* {Number} x
* {Number} y
* {Number} z
*/
function positionJ2000 (earth, jde) {
const { x, y, z } = xyz(earth, jde);
// (26.3) p. 174
return {
x: x + 0.00000044036 * y - 0.000000190919 * z,
y: -0.000000479966 * x + 0.917482137087 * y - 0.397776982902 * z,
z: 0.397776982902 * y + 0.917482137087 * z
}
}
function xyz (earth, jde) {
const { lon, lat, range } = earth.position2000(jde);
const s = lon + Math.PI;
const β = -lat;
const [ss, cs] = base["default"].sincos(s);
const [, ] = base["default"].sincos(β);
// (26.2) p. 172
const x = range * * cs;
const y = range * * ss;
const z = range * ;
return { x, y, z }
}
/**
* PositionB1950 returns rectangular coordinates referenced to B1950.
*
* Results are referenced to the mean equator and equinox of the epoch B1950
* in the FK5 system, not FK4.
*
* @param {planetposition.Planet} earth - VSOP87Planet Earth
* @param {Number} jde - Julian ephemeris day
* @return {object} rectangular coordinates
* {Number} x
* {Number} y
* {Number} z
*/
function positionB1950 (earth, jde) { // (e *pp.V87Planet, jde float64) (x, y, z float64)
const { x, y, z } = xyz(earth, jde);
return {
x: 0.999925702634 * x + 0.012189716217 * y + 0.000011134016 * z,
y: -0.011179418036 * x + 0.917413998946 * y - 0.397777041885 * z,
z: -0.004859003787 * x + 0.397747363646 * y + 0.917482111428 * z
}
}
const ζt = [2306.2181, 0.30188, 0.017998];
const zt = [2306.2181, 1.09468, 0.018203];
const θt = [2004.3109, -0.42665, -0.041833];
/**
* PositionEquinox returns rectangular coordinates referenced to an arbitrary epoch.
*
* Position will be computed for given Julian day "jde" but referenced to mean
* equinox "epoch" (year).
*
* @param {planetposition.Planet} earth - VSOP87Planet Earth
* @param {Number} jde - Julian ephemeris day
* @param {Number} epoch
* @return {object} rectangular coordinates
* {Number} x
* {Number} y
* {Number} z
*/
function positionEquinox (earth, jde, epoch) {
const xyz = positionJ2000(earth, jde);
const x0 = xyz.x;
const y0 = xyz.y;
const z0 = xyz.z;
const t = (epoch - 2000) * 0.01;
const ζ = base["default"].horner(t, ζt) * t * Math.PI / 180 / 3600;
const z = base["default"].horner(t, zt) * t * Math.PI / 180 / 3600;
const θ = base["default"].horner(t, θt) * t * Math.PI / 180 / 3600;
const [, ] = base["default"].sincos(ζ);
const [sz, cz] = base["default"].sincos(z);
const [, ] = base["default"].sincos(θ);
const xx = * cz * - * sz;
const xy = * cz + * sz * ;
const xz = * ;
const yx = - * sz - * cz * ;
const yy = * cz - * sz * ;
const yz = - * ;
const zx = -cz * ;
const zy = -sz * ;
const zz = ;
return {
x: xx * x0 + yx * y0 + zx * z0,
y: xy * x0 + yy * y0 + zy * z0,
z: xz * x0 + yz * y0 + zz * z0
}
}
var solarxyz = {
position,
longitudeJ2000,
positionJ2000,
xyz,
positionB1950,
positionEquinox
};
exports["default"] = solarxyz;
exports.longitudeJ2000 = longitudeJ2000;
exports.position = position;
exports.positionB1950 = positionB1950;
exports.positionEquinox = positionEquinox;
exports.positionJ2000 = positionJ2000;
exports.xyz = xyz;