|
|
|
|
@ -18,9 +18,28 @@ const double EARTH_GRAVITATIONAL_PARAMETER = 398601.68; // km^3 / s^2
|
|
|
|
|
const double EARTH_RADIUS = 6378; // km
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TEST_CASE("orbit construction", "[orbits]") |
|
|
|
|
TEST_CASE("orbit determination, example 2.1", "[orbits]") |
|
|
|
|
{ |
|
|
|
|
double r = 2124 + EARTH_RADIUS; // km
|
|
|
|
|
double v = 7.58; // km/s
|
|
|
|
|
double gamma = 20 * M_PI / 180; // flight path angle
|
|
|
|
|
double mu = EARTH_GRAVITATIONAL_PARAMETER; |
|
|
|
|
|
|
|
|
|
double epsilon = orbitGetSpecificEnergyFromStateVectors(r, v, mu); |
|
|
|
|
REQUIRE_THAT(epsilon, WithinAbs(-18.1549, 2e-4)); |
|
|
|
|
|
|
|
|
|
double h = orbitGetAngularMomentumFromStateVectors(r, v, gamma); |
|
|
|
|
REQUIRE_THAT(h, WithinAbs(60558.64, 1e-2)); |
|
|
|
|
|
|
|
|
|
// NOTE: we're off by an order of magnitude here compared to the inputs...
|
|
|
|
|
double a = orbitGetSemiMajorAxis(epsilon, mu); |
|
|
|
|
REQUIRE_THAT(a, WithinAbs(10977.76, 5e-1)); |
|
|
|
|
|
|
|
|
|
double p = orbitGetSemiLatusRectum(h, mu); |
|
|
|
|
REQUIRE_THAT(p, WithinAbs(9200.57, 5e-2)); |
|
|
|
|
|
|
|
|
|
double e = ellipseGetEccentricity(a, p); |
|
|
|
|
REQUIRE_THAT(e, WithinAbs(0.4024, 1e-4)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TEST_CASE("orbit propagation, example 4.6", "[orbits]") |
|
|
|
|
|