pg_orrery/src/kepler.h
Ryan Malloy b33d63034b Add v0.9.0 apparent position features: equatorial type, refraction, proper motion, light-time
New equatorial type (24 bytes: RA/Dec/distance) captures apparent coordinates
of date — what the observation pipeline computes at precession step 3 but was
discarding before hour angle conversion. Matches telescope GoTo mount conventions.

24 new SQL functions (82 → 106 total):
- equatorial type I/O + 3 accessors (eq_ra, eq_dec, eq_distance)
- Satellite RA/Dec: eci_to_equatorial (topocentric), eci_to_equatorial_geo (geocentric)
- Solar system equatorial: planet/sun/moon/small_body_equatorial
- Atmospheric refraction: Bennett (1982) with domain clamp at -1 deg
- Refracted pass prediction: predict_passes_refracted (horizon at -0.569 deg)
- Stellar proper motion: star_observe_pm, star_equatorial_pm (Hipparcos/Gaia convention)
- Light-time correction: planet/sun/small_body_observe_apparent, *_equatorial_apparent
- DE equatorial variants: planet_equatorial_de, moon_equatorial_de

Also includes v0.8.0 orbital_elements type (MPC parser, small_body_observe),
GiST 0-based indexing fix, llms.txt updates, and doc improvements.

All 18 regression suites pass. Zero build warnings (GCC + Clang).
2026-02-21 15:31:46 -07:00

25 lines
761 B
C

/*
* kepler.h -- Two-body Keplerian position from classical elements
*
* Exposes kepler_position() for use by orbital_elements_type.c
* and any future code that needs raw Keplerian propagation.
*/
#ifndef PG_ORRERY_KEPLER_H
#define PG_ORRERY_KEPLER_H
/*
* Two-body Keplerian position from classical orbital elements.
*
* q (AU), e, inc/omega/Omega (radians), T_peri (JD), jd (JD).
* Output: pos[3] in AU, ecliptic J2000 frame.
*
* Handles elliptic (e<0.99), near-parabolic (0.99<=e<=1.01),
* and hyperbolic (e>1.01) orbits.
*/
extern void kepler_position(double q, double e, double inc,
double omega, double Omega,
double T_peri, double jd, double pos[3]);
#endif /* PG_ORRERY_KEPLER_H */