From 4be3569771cede3103ae14170197016347882838 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Sat, 14 May 2022 10:32:23 -0400 Subject: [PATCH] update struct names to consistant PascalCase style --- src/gooey.cpp | 22 +++++++++---------- src/gooey.h | 2 +- src/main.cpp | 13 ++++++------ src/orbits.cpp | 40 +++++++++++++++++------------------ src/orbits.h | 50 ++++++++++++++++++++++---------------------- tests/orbit_test.cpp | 6 +++--- 6 files changed, 66 insertions(+), 67 deletions(-) diff --git a/src/gooey.cpp b/src/gooey.cpp index 3051ad1..4d9b9e6 100644 --- a/src/gooey.cpp +++ b/src/gooey.cpp @@ -42,18 +42,18 @@ gooProcessEvent(SDL_Event& e) } void drawSimulationWindow(bool& running, u64 sim_time_ms, float& sim_speed); -void drawEllipseParameters(ellipse_parameters& ep); -void drawGravitaationalBody(grav_body& body); -void drawOrbitalElements(orbital_elements& el); -void drawSatelliteWindow(satellite& sat); -void drawSystemWindow(system_2body& sys); +void drawEllipseParameters(EllipseParameters& ep); +void drawGravitaationalBody(GravBody& body); +void drawOrbitalElements(OrbitalElements& el); +void drawSatelliteWindow(Satellite& sat); +void drawSystemWindow(TwoBodySystem& sys); const static int G_WIDTH = 300; const static ImVec2 V_SPACER(0, 10); const int H_FLAGS = ImGuiTreeNodeFlags_DefaultOpen; void -gooDraw(SDL_Window* window, system_2body& sys, +gooDraw(SDL_Window* window, TwoBodySystem& sys, bool& running, u64 sim_time_ms, float& sim_speed) { ImGui_ImplOpenGL3_NewFrame(); @@ -93,7 +93,7 @@ void drawSimulationWindow(bool& running, u64 sim_time_ms, float& sim_speed) } } -void drawEllipseParameters(ellipse_parameters& ep) +void drawEllipseParameters(EllipseParameters& ep) { if (ImGui::CollapsingHeader("Ellipse Parameters:", H_FLAGS)) { ImGui::Text("semi_major axis, a: %f km", ep.a); @@ -105,7 +105,7 @@ void drawEllipseParameters(ellipse_parameters& ep) } } -void drawGravitaationalBody(grav_body& body) +void drawGravitaationalBody(GravBody& body) { if (ImGui::CollapsingHeader("Gravitational Body:", H_FLAGS)) { ImGui::Text("mu, gravitational parameter: %f", body.mu); @@ -114,7 +114,7 @@ void drawGravitaationalBody(grav_body& body) } } -void drawOrbitalElements(orbital_elements& el) +void drawOrbitalElements(OrbitalElements& el) { if (ImGui::CollapsingHeader("Orbital Elements", H_FLAGS)) { ImGui::Text("semi_major axis, a: %f km", el.a); @@ -128,7 +128,7 @@ void drawOrbitalElements(orbital_elements& el) } void -drawSatelliteWindow(satellite& sat) +drawSatelliteWindow(Satellite& sat) { if (ImGui::CollapsingHeader("Satellite:", H_FLAGS)) { ImGui::Text("Satellite Parameters:"); @@ -144,7 +144,7 @@ drawSatelliteWindow(satellite& sat) } } -void drawSystemWindow(system_2body& sys) +void drawSystemWindow(TwoBodySystem& sys) { if (ImGui::CollapsingHeader("2 Body System:", H_FLAGS)) { ImGui::Text("orbital period: %f", sys.orbital_period); diff --git a/src/gooey.h b/src/gooey.h index 26ba73a..4b5612c 100644 --- a/src/gooey.h +++ b/src/gooey.h @@ -16,5 +16,5 @@ bool gooProcessEvent(SDL_Event &e); void -gooDraw(SDL_Window* window, system_2body& sys, +gooDraw(SDL_Window* window, TwoBodySystem& sys, bool& running, u64 sim_time_ms, float& sim_speed); diff --git a/src/main.cpp b/src/main.cpp index 7d48fe0..20f247d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,6 @@ /* * TODO: - * - use consistant name style for structs) 'UpperCase' * - make an 'overlay' graphic for things like apoapsis, perisapsis, f1, f2, * flight path * - impulsive orbital maneuvers @@ -38,7 +37,7 @@ struct GameState u64 sim_time_ms; float sim_speed; - system_2body system; // FIXME: we're going to need more than 1 system... + TwoBodySystem system; // FIXME: we're going to need more than 1 system... Entity* satellite_entity; }; @@ -71,7 +70,7 @@ initLights(RenderState* rs) Entity* initEllipseEntity(RenderState* rs, - system_2body* system, + TwoBodySystem* system, u32 num_vertices) { system->e3d = ellipseInit3D(system->ep, num_vertices); @@ -181,8 +180,8 @@ loadScene(GameState* gs, RenderState* rs) } void -updateSatelliteModel(const system_2body& sys, - satellite& sat, +updateSatelliteModel(const TwoBodySystem& sys, + Satellite& sat, double time_step) { sat.theta = getPropagatedTrueAnomaly(sys, sat.theta, time_step); @@ -193,7 +192,7 @@ updateSatelliteModel(const system_2body& sys, } void -updateSatelliteEntity(Entity* e, const satellite& sat) +updateSatelliteEntity(Entity* e, const Satellite& sat) { const static mat4 xform = glm::rotate(mat4(1.0), (float) M_PI_2, vec3(1, 0, 0)); @@ -203,7 +202,7 @@ updateSatelliteEntity(Entity* e, const satellite& sat) // NOTE: use ellipseValidate(ep) before calling to avoid failing assertions void -updateOrbit(system_2body sys, Entity& ellipse_entity) +updateOrbit(TwoBodySystem sys, Entity& ellipse_entity) { #if 0 ellipse3DUpdate(sys.ep, sys.e3d); diff --git a/src/orbits.cpp b/src/orbits.cpp index dbf5fcc..ef8ed5d 100644 --- a/src/orbits.cpp +++ b/src/orbits.cpp @@ -5,10 +5,10 @@ const static uint ELLIPSE_VERT_COUNT = 256; -system_2body -systemInit(grav_body gb, orbital_elements el) +TwoBodySystem +systemInit(GravBody gb, OrbitalElements el) { - system_2body s = {0}; + TwoBodySystem s = {0}; s.body = gb; s.elements = el; s.ep = ellipseInitAE(el.a, el.e); @@ -22,20 +22,20 @@ systemInit(grav_body gb, orbital_elements el) return s; } -grav_body +GravBody gravBodyInit(double mu, double r) { - grav_body gb = {0}; + GravBody gb = {0}; gb.mu = mu; gb.radius = r; return gb; } -ellipse_parameters +EllipseParameters ellipseInitAB(double a, double b) { assert(a > 0 && b > 0 && a >= b); - ellipse_parameters ep = { a, b }; + EllipseParameters ep = { a, b }; ep.c = sqrt(a * a - b * b); ep.e = ep.c / ep.a; ep.p = ep.a * (1 - pow(ep.e, 2)); @@ -44,7 +44,7 @@ ellipseInitAB(double a, double b) return ep; } -ellipse_parameters +EllipseParameters ellipseInitAE(double a, double e) { assert(e >= 0 && e < 1); @@ -53,7 +53,7 @@ ellipseInitAE(double a, double e) } bool -ellipseValidate(const ellipse_parameters& ep) +ellipseValidate(const EllipseParameters& ep) { // TODO: find out why satellite position gets wonky with orbit // eccentricity > 0.995 while passing through true anom = 0. @@ -66,32 +66,32 @@ ellipseValidate(const ellipse_parameters& ep) } bool -ellipsesEqual(ellipse_parameters& e1, ellipse_parameters& e2) +ellipsesEqual(EllipseParameters& e1, EllipseParameters& e2) { return (e1.a == e2.a && e1.b == e2.b && e1.e == e2.e); } -ellipse_3d -ellipseInit3D(ellipse_parameters ep, uint vert_count) +Ellipse3D +ellipseInit3D(EllipseParameters ep, uint vert_count) { assert(ep.a > 0 && ep.b > 0 && ep.a >= ep.b && vert_count > 0); - ellipse_3d e3d = { nullptr, vert_count}; + Ellipse3D e3d = { nullptr, vert_count}; // TODO: need to free this allocation at some point e3d.vertices = UTIL_ALLOC(vert_count, glm::vec3); ellipse3DUpdate(ep, e3d); return e3d; } -orbital_elements +OrbitalElements orbitInit(double a, double e) { // TODO: remaining elements: iota, ohm, omega, nu - orbital_elements o = {0}; + OrbitalElements o = {0}; o.a = a; o.e = e; o.nu = 0; @@ -141,7 +141,7 @@ polarToRect(double angle, double r) } void -ellipse3DUpdate(ellipse_parameters ep, ellipse_3d& e3d) +ellipse3DUpdate(EllipseParameters ep, Ellipse3D& e3d) { double angle = 2 * M_PI / e3d.vert_count; @@ -213,7 +213,7 @@ getNextTrialValue(double err, double ecc, double test_anom, double mean_anom) } double -getPropagatedEccAnomaly(system_2body sys, +getPropagatedEccAnomaly(TwoBodySystem sys, double initial_anom, double time_step) { @@ -241,7 +241,7 @@ getPropagatedEccAnomaly(system_2body sys, } double -getPropagatedTrueAnomaly(system_2body sys, +getPropagatedTrueAnomaly(TwoBodySystem sys, double initial_anom, double time_step) { @@ -266,10 +266,10 @@ orbitClampAngle(double theta) } double -orbitTimeSincePeriapsis(system_2body sys, double theta); +orbitTimeSincePeriapsis(TwoBodySystem sys, double theta); double -orbitGetTimeOfFlight(system_2body sys, double theta_begin, double theta_end) +orbitGetTimeOfFlight(TwoBodySystem sys, double theta_begin, double theta_end) { double e = sys.ep.e; diff --git a/src/orbits.h b/src/orbits.h index 8c03227..f7dd86c 100644 --- a/src/orbits.h +++ b/src/orbits.h @@ -8,7 +8,7 @@ #include "util.h" -struct ellipse_parameters +struct EllipseParameters { double a; // NOTE: semi-major axis double b; // NOTE: semi-minor axis @@ -19,7 +19,7 @@ struct ellipse_parameters glm::vec2 f2; // NOTE: 'vacant' focus }; -struct orbital_elements +struct OrbitalElements { // NOTE: classical orbital elements double a; // NOTE: semimajor axis @@ -30,20 +30,20 @@ struct orbital_elements double nu; // NOTE: (ν) true anomaly at T0 }; -struct ellipse_3d +struct Ellipse3D { glm::vec3* vertices; uint vert_count; }; -struct grav_body +struct GravBody { double mu; // NOTE: (μ) gravitational parameter double radius; // NOTE: radius of ideal sphere representing the body // double r_atmos; // TODO: bodies w/ atmosphere }; -struct satellite +struct Satellite { glm::vec3 position; glm::vec3 velocity; @@ -54,13 +54,13 @@ struct satellite }; // NOTE: top level composite for 2 body system -struct system_2body +struct TwoBodySystem { - grav_body body; - satellite sat; - ellipse_parameters ep; - ellipse_3d e3d; - orbital_elements elements; + GravBody body; + Satellite sat; + EllipseParameters ep; + Ellipse3D e3d; + OrbitalElements elements; double epsilon; // NOTE: (ε) specific orbital energy, MJ/kg double h; // NOTE: angular momentum @@ -70,33 +70,33 @@ struct system_2body }; -system_2body -systemInit(grav_body gb, orbital_elements el); +TwoBodySystem +systemInit(GravBody gb, OrbitalElements el); -grav_body +GravBody gravBodyInit(double mu, double r); -ellipse_parameters +EllipseParameters ellipseInitAB(double a, double b); -ellipse_parameters +EllipseParameters ellipseInitAE(double a, double e); bool -ellipseValidate(const ellipse_parameters& ep); +ellipseValidate(const EllipseParameters& ep); bool -ellipsesEqual(ellipse_parameters& e1, ellipse_parameters& e2); +ellipsesEqual(EllipseParameters& e1, EllipseParameters& e2); // NOTE: create vertices for a 3d ellipse // NOTE: all vertices are in the x/y plane with z = 0 -ellipse_3d -ellipseInit3D(ellipse_parameters ep, uint vert_count); +Ellipse3D +ellipseInit3D(EllipseParameters ep, uint vert_count); void -ellipse3DUpdate(ellipse_parameters ep, ellipse_3d& e3d); +ellipse3DUpdate(EllipseParameters ep, Ellipse3D& e3d); -orbital_elements +OrbitalElements orbitInit(double a, double e); double @@ -109,7 +109,7 @@ double orbitGetPeriod(double a, double mu); void -orbitUpdate(orbital_elements& o, double a, double e); +orbitUpdate(OrbitalElements& o, double a, double e); /* NOTE: how-to propagate orbit position given initial true anomaly, semimajor * axis, mean motion, and eccentricity: ref) section 4.4, Kepler's Problem, @@ -146,7 +146,7 @@ orbitUpdate(orbital_elements& o, double a, double e); * tan(ϴ2/2) = sqrt((1+e) / (1-e)) * tan(E2/2) */ double -getPropagatedTrueAnomaly(system_2body sys, +getPropagatedTrueAnomaly(TwoBodySystem sys, double initial_anom, double time_step); // NOTE: in seconds @@ -164,4 +164,4 @@ glm::vec2 polarToRect(double true_anom, double r); double -orbitGetTimeOfFlight(system_2body sys, double theta_begin, double theta_end); +orbitGetTimeOfFlight(TwoBodySystem sys, double theta_begin, double theta_end); diff --git a/tests/orbit_test.cpp b/tests/orbit_test.cpp index c653b35..eef579c 100644 --- a/tests/orbit_test.cpp +++ b/tests/orbit_test.cpp @@ -25,7 +25,7 @@ TEST_CASE("orbit propagation", "[orbits]") double r = 6378; // body radius in km double initial_anom = 260 * M_PI / 180; // NOTE: radians double time_step = 60 * 50; // NOTE: seconds - system_2body sys = systemInit(gravBodyInit(mu, r), orbitInit(a, e)); + TwoBodySystem sys = systemInit(gravBodyInit(mu, r), orbitInit(a, e)); double E1 = getEccAnomFromTrueAnom(sys.ep.e, initial_anom); REQUIRE_THAT(E1, WithinAbs(-0.8615, 1e-4)); @@ -74,7 +74,7 @@ TEST_CASE("time of flight example 4.1 a", "[orbits]") double e = 0.7411; // eccentricity double mu = 398601.68; // gravitational parameter double r = 6378; // body radius in km - system_2body sys = systemInit(gravBodyInit(mu, r), orbitInit(a, e)); + TwoBodySystem sys = systemInit(gravBodyInit(mu, r), orbitInit(a, e)); // NOTE: get ToF from periapsis to true anomaly at 154.85 degrees double theta_0 = 0.0; @@ -99,7 +99,7 @@ TEST_CASE("time of flight example 4.2", "[orbits]") double e = 0.7411; // eccentricity double mu = 398601.68; // gravitational parameter double r = 6378; // body radius in km - system_2body sys = systemInit(gravBodyInit(mu, r), orbitInit(a, e)); + TwoBodySystem sys = systemInit(gravBodyInit(mu, r), orbitInit(a, e)); // NOTE: get ToF from true anom 230 degrees to true anom at 120 degrees double theta_1 = 230 * M_PI / 180;