Browse Source

Remove redundant propagate_state_by_dt helper, inline logic directly

main
cinnaboot 5 months ago
parent
commit
5124b9236b
  1. 24
      src/maneuver.cpp

24
src/maneuver.cpp

@ -123,19 +123,6 @@ static bool angle_between(double current, double next, double target) {
} }
} }
// Propagate orbital state forward by dt and return new position/velocity
static void propagate_state_by_dt(OrbitalElements elements, double parent_mass, double dt,
Vec3* out_r, Vec3* out_v, Vec3* out_h,
Vec3* out_e_vec, double* out_e_mag) {
OrbitalElements future_elements = propagate_orbital_elements(elements, dt, parent_mass);
orbital_elements_to_cartesian(future_elements, parent_mass, out_r, out_v);
*out_h = vec3_cross(*out_r, *out_v);
double mu = G * parent_mass;
*out_e_vec = calculate_eccentricity_vector(*out_r, *out_v, *out_h, mu);
*out_e_mag = vec3_magnitude(*out_e_vec);
}
bool check_maneuver_trigger(Maneuver* maneuver, Spacecraft* craft, SimulationState* sim) { bool check_maneuver_trigger(Maneuver* maneuver, Spacecraft* craft, SimulationState* sim) {
switch (maneuver->trigger_type) { switch (maneuver->trigger_type) {
case TRIGGER_TIME: case TRIGGER_TIME:
@ -170,11 +157,12 @@ bool check_maneuver_trigger(Maneuver* maneuver, Spacecraft* craft, SimulationSta
if (current_diff < 0.01) return true; if (current_diff < 0.01) return true;
// Propagate orbit forward by one time step to check if we'll cross trigger // Propagate orbit forward by one time step to check if we'll cross trigger
Vec3 future_r, future_v, future_h, future_e_vec; OrbitalElements future_elements = propagate_orbital_elements(craft->orbit, sim->dt, parent->mass);
double future_e_mag; Vec3 future_r, future_v;
propagate_state_by_dt(craft->orbit, parent->mass, sim->dt, orbital_elements_to_cartesian(future_elements, parent->mass, &future_r, &future_v);
&future_r, &future_v, &future_h, Vec3 future_h = vec3_cross(future_r, future_v);
&future_e_vec, &future_e_mag); Vec3 future_e_vec = calculate_eccentricity_vector(future_r, future_v, future_h, mu);
double future_e_mag = vec3_magnitude(future_e_vec);
double future_r_mag = vec3_magnitude(future_r); double future_r_mag = vec3_magnitude(future_r);
if (future_r_mag < 1.0) return false; if (future_r_mag < 1.0) return false;

Loading…
Cancel
Save