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

19
src/orbits.cpp

@ -3,7 +3,7 @@
ellipse_parameters ellipse_parameters
constructEllipse(double a, double b) constructEllipseAB(double a, double b)
{ {
assert(a > 0 && b > 0 && a >= b); assert(a > 0 && b > 0 && a >= b);
ellipse_parameters ep = { 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.p = ep.a * (1 - pow(ep.e, 2));
ep.f1.x = -1 * ep.c; ep.f1.x = -1 * ep.c;
ep.f2.x = 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 ellipse_3d
constructEllipse3D(ellipse_parameters ep, uint vert_count) constructEllipse3D(ellipse_parameters ep, uint vert_count)

11
src/orbits.h

@ -37,13 +37,22 @@ struct ellipse_3d
ellipse_parameters 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: create vertices for a 3d ellipse
// NOTE: all vertices are in the x/y plane with z = 0 // NOTE: all vertices are in the x/y plane with z = 0
ellipse_3d ellipse_3d
constructEllipse3D(ellipse_parameters ep, uint vert_count); 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 /* NOTE: how-to propagate orbit position given initial true anomaly, semimajor
* axis, mean motion, and eccentricity: ref) section 4.4, Kepler's Problem, * axis, mean motion, and eccentricity: ref) section 4.4, Kepler's Problem,
* "Space Flight Dynamics" by Craig A. Kluever * "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]") TEST_CASE("orbit propagation", "[orbits]")
{ {
orbital_elements orbit = {}; orbital_elements orbit = {};
// TODO: might want another contructor for ellipse_parameters
double a = 26564.5; // kilometers double a = 26564.5; // kilometers
double e = 0.7411; double e = 0.7411;
double b = a * sqrt(1 - pow(e, 2.0)); ellipse_parameters ep = constructEllipseAE(a, e);
ellipse_parameters ep = constructEllipse(a, b);
orbit.ep = ep; orbit.ep = ep;
double initial_anom = 260 * M_PI / 180; // radians double initial_anom = 260 * M_PI / 180; // radians
unsigned int time_step = 60 * 50; // seconds unsigned int time_step = 60 * 50; // seconds

Loading…
Cancel
Save