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

164 lines
5.2 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');
var coord = require('./coord.cjs');
var nutation = require('./nutation.cjs');
var planetposition = require('./planetposition.cjs');
/**
* @copyright 2013 Sonia Keys
* @copyright 2016 commenthol
* @license MIT
* @module saturnring
*/
/**
* Ring computes quantities of the ring of Saturn.
*
* B Saturnicentric latitude of the Earth referred to the plane of the ring.
* Bʹ Saturnicentric latitude of the Sun referred to the plane of the ring.
* ΔU Difference between Saturnicentric longitudes of the Sun and the Earth.
* P Geometric position angle of the northern semiminor axis of the ring.
* aEdge Major axis of the out edge of the outer ring.
* bEdge Minor axis of the out edge of the outer ring.
*
* All results in radians.
*/
function ring (jde, earth, saturn) { // (jde float64, earth, saturn *pp.V87Planet) (B, Bʹ, ΔU, P, aEdge, bEdge float64)
const [f1, f2] = cl(jde, earth, saturn);
const [ΔU, B] = f1();
const [Bʹ, P, aEdge, bEdge] = f2();
return [B, Bʹ, ΔU, P, aEdge, bEdge]
}
/**
* UB computes quantities required by illum.Saturn().
*
* Same as ΔU and B returned by Ring(). Results in radians.
*/
function ub (jde, earth, saturn) { // (jde float64, earth, saturn *pp.V87Planet) (ΔU, B float64)
const [f1, f2] = cl(jde, earth, saturn); // eslint-disable-line no-unused-vars
return f1()
}
/**
* cl splits the work into two closures.
*/
function cl (jde, earth, saturn) { // (jde float64, earth, saturn *pp.V87Planet) (f1 func() (ΔU, B float64),
// f2 func() (Bʹ, P, aEdge, bEdge float64))
const p = Math.PI / 180;
let i, Ω;
let l0, b0, R;
let Δ = 9.0;
let λ, β;
let si, ci, , , sB;
let sbʹ, cbʹ, slʹΩ, clʹΩ;
const f1 = function () { // (ΔU, B float64)
// (45.1), p. 318
const T = base["default"].J2000Century(jde);
i = base["default"].horner(T, 28.075216 * p, -0.012998 * p, 0.000004 * p);
Ω = base["default"].horner(T, 169.50847 * p, 1.394681 * p, 0.000412 * p);
// Step 2.0
const earthPos = earth.position(jde);
R = earthPos.range;
const fk5 = planetposition["default"].toFK5(earthPos.lon, earthPos.lat, jde);
l0 = fk5.lon;
b0 = fk5.lat;
const [sl0, cl0] = base["default"].sincos(l0);
const sb0 = Math.sin(b0);
// Steps 3, 4.0
let l = 0;
let b = 0;
let r = 0;
let x = 0;
let y = 0;
let z = 0;
const f = function () {
const τ = base["default"].lightTime(Δ);
const saturnPos = saturn.position(jde - τ);
r = saturnPos.range;
const fk5 = planetposition["default"].toFK5(saturnPos.lon, saturnPos.lat, jde);
l = fk5.lon;
b = fk5.lat;
const [sl, cl] = base["default"].sincos(l);
const [sb, cb] = base["default"].sincos(b);
x = r * cb * cl - R * cl0;
y = r * cb * sl - R * sl0;
z = r * sb - R * sb0;
Δ = Math.sqrt(x * x + y * y + z * z);
};
f();
f();
// Step 5.0
λ = Math.atan2(y, x);
β = Math.atan(z / Math.hypot(x, y));
// First part of step 6.0
si = Math.sin(i);
ci = Math.cos(i);
= Math.sin(β);
= Math.cos(β);
sB = si * * Math.sin(λ - Ω) - ci * ;
const B = Math.asin(sB); // return value
// Step 7.0
const N = 113.6655 * p + 0.8771 * p * T;
const lʹ = l - 0.01759 * p / r;
const bʹ = b - 0.000764 * p * Math.cos(l - N) / r;
// Setup for steps 8, 9.0
sbʹ = Math.sin(bʹ);
cbʹ = Math.cos(bʹ);
slʹΩ = Math.sin(lʹ - Ω);
clʹΩ = Math.cos(lʹ - Ω);
// Step 9.0
const [sλΩ, cλΩ] = base["default"].sincos(λ - Ω);
const U1 = Math.atan2(si * sbʹ + ci * cbʹ * slʹΩ, cbʹ * clʹΩ);
const U2 = Math.atan2(si * + ci * * sλΩ, * cλΩ);
const ΔU = Math.abs(U1 - U2); // return value
return [ΔU, B]
};
const f2 = function () { // (Bʹ, P, aEdge, bEdge) {
// Remainder of step 6.0
const aEdge = 375.35 / 3600 * p / Δ; // return value
const bEdge = aEdge * Math.abs(sB); // return value
// Step 8.0
const sBʹ = si * cbʹ * slʹΩ - ci * sbʹ;
const Bʹ = Math.asin(sBʹ); // return value
// Step 10.0
const [Δψ, Δε] = nutation["default"].nutation(jde);
const ε = nutation["default"].meanObliquity(jde) + Δε;
// Step 11.0
let λ0 = Ω - Math.PI / 2;
const β0 = Math.PI / 2 - i;
// Step 12.0
const [sl0λ, cl0λ] = base["default"].sincos(l0 - λ);
λ += 0.005693 * p * cl0λ / ;
β += 0.005693 * p * sl0λ * ;
// Step 13.0
λ0 += Δψ;
λ += Δψ;
// Step 14.0
let eq = new coord["default"].Ecliptic(λ0, β0).toEquatorial(ε);
const [α0, δ0] = [eq.ra, eq.dec];
eq = new coord["default"].Ecliptic(λ, β).toEquatorial(ε);
const [α, δ] = [eq.ra, eq.dec];
// Step 15.0
const [sδ0, cδ0] = base["default"].sincos(δ0);
const [, ] = base["default"].sincos(δ);
const [sα0α, cα0α] = base["default"].sincos(α0 - α);
const P = Math.atan2(cδ0 * sα0α, sδ0 * - cδ0 * * cα0α); // return value
return [Bʹ, P, aEdge, bEdge]
};
return [f1, f2]
}
var saturnring = {
ring,
ub
};
exports["default"] = saturnring;
exports.ring = ring;
exports.ub = ub;