summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2021-02-27 20:16:33 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2021-02-27 20:22:35 +0000
commit63425aea8fadec35857d059a0cdc869863ddbaf5 (patch)
treec7bf106a7a0aaccdd35ec60a7bb6ea9761466842
parentCalculate the radius to join to point+direction vector pairs (diff)
downloadilt-63425aea8fadec35857d059a0cdc869863ddbaf5.tar.bz2
ilt-63425aea8fadec35857d059a0cdc869863ddbaf5.tar.xz
ilt-63425aea8fadec35857d059a0cdc869863ddbaf5.zip
Calculate the candidate radii to join to point+direction angle pairs
Returns a pair of the left and right variants.
-rw-r--r--utility/maths.cpp13
-rw-r--r--utility/maths.h1
2 files changed, 14 insertions, 0 deletions
diff --git a/utility/maths.cpp b/utility/maths.cpp
index 75346a0..543c887 100644
--- a/utility/maths.cpp
+++ b/utility/maths.cpp
@@ -84,6 +84,19 @@ find_arc_centre(glm::vec2 as, glm::vec2 ad, glm::vec2 bs, glm::vec2 bd)
throw std::runtime_error("no intersection");
}
+std::pair<float, float>
+find_arcs_radius(glm::vec2 start, float entrys, glm::vec2 end, float entrye)
+{
+ const auto getrad = [&](float leftOrRight) {
+ const auto perps = entrys + leftOrRight;
+ const auto perpe = entrye + leftOrRight;
+ const glm::vec2 ad {std::sin(perps), std::cos(perps)};
+ const glm::vec2 bd {std::sin(perpe), std::cos(perpe)};
+ return find_arcs_radius(start, ad, end, bd);
+ };
+ return {getrad(-half_pi), getrad(half_pi)};
+}
+
float
find_arcs_radius(glm::vec2 start, glm::vec2 ad, glm::vec2 end, glm::vec2 bd)
{
diff --git a/utility/maths.h b/utility/maths.h
index b0048c3..89cb7cb 100644
--- a/utility/maths.h
+++ b/utility/maths.h
@@ -55,6 +55,7 @@ float normalize(float ang);
std::pair<glm::vec2, bool> find_arc_centre(glm::vec2 start, float entrys, glm::vec2 end, float entrye);
std::pair<glm::vec2, bool> find_arc_centre(glm::vec2 start, glm::vec2 ad, glm::vec2 end, glm::vec2 bd);
+std::pair<float, float> find_arcs_radius(glm::vec2 start, float entrys, glm::vec2 end, float entrye);
float find_arcs_radius(glm::vec2 start, glm::vec2 ad, glm::vec2 end, glm::vec2 bd);
#endif