/** * precession.ts — IAU 2006 precession and mean obliquity. * * The previous implementation approximated precession by *adding* the scalar * general-precession-in-longitude ψ_A to a J2000 ecliptic longitude. That is * not the transformation: the ecliptic pole itself moves, so the mapping is a * rotation, not a translation, and the scalar shortcut leaves a latitude- * dependent error that grows with distance from J2000. * * Here the transformation is done properly: * ICRF equatorial --P(t)--> mean equator & equinox of date --R1(ε_A)--> * mean ecliptic & equinox of date * * Angles: Capitaine et al. (2003), adopted as IAU 2006. The constant terms in * ζ_A and z_A carry the ICRS→J2000 frame-bias rotation in right ascension; the * two residual bias components (ξ₀, η₀ ≈ 17 mas) are neglected, which is two * orders of magnitude below this engine's 1″ target. */ export type Vec = [number, number, number]; export type Mat = [Vec, Vec, Vec]; /** Julian centuries (TT) from J2000.0. */ export declare function julianCenturies(jd: number): number; /** * Mean obliquity of the ecliptic (degrees), IAU 2006. * * ε_A = 84381.406″ − 46.836769″T − 0.0001831″T² + 0.00200340″T³ * − 0.000000576″T⁴ − 0.0000000434″T⁵ */ export declare function meanObliquity(T: number): number; /** * Precession matrix P such that v_meanEquatorOfDate = P · v_ICRF. * * P = R3(−z_A) · R2(θ_A) · R3(−ζ_A) */ export declare function precessionMatrix(T: number): Mat; export declare function matVec(m: Mat, v: Vec): Vec; /** Apply the transpose of `m` — for a rotation matrix this is the inverse. */ export declare function matTransposeVec(m: Mat, v: Vec): Vec; /** Rotate about the x-axis by `angleDeg` (equatorial → ecliptic uses +ε). */ export declare function rotateX(v: Vec, angleDeg: number): Vec; /** Cartesian → spherical. Returns longitude/latitude in degrees, radius in input units. */ export declare function toSpherical(v: Vec): { lon: number; lat: number; r: number; }; /** * Transform an ICRF equatorial vector to the **mean** ecliptic and equinox of * date — the frame in which sidereal longitudes and ayanamsa are defined. */ export declare function icrfToMeanEclipticOfDate(v: Vec, T: number): Vec; /** * Inverse of {@link icrfToMeanEclipticOfDate}: mean ecliptic of date → ICRF. */ export declare function meanEclipticOfDateToIcrf(v: Vec, T: number): Vec;