Expand description
§Siderust
Precision astronomy & satellite mechanics in Rust.
siderust is a research-grade astronomy toolkit focused on:
- Strongly-typed coordinates (center + frame + unit encoded in the type system)
- Ephemerides (VSOP87/ELP2000 always available; optional JPL DE4xx backends)
- Observation planning utilities (altitude periods, crossings, culminations)
- Time handling (via the
tempochcrate, re-exported astime)
§Features
- Coordinates:
cartesian::{Position, Direction, Velocity, ...}andspherical::{Position, Direction}parameterized byCenter,Frame, andUnit. - Transforms: frame rotations + center shifts with compile-time guarantees.
- Altitude API:
AltitudePeriodsProvider+ free functions to compute crossings, culminations, altitude ranges, and above/below-threshold windows. - Ephemeris backends:
Ephemeristrait with VSOP87/ELP2000 and optional DE440/DE441. - Serde: optional
serdefeature for public types.
§Crate Modules
coordinates: Cartesian & Spherical coordinate types and transformations between reference centers & framestargets:CoordinateWithPM<T>+Trackabletrait for targetstime: Time types and scale-basedPeriod<S>/ genericInterval<T>astro: Utilities for aberration, nutation, precession, sidereal time, and event searchescalculus: Numerical kernels (VSOP87, ELP2000, Pluto, DE4xx, altitude API, root-finding)bodies: Planets, stars, satellites, asteroids, comets, and built-in catalogsobservatories: Predefined observatory locations (Roque, Paranal, Mauna Kea, La Silla)
§Minimal Example
use siderust::{
bodies::Mars,
time::JulianDate,
};
use chrono::prelude::*;
// 1. Select an epoch (UTC now to JD)
let jd = JulianDate::from_utc(Utc::now());
// 2. Compute barycentric ecliptic coordinates via VSOP87
let mars = Mars::vsop87e(jd);
// 3. Print Mars's barycentric ecliptic position (AstronomicalUnits)
println!("{:?}", mars);For a runnable tour of the library, see the examples/ directory.
Re-exports§
pub use calculus::azimuth::azimuth_crossings;pub use calculus::azimuth::azimuth_extrema;pub use calculus::azimuth::azimuth_periods as compute_azimuth_periods;pub use calculus::azimuth::azimuth_ranges;pub use calculus::azimuth::in_azimuth_range;pub use calculus::azimuth::outside_azimuth_range;pub use calculus::azimuth::AzimuthCrossingDirection;pub use calculus::azimuth::AzimuthCrossingEvent;pub use calculus::azimuth::AzimuthExtremum;pub use calculus::azimuth::AzimuthExtremumKind;pub use calculus::azimuth::AzimuthProvider;pub use calculus::azimuth::AzimuthQuery;pub use calculus::altitude::above_threshold;pub use calculus::altitude::altitude_periods as compute_altitude_periods;pub use calculus::altitude::altitude_ranges;pub use calculus::altitude::below_threshold;pub use calculus::altitude::crossings;pub use calculus::altitude::culminations;pub use calculus::altitude::AltitudePeriodsProvider;pub use calculus::altitude::AltitudeQuery;pub use calculus::altitude::CrossingDirection;pub use calculus::altitude::CrossingEvent;pub use calculus::altitude::CulminationEvent;pub use calculus::altitude::CulminationKind;pub use calculus::altitude::SearchOpts;pub use calculus::lunar::phase::find_phase_events;pub use calculus::lunar::phase::illumination_above;pub use calculus::lunar::phase::illumination_below;pub use calculus::lunar::phase::illumination_range;pub use calculus::lunar::phase::moon_phase_geocentric;pub use calculus::lunar::phase::moon_phase_topocentric;pub use calculus::lunar::phase::MoonPhaseGeometry;pub use calculus::lunar::phase::MoonPhaseLabel;pub use calculus::lunar::phase::MoonPhaseSeries;pub use calculus::lunar::phase::PhaseEvent;pub use calculus::lunar::phase::PhaseKind;pub use calculus::lunar::phase::PhaseSearchOpts;pub use calculus::lunar::phase::PhaseThresholds;pub use targets::CoordinateWithPM;pub use targets::Trackable;pub use tempoch as time;
Modules§
- astro
- Astro Module
- bodies
- Astronomical Bodies
- calculus
- Celestial Mechanics Calculus Module
- coordinates
- Coordinates Module
- data
- Runtime Data Management
- observatories
- Observatory Catalog Module
- targets
- Astronomical target representation