keplerianOrbit

class KeplerianOrbit
#include <keplerianOrbit.h>

Represent an elliptical orbit with a coherent set of derived outputs.

Position and velocity are computed with orbitalMotion. Constructors and element or gravitational-parameter setters immediately refresh the affected outputs. Use meters, seconds, and radians for inputs and outputs.

Note

The supported domain is a positive semi-major axis, a positive gravitational parameter, and eccentricity in [0, 1). Hyperbolic, parabolic, and rectilinear orbits are outside this class’s scope.

Note

E() and M() follow the f2E() and E2M() angle conventions without additional normalization to [0, 2*pi). Negative and wrapped true anomalies are accepted; these conversions do not preserve a count of completed revolutions.

Public Functions

KeplerianOrbit()

This constructor initialized to an arbitrary orbit

KeplerianOrbit(ClassicElements oe, const double mu)

The constructor requires orbital elements and a gravitational constant value

KeplerianOrbit(const KeplerianOrbit &orig)

The copy constructor works with python copy

~KeplerianOrbit()

Generic Destructor

Eigen::Vector3d r_BP_P() const

body position vector relative to planet

body position vector relative to planet

Eigen::Vector3d v_BP_P() const

body velocity vector relative to planet

body velocity vector relative to planet

Eigen::Vector3d h_BP_P() const

angular momentum of body relative to planet

angular momentum of body relative to planet

double M() const

Mean elliptic anomaly [rad], using E2M().

double n() const

return mean orbit rate

double P() const

return mean orbit rate

return orbit period

double f() const

return orbital period

return true anomaly

double fDot() const

True anomaly rate [rad/s].

return true anomaly

double RAAN() const

return right ascencion of the ascending node

double omega() const

return argument of periapses

double i() const

return inclination angle

double e() const

return eccentricty

double a() const

return semi-major axis

double h() const

return orbital angular momentum magnitude

double Energy()

return orbital energy

double r() const

return orbit radius

double v() const

return velocity magnitude

double r_a() const

return radius at apoapses

double r_p() const

return radius at periapses

double fpa() const

Flight-path angle [rad], negative for inward motion.

double E() const

Eccentric anomaly [rad], using f2E().

double p() const

return semi-latus rectum or the parameter

double rDot() const

Radial velocity [m/s], negative for inward motion.

double c3() const

return escape velocity

ClassicElements oe()

Return the current orbital elements and derived geometry.

Returns:

Elements including the current radius in rmag [m], inverse semi-major axis in alpha [1/m], and apsis radii in rPeriap and rApoap [m].

void set_mu(const double mu)

Set the central body’s gravitational parameter and refresh all derived outputs.

Parameters:

mu – Gravitational parameter [m^3/s^2].

void set_a(double a)

Set the semi-major axis and refresh all derived outputs.

Parameters:

a – Semi-major axis [m].

void set_e(double e)

set eccentricity

void set_i(double i)

set inclination angle

void set_omega(double omega)

set argument of periapsis

void set_RAAN(double RAAN)

set right ascension of the ascending node

void set_f(double f)

set true anomaly angle

Private Functions

void change_orbit()

Recompute the derived state after changing orbital elements or gravity.

void change_f()

Recompute the outputs that depend on the current true anomaly.

Private Members

double mu = MU_EARTH * std::pow(10, 9)
double semi_major_axis = 1E5 * 1000
double eccentricity = 1E-5
double inclination = {}
double argument_of_periapsis = {}
double right_ascension = {}
double true_anomaly = {}
double true_anomaly_rate = {}
double orbital_period = {}
double orbital_energy = {}
double v_infinity = {}
double orbit_radius = {}
double radial_rate = {}
double r_apogee = {}
double r_perigee = {}
double semi_parameter = {}
double flight_path_angle = {}
double eccentric_anomaly = {}
double mean_motion = {}
double mean_anomaly = {}
Eigen::Vector3d orbital_angular_momentum_P
Eigen::Vector3d position_BP_P
Eigen::Vector3d velocity_BP_P