Browse Source

add constructEllipseAE

main
= 5 years ago
parent
commit
fb1f93b825
  1. 10
      src/main.cpp
  2. 19
      src/orbits.cpp
  3. 11
      src/orbits.h
  4. 4
      tests/orbit_test.cpp

10
src/main.cpp

@ -70,10 +70,8 @@ initOrbit()
double a = 26564.5; // kilometers
double e = 0.7411;
double b = a * sqrt(1 - pow(e, 2.0));
orbit.ep = constructEllipse(a, b);
orbit.ep = constructEllipseAE(a, e);
orbit.mu = 398601.68; // NOTE: earth's gravitational parameter in km^3/s^2
return orbit;
}
@ -94,9 +92,7 @@ doFrameCallbackPre(render_state* rs)
rs->running = false;
// update orbital elements/ellipse_3d
// TODO: could really use another ellipse constructor that uses a and e
g_orbit.ep = constructEllipseAB(g_orbit.ep.a,
g_orbit.ep.a * sqrt(1 - pow(g_orbit.ep.e, 2.0)));
g_orbit.ep = constructEllipseAE(g_orbit.ep.a, g_orbit.ep.e);
entity& ellipse_entity = rs->render_groups[0].entities[0];
// TODO: fix this
@ -159,7 +155,7 @@ main()
);
g_orbit = initOrbit();
ellipse_parameters ep = constructEllipse(g_orbit.ep.a, g_orbit.ep.b);
ellipse_parameters ep = constructEllipseAB(g_orbit.ep.a, g_orbit.ep.b);
// TODO: (renderer) this needs to be more convenient
shader_wrapper sw = { SIMPLE_SHADER, nullptr, rs->simple_shader };

19
src/orbits.cpp

@ -3,7 +3,7 @@
ellipse_parameters
constructEllipse(double a, double b)
constructEllipseAB(double a, double b)
{
assert(a > 0 && b > 0 && a >= b);
ellipse_parameters ep = { a, b };
@ -12,7 +12,22 @@ constructEllipse(double a, double b)
ep.p = ep.a * (1 - pow(ep.e, 2));
ep.f1.x = -1 * ep.c;
ep.f2.x = ep.c;
return ep; }
return ep;
}
ellipse_parameters
constructEllipseAE(double a, double e)
{
assert(e >= 0 && e < 1);
double b = a * sqrt(1 - pow(e, 2.0));
return constructEllipseAB(a, b);
}
bool
validateEllipse(ellipse_parameters)
{
return false;
}
ellipse_3d
constructEllipse3D(ellipse_parameters ep, uint vert_count)

11
src/orbits.h

@ -37,13 +37,22 @@ struct ellipse_3d
ellipse_parameters
constructEllipse(double a, double b);
constructEllipseAB(double a, double b);
ellipse_parameters
constructEllipseAE(double a, double e);
bool
validateEllipse(ellipse_parameters);
// NOTE: create vertices for a 3d ellipse
// NOTE: all vertices are in the x/y plane with z = 0
ellipse_3d
constructEllipse3D(ellipse_parameters ep, uint vert_count);
bool
ellipsesEqual(ellipse_parameters e1, ellipse_parameters e2);
/* NOTE: how-to propagate orbit position given initial true anomaly, semimajor
* axis, mean motion, and eccentricity: ref) section 4.4, Kepler's Problem,
* "Space Flight Dynamics" by Craig A. Kluever

4
tests/orbit_test.cpp

@ -20,11 +20,9 @@ TEST_CASE("orbit construction", "[orbits]")
TEST_CASE("orbit propagation", "[orbits]")
{
orbital_elements orbit = {};
// TODO: might want another contructor for ellipse_parameters
double a = 26564.5; // kilometers
double e = 0.7411;
double b = a * sqrt(1 - pow(e, 2.0));
ellipse_parameters ep = constructEllipse(a, b);
ellipse_parameters ep = constructEllipseAE(a, e);
orbit.ep = ep;
double initial_anom = 260 * M_PI / 180; // radians
unsigned int time_step = 60 * 50; // seconds

Loading…
Cancel
Save