summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/test-maths.cpp22
-rw-r--r--utility/maths.cpp6
-rw-r--r--utility/maths.h1
3 files changed, 29 insertions, 0 deletions
diff --git a/test/test-maths.cpp b/test/test-maths.cpp
index ba1bc7b..6187c46 100644
--- a/test/test-maths.cpp
+++ b/test/test-maths.cpp
@@ -17,6 +17,28 @@ BOOST_DATA_TEST_CASE(test_vector_yaw,
BOOST_CHECK_CLOSE(vector_yaw(v), a, 1.F);
}
+BOOST_DATA_TEST_CASE(test_vector_pitch,
+ boost::unit_test::data::make<vecter_to_angle>({
+ {north, 0},
+ {east, 0},
+ {south, 0},
+ {west, 0},
+ {north + up, quarter_pi},
+ {east + up, quarter_pi},
+ {south + up, quarter_pi},
+ {west + up, quarter_pi},
+ {north - up, -quarter_pi},
+ {east - up, -quarter_pi},
+ {south - up, -quarter_pi},
+ {west - up, -quarter_pi},
+ {north + west - up, -quarter_pi},
+ {north + west + up, quarter_pi},
+ }),
+ v, a)
+{
+ BOOST_CHECK_CLOSE(vector_pitch(v), a, 1.F);
+}
+
using normalize_angle = std::tuple<float, float>;
BOOST_DATA_TEST_CASE(test_angle_normalize,
boost::unit_test::data::make<normalize_angle>({
diff --git a/utility/maths.cpp b/utility/maths.cpp
index aa44220..fb14a17 100644
--- a/utility/maths.cpp
+++ b/utility/maths.cpp
@@ -22,6 +22,12 @@ vector_yaw(const glm::vec3 & diff)
}
float
+vector_pitch(const glm::vec3 & diff)
+{
+ return std::atan(diff.y);
+}
+
+float
round_frac(const float & v, const float & frac)
{
return std::round(v / frac) * frac;
diff --git a/utility/maths.h b/utility/maths.h
index b8dd342..f2114ef 100644
--- a/utility/maths.h
+++ b/utility/maths.h
@@ -29,6 +29,7 @@ constexpr auto two_pi {glm::two_pi<float>()};
glm::mat4 flat_orientation(const glm::vec3 & diff);
float vector_yaw(const glm::vec3 & diff);
+float vector_pitch(const glm::vec3 & diff);
float round_frac(const float & v, const float & frac);