From fd868b0f4568615298106da46ea58df8bcfef87b Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Thu, 16 Jun 2022 16:06:55 -0400 Subject: [PATCH] fix the case where step passes through 0 in testManeuverStep() --- src/game.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index 534e9c8..22d345a 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -196,15 +196,21 @@ testManeuverStep(const ManeuverNode& maneuver, if (!maneuver.active) return false; - double r = maneuver.true_anomaly; - previous_theta = orbitClampAngle(previous_theta); - next_theta = orbitClampAngle(next_theta); + // NOTE: clamp angles between 0 and 2 pi to simplify inequalities + double r = orbitClampAngle(maneuver.true_anomaly); + double clamped_previous_theta = orbitClampAngle(previous_theta); + double clamped_next_theta = orbitClampAngle(next_theta); - // FIXME: 2 unhandled cases: - // 1) sat passes through 0 degrees + // FIXME: unhandled cases: // 2) direction is ccw - // - if (previous_theta <= r && next_theta >= r) + + // NOTE: sat passess through 0 + if (clamped_next_theta - clamped_previous_theta < 0) { + if (r >= clamped_previous_theta || r <= clamped_next_theta) + return true; + } + + else if (r >= clamped_previous_theta && r <= clamped_next_theta) return true; return false;