summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2021-03-05 19:39:40 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2021-03-05 19:39:40 +0000
commit67535647999faea49daf43bfeafeb4c4fc4f26ea (patch)
treedeb9fec414a9ff4a473aa55a224f48250cb716e5
parentTest rotation funcs with a huge range of random values (diff)
downloadilt-67535647999faea49daf43bfeafeb4c4fc4f26ea.tar.bz2
ilt-67535647999faea49daf43bfeafeb4c4fc4f26ea.tar.xz
ilt-67535647999faea49daf43bfeafeb4c4fc4f26ea.zip
Template rotations and add one for 2D rotation matrix
-rw-r--r--lib/maths.cpp18
-rw-r--r--lib/maths.h1
-rw-r--r--test/test-maths.cpp1
3 files changed, 15 insertions, 5 deletions
diff --git a/lib/maths.cpp b/lib/maths.cpp
index 5800b1b..4ae0693 100644
--- a/lib/maths.cpp
+++ b/lib/maths.cpp
@@ -24,35 +24,43 @@ operator^(M & m, glm::ivec2 xy)
}
// Create a matrix for the angle, given the targets into the matrix
+template<typename M>
inline auto
-rotation(float a, glm::ivec2 c1, glm::ivec2 s1, glm::ivec2 c2, glm::ivec2 ms2)
+rotation(typename M::value_type a, glm::ivec2 c1, glm::ivec2 s1, glm::ivec2 c2, glm::ivec2 ms2)
{
- glm::mat4 m(1);
+ M m(1);
sincosf(a, m ^ s1, m ^ c1);
m ^ c2 = m ^ c1;
m ^ ms2 = -(m ^ s1);
return m;
}
+// Create a flat (2D) transformation matrix
+glm::mat2
+rotate_flat(float a)
+{
+ return rotation<glm::mat2>(a, {0, 0}, {0, 1}, {1, 1}, {1, 0});
+}
+
// Create a roll transformation matrix
glm::mat4
rotate_roll(float a)
{
- return rotation(a, {0, 0}, {0, 1}, {1, 1}, {1, 0});
+ return rotation<glm::mat4>(a, {0, 0}, {0, 1}, {1, 1}, {1, 0});
}
// Create a yaw transformation matrix
glm::mat4
rotate_yaw(float a)
{
- return rotation(a, {0, 0}, {2, 0}, {2, 2}, {0, 2});
+ return rotation<glm::mat4>(a, {0, 0}, {2, 0}, {2, 2}, {0, 2});
}
// Create a pitch transformation matrix
glm::mat4
rotate_pitch(float a)
{
- return rotation(a, {1, 1}, {1, 2}, {2, 2}, {2, 1});
+ return rotation<glm::mat4>(a, {1, 1}, {1, 2}, {2, 2}, {2, 1});
}
// Create a bomcined yaw, pitch, roll transformation matrix
diff --git a/lib/maths.h b/lib/maths.h
index a3a391d..dc0c617 100644
--- a/lib/maths.h
+++ b/lib/maths.h
@@ -45,6 +45,7 @@ sincosf(float a)
return sc;
}
+glm::mat2 rotate_flat(float);
glm::mat4 rotate_roll(float);
glm::mat4 rotate_yaw(float);
glm::mat4 rotate_pitch(float);
diff --git a/test/test-maths.cpp b/test/test-maths.cpp
index ea60f2a..420b69e 100644
--- a/test/test-maths.cpp
+++ b/test/test-maths.cpp
@@ -5,6 +5,7 @@
#include <glm/gtx/transform.hpp>
#include <stream_support.hpp>
#include <string_view>
+#include <type_traits>
#include <glm/glm.hpp>
#include <maths.h>