Skip to main content

Crate astrodyn_frames

Crate astrodyn_frames 

Source
Expand description

Reference frames, frame tree, and Earth/Mars/Moon rotation models.

Port of JEOD’s models/utils/ref_frames/ (the RefFrame tree that is the backbone of every coordinate system in JEOD) and models/environment/RNP/ (precession, nutation, polar motion). The crate is pure Rust with zero Bevy dependency.

§Frame tree

  • FrameTree, FrameNode, FrameId — an arena-based hierarchy that mirrors JEOD’s RefFrame parent/child links. Each node stores state relative to its parent (translation, velocity, orientation, angular velocity); relative states between arbitrary frames are computed by walking to the common ancestor and composing/negating states. The arena is a flat Vec with parallel Option<FrameId> parent pointers, which keeps lookups cache-friendly and avoids the pointer chasing of JEOD’s intrusive linked lists.
  • RefFrameState, RefFrameStateTyped, RefFrameTrans, RefFrameRot, RefFrameKind — the per-node state structs (re-exported from ref_frame_state). Quaternions are JEOD-convention scalar-first, left-transformation, matching astrodyn_math::JeodQuat.

§Earth / Mars / Moon rotation

JEOD source: models/utils/ref_frames/ and models/environment/RNP/.

§Example

Build a minimal frame tree with one root inertial frame and a planet-fixed child, then look up a frame’s state:

use astrodyn_frames::{FrameTree, RefFrameKind, RefFrameState};

let mut tree = FrameTree::new();
let root = tree.add_root("J2000".to_string(), RefFrameKind::Inertial);
let _ecef = tree.add_child(
    root,
    "ECEF".to_string(),
    RefFrameKind::PlanetFixed,
    RefFrameState::default(),
);

// Both frames live in the arena.
assert_eq!(tree.len(), 2);

Re-exports§

pub use frame_storage::common_ancestor;
pub use frame_storage::compose_to_ancestor;
pub use frame_storage::compute_relative_state;
pub use frame_storage::FrameStorage;
pub use frame_tree::FrameId;
pub use frame_tree::FrameNode;
pub use frame_tree::FrameTree;
pub use orchestration::compute_relative_state_typed;
pub use orchestration::frame_origin;
pub use orchestration::frame_origin_typed;
pub use orchestration::sync_pfix_rotation;
pub use ref_frame_state::*;

Modules§

data_nutation_j2000
IAU 1980 nutation coefficient tables for J2000.
frame_storage
Storage-agnostic frame-tree algorithms (Frame-Tree-ECS-Native § 7).
frame_tree
Arena-based frame tree: a faithful port of JEOD’s RefFrame hierarchy.
nutation_j2000
J2000 Nutation matrix and equation of equinoxes computation.
orchestration
Frame-tree orchestration helpers.
precession_j2000
J2000 Precession matrix computation.
ref_frame_state
Per-node frame state — the untyped storage form used by the crate::FrameTree arena and the typed sibling RefFrameStateTyped<P, C> used at the public API boundary.
rotation_j2000
J2000 GAST rotation and full RNP composition.
rotation_mars
Mars rotation model (IAU Pathfinder orientation).
rotation_moon
Moon rotation model (IAU 2009 simplified).