This guide covers orbital mechanics utilities in Vulcan: state conversions, Kepler solvers, transfer calculations, and Sun/Moon ephemeris—all with full symbolic compatibility.
Quick Start
Vec3< Scalar > sun_position_eci(const Scalar &jd)
Sun position in ECI frame (J2000 equatorial).
Definition AnalyticalEphemeris.hpp:92
Scalar period(const Scalar &a, double mu=constants::earth::mu)
Orbital period.
Definition OrbitalQuantities.hpp:21
std::pair< Scalar, Scalar > hohmann_delta_v(const Scalar &r1, const Scalar &r2, double mu=constants::earth::mu)
Hohmann transfer delta-v.
Definition TransferMechanics.hpp:28
Definition AnalyticalEphemeris.hpp:11
Definition Aerodynamics.hpp:11
Orbital Quantities
Basic two-body orbital computations:
constexpr double R_eq
Equatorial radius [m] (WGS84).
Definition Constants.hpp:16
Scalar escape_velocity(const Scalar &r, double mu=constants::earth::mu)
Escape velocity at given radius.
Definition OrbitalQuantities.hpp:62
Scalar energy(const Scalar &a, double mu=constants::earth::mu)
Specific orbital energy.
Definition OrbitalQuantities.hpp:49
Scalar mean_motion(const Scalar &a, double mu=constants::earth::mu)
Mean motion.
Definition OrbitalQuantities.hpp:88
Scalar velocity(const Scalar &r, const Scalar &a, double mu=constants::earth::mu)
Orbital velocity (vis-viva equation).
Definition OrbitalQuantities.hpp:35
Scalar circular_velocity(const Scalar &r, double mu=constants::earth::mu)
Circular orbit velocity at given radius.
Definition OrbitalQuantities.hpp:75
Anomaly Conversions
Solve Kepler's equation and convert between anomaly types:
double e = 0.5;
double M = 1.0;
Scalar mean_to_true(const Scalar &M, const Scalar &e)
Convert mean anomaly to true anomaly.
Definition AnomalyConversions.hpp:124
Scalar mean_to_eccentric(const Scalar &M, const Scalar &e, double tol=1e-12, int max_iter=50)
Solve Kepler's equation: M = E - e*sin(E).
Definition AnomalyConversions.hpp:25
Scalar true_to_mean(const Scalar &nu, const Scalar &e)
Convert true anomaly to mean anomaly.
Definition AnomalyConversions.hpp:110
Scalar eccentric_to_mean(const Scalar &E, const Scalar &e)
Convert eccentric anomaly to mean anomaly.
Definition AnomalyConversions.hpp:97
Scalar true_to_eccentric(const Scalar &nu, const Scalar &e)
Convert true anomaly to eccentric anomaly.
Definition AnomalyConversions.hpp:78
Scalar eccentric_to_true(const Scalar &E, const Scalar &e)
Convert eccentric anomaly to true anomaly.
Definition AnomalyConversions.hpp:61
State Conversions
Transform between Cartesian and Keplerian elements:
Vec3<double> r, v;
r << 6678.0e3, 0.0, 0.0;
v << 0.0, 7.73e3, 0.0;
std::cout << "Semi-major axis: " << oe.a << " m\n";
std::cout << "Eccentricity: " << oe.e << "\n";
std::cout << "Inclination: " << oe.i * 180/M_PI << "°\n";
OrbitalElements< Scalar > cartesian_to_keplerian(const Vec3< Scalar > &r, const Vec3< Scalar > &v, double mu=constants::earth::mu)
Convert Cartesian state to Keplerian elements.
Definition StateConversions.hpp:28
std::pair< Vec3< Scalar >, Vec3< Scalar > > keplerian_to_cartesian(const OrbitalElements< Scalar > &oe, double mu=constants::earth::mu)
Convert Keplerian elements to Cartesian state.
Definition StateConversions.hpp:98
OrbitalElements Structure
template <typename Scalar>
Scalar a;
Scalar e;
Scalar i;
Scalar Omega;
Scalar omega;
Scalar nu;
};
Classical Keplerian orbital elements.
Definition OrbitalTypes.hpp:20
Transfer Mechanics
Compute Δv for orbital maneuvers:
Hohmann Transfer
double r_leo = 6678.0e3;
double r_geo = 42164.0e3;
std::cout << "Δv₁ = " << dv1/1000 << " km/s\n";
std::cout << "Δv₂ = " << dv2/1000 << " km/s\n";
std::cout << "Transfer time = " << t_transfer/3600 << " hours\n";
Scalar hohmann_total_delta_v(const Scalar &r1, const Scalar &r2, double mu=constants::earth::mu)
Total Hohmann transfer delta-v.
Definition TransferMechanics.hpp:56
Scalar hohmann_transfer_time(const Scalar &r1, const Scalar &r2, double mu=constants::earth::mu)
Hohmann transfer time.
Definition TransferMechanics.hpp:72
Bielliptic Transfer
More efficient than Hohmann for r₂/r₁ > 11.94:
double r_b = 200000.0e3;
double total = dv1 + dv2 + dv3;
std::tuple< Scalar, Scalar, Scalar > bielliptic_delta_v(const Scalar &r1, const Scalar &r2, const Scalar &r_b, double mu=constants::earth::mu)
Bielliptic transfer delta-v.
Definition TransferMechanics.hpp:93
Plane Change
double delta_i = 28.5 * M_PI / 180;
Scalar plane_change_delta_v(const Scalar &v, const Scalar &delta_i)
Simple plane change delta-v.
Definition TransferMechanics.hpp:127
Combined Maneuver
Scalar combined_maneuver_delta_v(const Scalar &v1, const Scalar &v2, const Scalar &delta_i)
Combined plane change and altitude change.
Definition TransferMechanics.hpp:143
Analytical Ephemeris
Sun and Moon positions using Meeus/Vallado algorithms:
double jd = 2451545.0;
double dist_km = janus::norm(r_moon) / 1000;
constexpr double AU
Astronomical Unit [m] - exact IAU 2012 definition.
Definition Constants.hpp:125
Vec3< Scalar > sun_position_ecef(const Scalar &jd)
Sun position in ECEF.
Definition AnalyticalEphemeris.hpp:249
Vec3< Scalar > moon_position_ecef(const Scalar &jd)
Moon position in ECEF.
Definition AnalyticalEphemeris.hpp:277
std::pair< Scalar, Scalar > sun_ra_dec(const Scalar &jd)
Compute Sun's right ascension and declination.
Definition AnalyticalEphemeris.hpp:28
Vec3< Scalar > sun_unit_vector_eci(const Scalar &jd)
Sun unit direction vector in ECI.
Definition AnalyticalEphemeris.hpp:113
Vec3< Scalar > moon_position_eci(const Scalar &jd)
Moon position in ECI (geocentric equatorial).
Definition AnalyticalEphemeris.hpp:141
Scalar sun_distance(const Scalar &jd)
Earth-Sun distance.
Definition AnalyticalEphemeris.hpp:73
Ephemeris Accuracy
| Body | Position Error | Valid Range |
| Sun | ~0.01° (~1 arcmin) | 1950–2050 |
| Moon | ~0.3° (~10 km) | 1950–2050 |
- Note
- For higher precision applications (navigation, conjunction analysis), use JPL DE ephemeris (not yet implemented).
Celestial Body Constants
constexpr double radius
Mean radius [m].
Definition Constants.hpp:142
constexpr double mu
Gravitational parameter (GM) [m³/s²].
Definition Constants.hpp:139
constexpr double mean_distance
Mean Earth-Moon distance [m].
Definition Constants.hpp:145
constexpr double mu
Gravitational parameter (GM) [m³/s²].
Definition Constants.hpp:128
constexpr double radius
Mean radius [m].
Definition Constants.hpp:131
Symbolic Computation
All functions work with janus::SymbolicScalar for optimization:
auto a = janus::sym("a");
auto e = janus::sym("e");
auto M = janus::sym("M");
janus::Function f("kepler", {M, e}, {E});
auto result =
f({1.0, 0.5});
constexpr double f
Flattening (WGS84).
Definition Constants.hpp:25
Symbolic State Conversions
oe.a = janus::sym("a");
oe.e = janus::sym("e");
oe.i = janus::sym("i");
oe.Omega = janus::sym("Omega");
oe.omega = janus::sym("omega");
oe.nu = janus::sym("nu");
API Reference
quantities namespace
| Function | Description |
| period(a, [mu]) | Orbital period [s] |
| velocity(r, a, [mu]) | Vis-viva velocity [m/s] |
| circular_velocity(r, [mu]) | Circular orbit velocity |
| escape_velocity(r, [mu]) | Escape velocity |
| energy(a, [mu]) | Specific orbital energy [J/kg] |
| mean_motion(a, [mu]) | Mean motion [rad/s] |
anomaly namespace
| Function | Description |
| mean_to_eccentric(M, e) | Solve Kepler's equation |
| eccentric_to_true(E, e) | E → ν conversion |
| true_to_eccentric(nu, e) | ν → E conversion |
| eccentric_to_mean(E, e) | E → M conversion |
| mean_to_true(M, e) | M → ν direct |
| true_to_mean(nu, e) | ν → M direct |
elements namespace
| Function | Description |
| cartesian_to_keplerian(r, v, [mu]) | State → Elements |
| keplerian_to_cartesian(oe, [mu]) | Elements → State |
transfer namespace
| Function | Description |
| hohmann_delta_v(r1, r2, [mu]) | Returns (Δv₁, Δv₂) |
| hohmann_total_delta_v(r1, r2, [mu]) | Total Hohmann Δv |
| hohmann_transfer_time(r1, r2, [mu]) | Transfer time [s] |
| bielliptic_delta_v(r1, r2, rb, [mu]) | Returns (Δv₁, Δv₂, Δv₃) |
| plane_change_delta_v(v, delta_i) | Inclination change Δv |
| combined_maneuver_delta_v(v1, v2, delta_i) | Combined Δv |
ephemeris::analytical namespace
| Function | Description |
| sun_position_eci(jd) | Sun position [m] |
| sun_distance(jd) | Earth-Sun distance [m] |
| sun_ra_dec(jd) | Sun RA and Dec [rad] |
| sun_unit_vector_eci(jd) | Unit vector to Sun |
| sun_position_ecef(jd) | Sun in ECEF [m] |
| moon_position_eci(jd) | Moon position [m] |
| moon_distance(jd) | Earth-Moon distance [m] |
| moon_position_ecef(jd) | Moon in ECEF [m] |
Example
See examples/orbital/orbital_demo.cpp and examples/orbital/orbital_optimization.cpp for a comprehensive demonstration:
./scripts/build.sh
./build/examples/orbital_demo