diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-05-10 12:52:50 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2025-05-10 12:52:50 +0100 |
commit | ea0453f520a787dddff11d389683a255aed73ca7 (patch) | |
tree | ebbdd847e6892a8c9e72aca7f08dc039ca21497f /lib | |
parent | Fix all warnings in test/ (diff) | |
download | ilt-ea0453f520a787dddff11d389683a255aed73ca7.tar.bz2 ilt-ea0453f520a787dddff11d389683a255aed73ca7.tar.xz ilt-ea0453f520a787dddff11d389683a255aed73ca7.zip |
Simplified genCurveDef for 1 direction
Uses new find_arc_centre for 1 direction which doesn't break for 180
degree solutions.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/maths.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/maths.h b/lib/maths.h index 43d6dcd..68b45da 100644 --- a/lib/maths.h +++ b/lib/maths.h @@ -427,6 +427,21 @@ find_arc_centre(glm::vec<2, T, Q> start, Angle entrys, glm::vec<2, T, Q> end, An } template<Arithmetic T, glm::qualifier Q = glm::defaultp> +std::pair<glm::vec<2, T, Q>, bool> +find_arc_centre(glm::vec<2, T, Q> start, Angle entrys, glm::vec<2, T, Q> end) +{ + if (start == end) { + return {start, false}; + } + const auto startNormal = vector_normal(sincos(entrys) * 10'000.F); + const auto diffEnds = difference(end, start); + const auto midEnds = start + ((end - start) / 2); + const auto diffNormal = vector_normal(diffEnds); + const auto centre = linesIntersectAt(start, start + startNormal, midEnds, midEnds + diffNormal); + return {*centre, normalize(vector_yaw(diffEnds) - entrys) < 0}; +} + +template<Arithmetic T, glm::qualifier Q = glm::defaultp> Angle find_arcs_radius(glm::vec<2, T, Q> start, Rotation2D ad, glm::vec<2, T, Q> end, Rotation2D bd) { |