Struct CompactOrbit

Source
pub struct CompactOrbit {
    pub eccentricity: f64,
    pub periapsis: f64,
    pub inclination: f64,
    pub arg_pe: f64,
    pub long_asc_node: f64,
    pub mean_anomaly: f64,
    pub mu: f64,
}
Expand description

A minimal struct representing a Keplerian orbit.

This struct minimizes memory footprint by not caching variables.
Because of this, calculations can be slower than caching those variables.
For this reason, you might consider using the Orbit struct instead.

§Example

use keplerian_sim::{CompactOrbit, OrbitTrait};

let orbit = CompactOrbit::new(
    // Initialize using eccentricity, periapsis, inclination,
    // argument of periapsis, longitude of ascending node,
    // and mean anomaly at epoch

    // Eccentricity
    0.0,

    // Periapsis
    1.0,

    // Inclination
    0.0,

    // Argument of periapsis
    0.0,

    // Longitude of ascending node
    0.0,

    // Mean anomaly at epoch
    0.0,

    // Gravitational parameter of the parent body
    1.0,
);

let orbit = CompactOrbit::with_apoapsis(
    // Initialize using apoapsis in place of eccentricity
     
    // Apoapsis
    2.0,

    // Periapsis
    1.0,

    // Inclination
    0.0,

    // Argument of periapsis
    0.0,

    // Longitude of ascending node
    0.0,

    // Mean anomaly at epoch
    0.0,

    // Gravitational parameter of the parent body
    1.0,
);

See Orbit::new and Orbit::with_apoapsis for more information.

Fields§

§eccentricity: f64

The eccentricity of the orbit.
e < 1: ellipse
e = 1: parabola
e > 1: hyperbola

See more: https://en.wikipedia.org/wiki/Orbital_eccentricity

§periapsis: f64

The periapsis of the orbit, in meters.

The periapsis of an orbit is the distance at the closest point to the parent body.

More simply, this is the “minimum altitude” of an orbit.

§inclination: f64

The inclination of the orbit, in radians. The inclination of an orbit is the angle between the plane of the orbit and the reference plane.

In simple terms, it tells you how “tilted” the orbit is.

§arg_pe: f64

The argument of periapsis of the orbit, in radians.

Wikipedia:
The argument of periapsis is the angle from the body’s ascending node to its periapsis, measured in the direction of motion.
https://en.wikipedia.org/wiki/Argument_of_periapsis

In simple terms, it tells you how, and in which direction, the orbit “tilts”.

§long_asc_node: f64

The longitude of ascending node of the orbit, in radians.

Wikipedia:
The longitude of ascending node is the angle from a specified reference direction, called the origin of longitude, to the direction of the ascending node, as measured in a specified reference plane.
https://en.wikipedia.org/wiki/Longitude_of_the_ascending_node

In simple terms, it tells you how, and in which direction, the orbit “tilts”.

§mean_anomaly: f64

The mean anomaly at orbit epoch, in radians.

For elliptic orbits, it’s measured in radians and so are bounded between 0 and tau; anything out of range will get wrapped around.
For hyperbolic orbits, it’s unbounded.

Wikipedia:
The mean anomaly at epoch, M_0, is defined as the instantaneous mean anomaly at a given epoch, t_0.
https://en.wikipedia.org/wiki/Mean_anomaly#Mean_anomaly_at_epoch

In simple terms, this modifies the “offset” of the orbit progression.

§mu: f64

The gravitational parameter of the parent body.

This is a constant value that represents the mass of the parent body multiplied by the gravitational constant.

In other words, mu = GM.

Implementations§

Source§

impl CompactOrbit

Source

pub fn new( eccentricity: f64, periapsis: f64, inclination: f64, arg_pe: f64, long_asc_node: f64, mean_anomaly: f64, mu: f64, ) -> CompactOrbit

Creates a new CompactOrbit instance with the given parameters.

Note: This function uses eccentricity instead of apoapsis.
If you want to provide an apoapsis instead, consider using the CompactOrbit::with_apoapsis function instead.

§Parameters
  • eccentricity: The eccentricity of the orbit.
  • periapsis: The periapsis of the orbit, in meters.
  • inclination: The inclination of the orbit, in radians.
  • arg_pe: The argument of periapsis of the orbit, in radians.
  • long_asc_node: The longitude of ascending node of the orbit, in radians.
  • mean_anomaly: The mean anomaly of the orbit at epoch, in radians.
  • mu: The gravitational parameter of the parent body, in m^3 s^-2.
Source

pub fn with_apoapsis( apoapsis: f64, periapsis: f64, inclination: f64, arg_pe: f64, long_asc_node: f64, mean_anomaly: f64, mu: f64, ) -> CompactOrbit

Creates a new CompactOrbit instance with the given parameters.

Note: This function uses apoapsis instead of eccentricity.
Because of this, it’s not recommended to initialize parabolic or hyperbolic ‘orbits’ with this function.
If you’re looking to initialize a parabolic or hyperbolic trajectory, consider using the CompactOrbit::new function instead.

§Parameters
  • apoapsis: The apoapsis of the orbit, in meters.
  • periapsis: The periapsis of the orbit, in meters.
  • inclination: The inclination of the orbit, in radians.
  • arg_pe: The argument of periapsis of the orbit, in radians.
  • long_asc_node: The longitude of ascending node of the orbit, in radians.
  • mean_anomaly: The mean anomaly of the orbit, in radians.
  • mu: The gravitational parameter of the parent body, in m^3 s^-2.

Trait Implementations§

Source§

impl Clone for CompactOrbit

Source§

fn clone(&self) -> CompactOrbit

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CompactOrbit

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CompactOrbit

Source§

fn default() -> Self

Creates a unit orbit.

The unit orbit is a perfect circle of radius 1 and no “tilt”.

It also uses a gravitational parameter of 1.

Source§

impl From<CompactOrbit> for Orbit

Source§

fn from(compact: CompactOrbit) -> Self

Converts to this type from the input type.
Source§

impl From<Orbit> for CompactOrbit

Source§

fn from(cached: Orbit) -> Self

Converts to this type from the input type.
Source§

impl OrbitTrait for CompactOrbit

Source§

fn get_semi_major_axis(&self) -> f64

Gets the semi-major axis of the orbit. Read more
Source§

fn get_semi_minor_axis(&self) -> f64

Gets the semi-minor axis of the orbit. Read more
Source§

fn get_linear_eccentricity(&self) -> f64

Gets the linear eccentricity of the orbit, in meters. Read more
Source§

fn set_apoapsis(&mut self, apoapsis: f64) -> Result<(), ApoapsisSetterError>

Sets the apoapsis of the orbit.
Errors when the apoapsis is less than the periapsis, or less than zero.
If you want a setter that does not error, use set_apoapsis_force, which will try its best to interpret what you might have meant, but may have undesirable behavior. Read more
Source§

fn set_apoapsis_force(&mut self, apoapsis: f64)

Sets the apoapsis of the orbit, with a best-effort attempt at interpreting possibly-invalid values.
This function will not error, but may have undesirable behavior: Read more
Source§

fn get_transformation_matrix(&self) -> Matrix3x2

Gets the transformation matrix needed to tilt a 2D vector into the tilted orbital plane. Read more
Source§

fn get_eccentricity(&self) -> f64

Gets the eccentricity of the orbit. Read more
Source§

fn get_periapsis(&self) -> f64

Gets the periapsis of the orbit. Read more
Source§

fn get_inclination(&self) -> f64

Gets the inclination of the orbit in radians. Read more
Source§

fn get_arg_pe(&self) -> f64

Gets the argument of periapsis of the orbit in radians. Read more
Source§

fn get_long_asc_node(&self) -> f64

Gets the longitude of ascending node of the orbit in radians. Read more
Source§

fn get_mean_anomaly_at_epoch(&self) -> f64

Gets the mean anomaly of the orbit at a certain epoch. Read more
Source§

fn get_gravitational_parameter(&self) -> f64

Gets the gravitational parameter of the parent body. Read more
Source§

fn set_eccentricity(&mut self, value: f64)

Sets the eccentricity of the orbit. Read more
Source§

fn set_periapsis(&mut self, value: f64)

Sets the periapsis of the orbit. Read more
Source§

fn set_inclination(&mut self, value: f64)

Sets the inclination of the orbit in radians. Read more
Source§

fn set_arg_pe(&mut self, value: f64)

Sets the argument of periapsis of the orbit in radians. Read more
Source§

fn set_long_asc_node(&mut self, value: f64)

Sets the longitude of ascending node of the orbit in radians. Read more
Source§

fn set_mean_anomaly_at_epoch(&mut self, value: f64)

Sets the mean anomaly of the orbit at a certain epoch. Read more
Source§

fn set_gravitational_parameter( &mut self, gravitational_parameter: f64, mode: MuSetterMode, )

Sets the gravitational parameter of the parent body. Read more
Source§

fn get_semi_latus_rectum(&self) -> f64

Gets the semi-latus rectum of the orbit. Read more
Source§

fn get_apoapsis(&self) -> f64

Gets the apoapsis of the orbit.
Returns infinity for parabolic orbits.
Returns negative values for hyperbolic orbits. Read more
Source§

fn get_eccentric_anomaly_at_mean_anomaly(&self, mean_anomaly: f64) -> f64

Gets the eccentric anomaly at a given mean anomaly in the orbit. Read more
Source§

fn get_approx_hyperbolic_eccentric_anomaly(&self, mean_anomaly: f64) -> f64

Get an initial guess for the hyperbolic eccentric anomaly of an orbit. Read more
Source§

fn get_hyperbolic_eccentric_anomaly(&self, mean_anomaly: f64) -> f64

Gets the hyperbolic eccentric anomaly of the orbit. Read more
Source§

fn get_elliptic_eccentric_anomaly(&self, mean_anomaly: f64) -> f64

Gets the elliptic eccentric anomaly of the orbit. Read more
Source§

fn get_eccentric_anomaly_at_true_anomaly(&self, true_anomaly: f64) -> f64

Gets the eccentric anomaly at a given true anomaly in the orbit. Read more
Source§

fn get_eccentric_anomaly_at_time(&self, time: f64) -> f64

Gets the eccentric anomaly at a given time in the orbit. Read more
Source§

fn get_true_anomaly_at_eccentric_anomaly(&self, eccentric_anomaly: f64) -> f64

Gets the true anomaly at a given eccentric anomaly in the orbit. Read more
Source§

fn get_true_anomaly_at_mean_anomaly(&self, mean_anomaly: f64) -> f64

Gets the true anomaly at a given mean anomaly in the orbit. Read more
Source§

fn get_true_anomaly_at_time(&self, time: f64) -> f64

Gets the true anomaly at a given time in the orbit. Read more
Source§

fn get_mean_anomaly_at_time(&self, time: f64) -> f64

Gets the mean anomaly at a given time in the orbit. Read more
Source§

fn get_mean_anomaly_at_eccentric_anomaly(&self, eccentric_anomaly: f64) -> f64

Gets the mean anomaly at a given eccentric anomaly in the orbit. Read more
Source§

fn get_mean_anomaly_at_elliptic_eccentric_anomaly( &self, eccentric_anomaly: f64, sin_eccentric_anomaly: f64, ) -> f64

Gets the mean anomaly at a given eccentric anomaly in the orbit and its precomputed sine. Read more
Source§

fn get_mean_anomaly_at_hyperbolic_eccentric_anomaly( &self, eccentric_anomaly: f64, sinh_eccentric_anomaly: f64, ) -> f64

Gets the mean anomaly at a given eccentric anomaly in the orbit and its precomputed sine. Read more
Source§

fn get_mean_anomaly_at_true_anomaly(&self, true_anomaly: f64) -> f64

Gets the mean anomaly at a given true anomaly in the orbit. Read more
Source§

fn get_position_at_true_anomaly(&self, angle: f64) -> DVec3

Gets the 3D position at a given angle (true anomaly) in the orbit. Read more
Source§

fn get_position_at_eccentric_anomaly(&self, eccentric_anomaly: f64) -> DVec3

Gets the 3D position at a given eccentric anomaly in the orbit. Read more
Source§

fn get_speed_at_true_anomaly(&self, angle: f64) -> f64

Gets the speed at a given angle (true anomaly) in the orbit. Read more
Source§

fn get_speed_at_altitude(&self, altitude: f64) -> f64

Gets the speed at a given altitude in the orbit. Read more
Source§

fn get_speed_at_time(&self, time: f64) -> f64

Gets the speed at a given time in the orbit. Read more
Source§

fn get_speed_at_eccentric_anomaly(&self, eccentric_anomaly: f64) -> f64

Gets the speed at a given eccentric anomaly in the orbit. Read more
Source§

fn get_pqw_velocity_at_true_anomaly(&self, angle: f64) -> DVec2

Gets the velocity at a given angle (true anomaly) in the orbit in the perifocal coordinate system. Read more
Source§

fn get_pqw_velocity_at_eccentric_anomaly(&self, eccentric_anomaly: f64) -> DVec2

Gets the velocity at a given eccentric anomaly in the orbit in the perifocal coordinate system. Read more
Source§

fn get_pqw_velocity_at_eccentric_anomaly_unchecked( &self, outer_mult: f64, q_mult: f64, trig_ecc_anom: (f64, f64), ) -> DVec2

Gets the velocity at a given eccentric anomaly in the orbit in the perifocal coordinate system. Read more
Source§

fn get_pqw_velocity_at_time(&self, time: f64) -> DVec2

Gets the velocity at a given time in the orbit in the perifocal coordinate system. Read more
Source§

fn get_pqw_position_at_true_anomaly(&self, angle: f64) -> DVec2

Gets the position at a given angle (true anomaly) in the orbit in the perifocal coordinate system. Read more
Source§

fn get_pqw_position_at_true_anomaly_unchecked( &self, altitude: f64, sincos_angle: (f64, f64), ) -> DVec2

Gets the position at a certain point in the orbit in the perifocal coordinate system. Read more
Source§

fn get_pqw_position_at_time(&self, time: f64) -> DVec2

Gets the position at a given time in the orbit in the perifocal coordinate system. Read more
Source§

fn get_pqw_position_at_eccentric_anomaly(&self, eccentric_anomaly: f64) -> DVec2

Gets the position at a given eccentric anomaly in the orbit in the perifocal coordinate system. Read more
Source§

fn get_velocity_at_true_anomaly(&self, angle: f64) -> DVec3

Gets the velocity at a given angle (true anomaly) in the orbit. Read more
Source§

fn get_velocity_at_eccentric_anomaly(&self, eccentric_anomaly: f64) -> DVec3

Gets the velocity at a given eccentric anomaly in the orbit. Read more
Source§

fn get_velocity_at_time(&self, time: f64) -> DVec3

Gets the velocity at a given time in the orbit. Read more
Source§

fn get_altitude_at_true_anomaly(&self, true_anomaly: f64) -> f64

Gets the altitude of the body from its parent at a given angle (true anomaly) in the orbit. Read more
Source§

fn get_altitude_at_true_anomaly_unchecked( &self, semi_latus_rectum: f64, cos_true_anomaly: f64, ) -> f64

Gets the altitude of the body from its parent given the cosine of the true anomaly. Read more
Source§

fn get_altitude_at_eccentric_anomaly(&self, eccentric_anomaly: f64) -> f64

Gets the altitude at a given eccentric anomaly in the orbit. Read more
Source§

fn get_altitude_at_time(&self, time: f64) -> f64

Gets the altitude of the body from its parent at a given time in the orbit. Read more
Source§

fn get_position_at_time(&self, time: f64) -> DVec3

Gets the 3D position at a given time in the orbit. Read more
Source§

fn get_state_vectors_at_eccentric_anomaly( &self, eccentric_anomaly: f64, ) -> StateVectors

Gets the 3D position and velocity at a given eccentric anomaly in the orbit. Read more
Source§

fn get_state_vectors_at_true_anomaly(&self, true_anomaly: f64) -> StateVectors

Gets the 3D position and velocity at a given angle (true anomaly) in the orbit. Read more
Source§

fn get_state_vectors_at_mean_anomaly(&self, mean_anomaly: f64) -> StateVectors

Gets the 3D position and velocity at a given mean anomaly in the orbit. Read more
Source§

fn get_state_vectors_at_time(&self, time: f64) -> StateVectors

Gets the 3D position and velocity at a given time in the orbit. Read more
Source§

fn get_state_vectors_from_unchecked_parts( &self, sqrt_abs_gm_a: f64, altitude: f64, q_mult: f64, trig_ecc_anom: (f64, f64), sincos_angle: (f64, f64), ) -> StateVectors

Gets the 3D position and velocity at a certain point in the orbit. Read more
Source§

fn transform_pqw_vector(&self, position: DVec2) -> DVec3

Transforms a position from the perifocal coordinate (PQW) system into 3D, using the orbital parameters. Read more
Source§

fn get_approx_hyp_ecc_anomaly(&self, mean_anomaly: f64) -> f64

Get an initial guess for the hyperbolic eccentric anomaly of an orbit. Read more
Source§

fn get_orbital_period(&self) -> f64

Gets the time it takes to complete one revolution of the orbit. Read more
Source§

impl PartialEq for CompactOrbit

Source§

fn eq(&self, other: &CompactOrbit) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for CompactOrbit

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.