pg_orrery/src/precession.h
Ryan Malloy 0544a78276 pg_orbit 0.2.0: Full solar system computation at the SQL layer
Phase 1 — Stars, comets, Keplerian propagation:
- star_observe() / star_observe_safe(): fixed star alt/az via IAU 1976
  precession, equatorial-to-horizontal transform
- kepler_propagate(): two-body Keplerian orbit propagation for
  elliptic, parabolic, and hyperbolic orbits
- comet_observe(): observe comets/asteroids from orbital elements
- heliocentric type: ecliptic J2000 position (x, y, z in AU)

Phase 2 — VSOP87 planets, ELP82B Moon, Sun:
- planet_heliocentric(): VSOP87 heliocentric ecliptic J2000 positions
  for Mercury through Neptune (Bretagnon & Francou, MIT)
- planet_observe(): full observation pipeline for any planet
- sun_observe(): Sun position from negated Earth VSOP87
- moon_observe(): ELP2000-82B lunar position (Chapront-Touzé, MIT)
- Clean-room precession (IAU 2006) and sidereal time (IERS 2010)
- elliptic_to_rectangular utility (Stellarium, MIT)

All Stellarium extractions are MIT-licensed, thread-safe (static
caching removed for PARALLEL SAFE), zero external data files.

All 9 regression tests pass (90ms total).
2026-02-16 01:36:27 -07:00

56 lines
2.0 KiB
C

/*
* precession.h -- IAU 2006 precession and simplified nutation
*
* Clean-room implementation from published standards:
* Precession: Capitaine, Wallace & Chapront (2003), A&A 412, 567
* (IAU 2006 polynomial expressions)
* Nutation: Simplified 4-term model from fundamental arguments
* documented in IERS Technical Note 32, Ch. 5.
*
* No PostgreSQL dependencies -- pure math, suitable for standalone use.
*/
#ifndef PG_ORBIT_PRECESSION_H
#define PG_ORBIT_PRECESSION_H
/*
* get_precession_angles_vondrak -- IAU 2006 precession angles
*
* Computes the four fundamental precession quantities at JDE:
* psi_A -- luni-solar precession (arcsec)
* omega_A -- inclination of equator on J2000 ecliptic (arcsec)
* chi_A -- planetary precession (arcsec)
* epsilon_A -- obliquity of the ecliptic (arcsec)
*
* These are the IAU 2006 polynomial expressions valid to ~1 mas
* for several centuries around J2000. The full Vondrak (2011)
* periodic terms are not included here; they extend validity
* to +/-200,000 years but add sub-arcsecond corrections that
* are negligible for our use case.
*
* Output is in arcseconds.
*/
void get_precession_angles_vondrak(double jde,
double *epsilon_A,
double *chi_A,
double *omega_A,
double *psi_A);
/*
* get_nutation_angles_iau2000b -- simplified nutation
*
* Computes nutation in longitude (delta_psi) and nutation in
* obliquity (delta_epsilon) using the dominant 4 lunisolar terms.
*
* This matches the level of nutation correction used in SGP4
* coordinate transforms and is suitable for "what's up?" queries
* where ~1 arcsecond accuracy is sufficient.
*
* Output is in arcseconds.
*/
void get_nutation_angles_iau2000b(double jde,
double *delta_psi,
double *delta_epsilon);
#endif /* PG_ORBIT_PRECESSION_H */