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).
56 lines
2.0 KiB
C
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 */
|