|
|
|
|
@ -1,6 +1,5 @@
|
|
|
|
|
|
|
|
|
|
#include <catch2/catch.hpp> |
|
|
|
|
|
|
|
|
|
#include <glm/glm.hpp> |
|
|
|
|
|
|
|
|
|
#include "../src/orbits.cpp" |
|
|
|
|
@ -11,18 +10,25 @@
|
|
|
|
|
using Catch::Matchers::WithinAbs; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// NOTE: all examples from the book "Space Flight Dynamics" by Craig A. Kluever
|
|
|
|
|
|
|
|
|
|
const double MOLNIYA_SEMI_MAJOR_AXIS = 26564.5; // km
|
|
|
|
|
const double MOLNIYA_ECCENTRICITY = 0.7411; |
|
|
|
|
const double EARTH_GRAVITATIONAL_PARAMETER = 398601.68; // km^3 / s^2
|
|
|
|
|
const double EARTH_RADIUS = 6378; // km
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TEST_CASE("orbit construction", "[orbits]") |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// NOTE: example 4.6 in "Space Flight Dynamics" by Craig A. Kluever
|
|
|
|
|
TEST_CASE("orbit propagation", "[orbits]") |
|
|
|
|
TEST_CASE("orbit propagation, example 4.6", "[orbits]") |
|
|
|
|
{ |
|
|
|
|
double a = 26564.5; // semi-major axis in km
|
|
|
|
|
double e = 0.7411; // eccentricity
|
|
|
|
|
double mu = 398601.68; // gravitational parameter
|
|
|
|
|
double r = 6378; // body radius in km
|
|
|
|
|
double a = MOLNIYA_SEMI_MAJOR_AXIS; |
|
|
|
|
double e = MOLNIYA_ECCENTRICITY; |
|
|
|
|
double mu = EARTH_GRAVITATIONAL_PARAMETER; |
|
|
|
|
double r = EARTH_RADIUS; |
|
|
|
|
double initial_anom = 260 * M_PI / 180; // NOTE: radians
|
|
|
|
|
double time_step = 60 * 50; // NOTE: seconds
|
|
|
|
|
TwoBodySystem sys = systemInit(gravBodyInit(mu, r), orbitInit(a, e)); |
|
|
|
|
@ -57,23 +63,21 @@ TEST_CASE("orbit propagation", "[orbits]")
|
|
|
|
|
REQUIRE_THAT(pos.y, WithinAbs(8259.9, 0.1)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// NOTE: example 2.5 - c
|
|
|
|
|
TEST_CASE("orbital period", "[orbits]") |
|
|
|
|
TEST_CASE("orbital period, example 2.5c", "[orbits]") |
|
|
|
|
{ |
|
|
|
|
double a = 24371; // semi-major axis in km
|
|
|
|
|
double mu = 398601.68; // gravitational parameter
|
|
|
|
|
double mu = EARTH_GRAVITATIONAL_PARAMETER; |
|
|
|
|
|
|
|
|
|
double T = orbitGetPeriod(a, mu); |
|
|
|
|
REQUIRE_THAT(T, WithinAbs(37863.5, 50e-3)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// NOTE: example 4.1 in "Space Flight Dynamics" by Craig A. Kluever
|
|
|
|
|
TEST_CASE("time of flight example 4.1 a", "[orbits]") |
|
|
|
|
TEST_CASE("time of flight example 4.1a", "[orbits]") |
|
|
|
|
{ |
|
|
|
|
double a = 26564.5; // semi-major axis in km
|
|
|
|
|
double e = 0.7411; // eccentricity
|
|
|
|
|
double mu = 398601.68; // gravitational parameter
|
|
|
|
|
double r = 6378; // body radius in km
|
|
|
|
|
double a = MOLNIYA_SEMI_MAJOR_AXIS; |
|
|
|
|
double e = MOLNIYA_ECCENTRICITY; |
|
|
|
|
double mu = EARTH_GRAVITATIONAL_PARAMETER; |
|
|
|
|
double r = EARTH_RADIUS; |
|
|
|
|
TwoBodySystem sys = systemInit(gravBodyInit(mu, r), orbitInit(a, e)); |
|
|
|
|
|
|
|
|
|
// NOTE: get ToF from periapsis to true anomaly at 154.85 degrees
|
|
|
|
|
@ -95,10 +99,10 @@ TEST_CASE("time of flight example 4.1 a", "[orbits]")
|
|
|
|
|
|
|
|
|
|
TEST_CASE("time of flight example 4.2", "[orbits]") |
|
|
|
|
{ |
|
|
|
|
double a = 26564.5; // semi-major axis in km
|
|
|
|
|
double e = 0.7411; // eccentricity
|
|
|
|
|
double mu = 398601.68; // gravitational parameter
|
|
|
|
|
double r = 6378; // body radius in km
|
|
|
|
|
double a = MOLNIYA_SEMI_MAJOR_AXIS; |
|
|
|
|
double e = MOLNIYA_ECCENTRICITY; |
|
|
|
|
double mu = EARTH_GRAVITATIONAL_PARAMETER; |
|
|
|
|
double r = EARTH_RADIUS; |
|
|
|
|
TwoBodySystem sys = systemInit(gravBodyInit(mu, r), orbitInit(a, e)); |
|
|
|
|
|
|
|
|
|
// NOTE: get ToF from true anom 230 degrees to true anom at 120 degrees
|
|
|
|
|
|