Skip to content

Orbit Properties

There a varietry of useful properties of orbits that can be used to understand the characteristics of an orbit, such as its period, velocity, and more. Brahe provides a convenient way to compute these properties from the orbital elements.

Orbital Period

import brahe as bh
import numpy as np

# Initialize EOP
bh.initialize_eop()

# Initialize a Keplerian state
# Define orbital elements [a, e, i, Ω, ω, M] in meters and degrees
# LEO satellite: 500 km altitude, 97.8° inclination (approx sun-synchronous)
oe_deg = np.array(
    [
        bh.R_EARTH + 500e3,  # Semi-major axis (m)
        0.01,  # Eccentricity
        97.8,  # Inclination (deg)
        15.0,  # Right ascension of ascending node (deg)
        30.0,  # Argument of periapsis (deg)
        45.0,  # Mean anomaly (deg)
    ]
)

# Calculate Orbital period
period = bh.orbital_period(oe_deg[0])
print(f"Orbital period: {period/60:.3f} minutes")
use brahe as bh;
use nalgebra as na;

fn main() {
    // Initialize EOP
    bh::initialize_eop().unwrap();

    // Initialize a Keplerian state
    // Define orbital elements [a, e, i, Ω, ω, M] in meters and degrees
    // LEO satellite: 500 km altitude, 97.8° inclination (approx sun-synchronous)
    let oe_deg = na::vector![
        bh::R_EARTH + 500e3,  // Semi-major axis (m)
        0.01,                  // Eccentricity
        97.8,                  // Inclination (deg)
        15.0,                  // Right ascension of ascending node (deg)
        30.0,                  // Argument of periapsis (deg)
        45.0,                  // Mean anomaly (deg)
    ];

    // Orbital period
    let period = bh::orbital_period(oe_deg[0]);
    println!("Orbital period: {:.3} minutes", period/60.0);
}
Output
Orbital period: 94.616 minutes
Orbital period: 94.616 minutes

Apogee and Perigee Velocity

import brahe as bh
import numpy as np

# Initialize EOP
bh.initialize_eop()

# Initialize a Keplerian state
# Define orbital elements [a, e, i, Ω, ω, M] in meters and degrees
# LEO satellite: 500 km altitude, 97.8° inclination (approx sun-synchronous)
oe_deg = np.array(
    [
        bh.R_EARTH + 500e3,  # Semi-major axis (m)
        0.01,  # Eccentricity
        97.8,  # Inclination (deg)
        15.0,  # Right ascension of ascending node (deg)
        30.0,  # Argument of periapsis (deg)
        45.0,  # Mean anomaly (deg)
    ]
)

# Calculate perigee velocity
v_perigee = bh.perigee_velocity(oe_deg[0], oe_deg[1])
print(f"Perigee velocity: {v_perigee:.3f} m/s")

# Calculate apogee velocity
v_apogee = bh.apogee_velocity(oe_deg[0], oe_deg[1])
print(f"Apogee velocity: {v_apogee:.3f} m/s")
use brahe as bh;
use nalgebra as na;

fn main() {
    // Initialize EOP
    bh::initialize_eop().unwrap();

    // Initialize a Keplerian state
    // Define orbital elements [a, e, i, Ω, ω, M] in meters and degrees
    // LEO satellite: 500 km altitude, 97.8° inclination (approx sun-synchronous)
    let oe_deg = na::vector![
        bh::R_EARTH + 500e3,  // Semi-major axis (m)
        0.01,                  // Eccentricity
        97.8,                  // Inclination (deg)
        15.0,                  // Right ascension of ascending node (deg)
        30.0,                  // Argument of periapsis (deg)
        45.0,                  // Mean anomaly (deg)
    ];

    // Calculate perigee velocity
    let v_perigee = bh::perigee_velocity(oe_deg[0], oe_deg[1]);
    println!("Perigee velocity: {:.3} m/s", v_perigee);

    // Calculate apogee velocity
    let v_apogee = bh::apogee_velocity(oe_deg[0], oe_deg[1]);
    println!("Apogee velocity: {:.3} m/s", v_apogee);

}
Output
Perigee velocity: 7689.119 m/s
Apogee velocity: 7536.859 m/s
Perigee velocity: 7689.119 m/s
Apogee velocity: 7536.859 m/s

Sun-Synchronous Inclination

1
2
3
4
5
6
7
8
9
import brahe as bh

# Define semi-major axis and eccentricity
a = bh.R_EARTH + 500e3  # Semi-major axis (m)
e = 0.01                # Eccentricity

# Compute sun-synchronous inclination
i_ssi = bh.sun_synchronous_inclination(a, e, angle_format=bh.AngleFormat.DEGREES)
print(f"Sun-synchronous inclination: {i_ssi:.3f} degrees")
use brahe as bh;

fn main() {
    // Initialize EOP
    bh::initialize_eop().unwrap();

    // Define semi-major axis and eccentricity
    let a = bh::R_EARTH + 500.0e3;   // Semi-major axis (m)
    let e = 0.01;                   // Eccentricity

    // Compute sun-synchronous inclination
    let i_ssi = bh::sun_synchronous_inclination(a, e, bh::AngleFormat::Degrees);
    println!("Sun-synchronous inclination: {:.3} degrees", i_ssi);
}
Output
Sun-synchronous inclination: 97.400 degrees
Sun-synchronous inclination: 97.400 degrees