/** * astroengine pheno -- phase, elongation, apparent diameter, magnitude, * equation of time, horizontal coordinates, refraction. * * Magnitude models: Mallama & Hilton 2018 for Mercury-Saturn (Saturn with * the ring term), constant-plus-distance for Sun and Pluto, the Mallama * secular ramp for Neptune, Allen's phase law for the Moon (valid to phase * angle ~140 deg; the Moon is invisible near conjunction anyway). * Validated against swe_pheno (Swiss Ephemeris 2.10, Moshier mode). */ import { EngineData } from "./core.js"; import { Engine, BodyId } from "./chart.js"; /** Equatorial diameters, km (IAU values, as used by Swiss Ephemeris). */ export declare const DIAMETER_KM: Record; export interface Pheno { phaseAngle: number; phase: number; elongation: number; diameter: number; magnitude: number; } /** * Photometric and apparent-geometry quantities for a body at an instant: its * phase angle, illuminated fraction, elongation from the Sun, apparent disc * diameter, and apparent visual magnitude. * * @param engine The engine used to evaluate positions. * @param body A body with known physical dimensions (Sun, Moon, the planets). * @param jdUt Julian Day (UT). * @returns A {@link Pheno}: `phaseAngle` (deg), `phase` (lit fraction `0`–`1`), * `elongation` (deg), `diameter` (deg), and `magnitude`. * @throws Error if `body` has no photometric data. * @example * ```ts * pheno(engine, "venus", julianDay(2025, 6, 1)).phase; // illuminated fraction * ``` */ export declare function pheno(engine: Engine, body: BodyId, jdUt: number): Pheno; /** Apparent minus mean solar time, minutes (Meeus ch. 28). */ export declare function equationOfTime(engine: Engine, jdUt: number): number; /** Apparent ecliptic position -> azimuth (deg, from true north, east- * positive) and true altitude (deg). No refraction. */ export declare function azAlt(data: EngineData, lonDeg: number, latDeg: number, jdUt: number, obsLat: number, obsLonEast: number): [number, number]; /** Saemundsson refraction, degrees. Returns the input unchanged when even * the refracted altitude stays below the horizon (matches Swiss * Ephemeris). */ export declare function refractTrueToApparent(altDeg: number, pressure?: number, tempC?: number): number; /** * Relative optical air mass at an apparent altitude (Kasten & Young 1989). * 1.0 at the zenith, ~38 at the horizon; below the horizon the horizon * value is returned (the path length stops growing once the ray grazes). */ export declare function airmass(altAppDeg: number): number; /** * Atmospheric extinction in magnitudes at an apparent altitude: `k` mag per * air mass (default 0.2, a clear-sky visual coefficient; hazy sites run * 0.3+). This is the dimming the horizon note describes -- computed, so a * render pipeline consumes a number instead of re-inventing the physics. */ export declare function extinctionMag(altAppDeg: number, k?: number): number; /** Bennett refraction, degrees. */ export declare function refractApparentToTrue(altDeg: number, pressure?: number, tempC?: number): number;