From 293a885381a3717f01b546a8d8b1e34856440dc9 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Tue, 23 Feb 2021 17:50:26 +0000 Subject: As suspected, find_arc_centre could be simplfied --- utility/maths.cpp | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) (limited to 'utility') diff --git a/utility/maths.cpp b/utility/maths.cpp index 74a3085..bda6ea6 100644 --- a/utility/maths.cpp +++ b/utility/maths.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include glm::mat4 @@ -66,22 +65,16 @@ find_arc_centre(glm::vec2 as, float entrys, glm::vec2 bs, float entrye) if (as == bs) { return {as, false}; } - for (const auto lr : {1.F, -1.F}) { // left or right turn (maybe possible with removal of positve check below) - const auto perps = entrys + (half_pi * lr); - const auto perpe = entrye - (half_pi * lr); - const glm::vec2 ad {std::sin(perps), std::cos(perps)}; - const glm::vec2 bd {std::sin(perpe), std::cos(perpe)}; + const auto perps = entrys + half_pi; + const auto perpe = entrye - half_pi; + const glm::vec2 ad {std::sin(perps), std::cos(perps)}; + const glm::vec2 bd {std::sin(perpe), std::cos(perpe)}; - const auto dx = bs.x - as.x; - const auto dy = bs.y - as.y; - const auto det = bd.x * ad.y - bd.y * ad.x; - if (det != 0) { // near parallel line will yield noisy results - const auto u = (dy * bd.x - dx * bd.y) / det; - const auto v = (dy * ad.x - dx * ad.y) / det; - if (u >= 0 && v >= 0) { - return {as + ad * u, lr < 0}; - } - } + const auto det = bd.x * ad.y - bd.y * ad.x; + if (det != 0) { // near parallel line will yield noisy results + const auto d = bs - as; + const auto u = (d.y * bd.x - d.x * bd.y) / det; + return {as + ad * u, u < 0}; } throw std::runtime_error("no intersection"); } -- cgit v1.2.3