1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// SPDX-License-Identifier: AGPL-3.0-or-later
// Copyright (C) 2026 Vallés Puig, Ramon
//! # Body Orientation Primitives
//!
//! Type-level primitives for describing the orientation of rotating
//! Solar-System bodies via the standard IAU pole-and-prime-meridian model.
//!
//! ## Scientific scope
//!
//! The IAU Working Group on Cartographic Coordinates and Rotational Elements
//! recommends representing each body's orientation by the right ascension
//! and declination of its north pole at J2000.0 together with their secular
//! rates, and by the rotation angle `W` of the prime meridian as a function
//! of time. These six numbers define the body-fixed frame relative to the
//! ICRS, which is what is needed to convert between body-fixed and inertial
//! coordinates for planets, satellites and minor bodies.
//!
//! ## Technical scope
//!
//! [`IauRotationParams`] stores the six parameters in [`Degrees`] using the
//! IAU convention that pole rates are per Julian century while `W` evolves
//! per day, both measured from the J2000.0 TDB epoch. Helper methods
//! [`IauRotationParams::alpha0`], [`IauRotationParams::delta0`] and
//! [`IauRotationParams::w`] evaluate the linear models at a given Julian
//! Date. The [`HasIauRotation`] trait lets concrete body types expose their
//! parameters as an associated `const`, keeping the abstraction zero-cost
//! after monomorphisation.
//!
//! ## References
//!
//! * Archinal, B. A. et al., *Report of the IAU WG on Cartographic
//! Coordinates and Rotational Elements*, Celest. Mech. Dyn. Astron.
//! * IAU 2009 / 2015 / 2018 reports on rotational elements
use crateDegrees;
use crateJulianDate;
/// IAU pole and prime meridian rotation parameters for a body.
///
/// These parameters define a body's orientation at J2000.0 and its rates
/// of change. Time *T* is in Julian centuries of 36525 days from J2000.0 TDB,
/// and *d* is in days from J2000.0 TDB.
/// Marker trait for bodies that expose IAU rotation parameters.
///
/// This is intentionally a regular trait with an associated const so it remains
/// zero-cost under monomorphization and stable on Rust.