From 8d489b17ccf3085ef1327bc32223c2ccfd0bf021 Mon Sep 17 00:00:00 2001 From: Matthew Mott Date: Mon, 22 Mar 2021 20:27:50 +0000 Subject: [PATCH] Remove unused Quaternion::createForMatrix() This method was only used in a single test (which has now been changed to use createForY() instead, although for some reason this requires a negated angle). --- libs/math/CMakeLists.txt | 2 +- libs/math/Quaternion.cpp | 55 ---------------------------------------- libs/math/Quaternion.h | 5 ---- test/Brush.cpp | 21 ++++++++++++--- test/math/Quaternion.cpp | 2 -- 5 files changed, 18 insertions(+), 67 deletions(-) delete mode 100644 libs/math/Quaternion.cpp diff --git a/libs/math/CMakeLists.txt b/libs/math/CMakeLists.txt index 2f2fd67206..24c5cca03f 100644 --- a/libs/math/CMakeLists.txt +++ b/libs/math/CMakeLists.txt @@ -1,2 +1,2 @@ add_library(math - AABB.cpp Frustum.cpp Matrix4.cpp Plane3.cpp Quaternion.cpp) + AABB.cpp Frustum.cpp Matrix4.cpp Plane3.cpp) diff --git a/libs/math/Quaternion.cpp b/libs/math/Quaternion.cpp deleted file mode 100644 index 7a482a7fdf..0000000000 --- a/libs/math/Quaternion.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include "Quaternion.h" - -#include "Matrix4.h" - -Quaternion Quaternion::createForMatrix(const Matrix4& matrix4) -{ - Matrix4 transposed = matrix4.getTransposed(); - - double trace = transposed[0] + transposed[5] + transposed[10] + 1.0; - - if (trace > 0.0001) - { - double S = 0.5 / sqrt(trace); - - return Quaternion( - (transposed[9] - transposed[6]) * S, - (transposed[2] - transposed[8]) * S, - (transposed[4] - transposed[1]) * S, - 0.25f / S - ); - } - - if (transposed[0] >= transposed[5] && transposed[0] >= transposed[10]) - { - double S = 2.0 * sqrt(1.0 + transposed[0] - transposed[5] - transposed[10]); - - return Quaternion( - 0.25 / S, - (transposed[1] + transposed[4]) / S, - (transposed[2] + transposed[8]) / S, - (transposed[6] + transposed[9]) / S - ); - } - - if (transposed[5] >= transposed[0] && transposed[5] >= transposed[10]) - { - double S = 2.0 * sqrt(1.0 + transposed[5] - transposed[0] - transposed[10]); - - return Quaternion( - (transposed[1] + transposed[4]) / S, - 0.25 / S, - (transposed[6] + transposed[9]) / S, - (transposed[2] + transposed[8]) / S - ); - } - - double S = 2.0 * sqrt(1.0 + transposed[10] - transposed[0] - transposed[5]); - - return Quaternion( - (transposed[2] + transposed[8]) / S, - (transposed[6] + transposed[9]) / S, - 0.25 / S, - (transposed[1] + transposed[4]) / S - ); -} diff --git a/libs/math/Quaternion.h b/libs/math/Quaternion.h index 6110f5bafa..b7e576ad80 100644 --- a/libs/math/Quaternion.h +++ b/libs/math/Quaternion.h @@ -61,11 +61,6 @@ class Quaternion : static Quaternion createForY(double angle); static Quaternion createForZ(double angle); - /** - * Retrieves the quaternion from the given matrix. - */ - static Quaternion createForMatrix(const Matrix4& matrix4); - /** * Returns this quaternion multiplied by the other one. */ diff --git a/test/Brush.cpp b/test/Brush.cpp index 254ace934c..399034818b 100644 --- a/test/Brush.cpp +++ b/test/Brush.cpp @@ -10,6 +10,15 @@ namespace test { +// Fuzzy equality assertion for Plane3 +void expectNear(const Plane3& p1, const Plane3& p2, double epsilon) +{ + EXPECT_NEAR(p1.normal().x(), p2.normal().x(), epsilon); + EXPECT_NEAR(p1.normal().y(), p2.normal().y(), epsilon); + EXPECT_NEAR(p1.normal().z(), p2.normal().z(), epsilon); + EXPECT_NEAR(p1.dist(), p2.dist(), epsilon); +} + class BrushTest: public RadiantTest { protected: @@ -115,14 +124,18 @@ TEST_F(BrushTest, FacePlaneRotateWithMatrix) Plane3 orig = face.getPlane3(); // Transform the plane with a rotation matrix - Matrix4 rot = Matrix4::getRotation(Vector3(0, 1, 0), 2); + const double ANGLE = 2.0; + Matrix4 rot = Matrix4::getRotation(Vector3(0, 1, 0), ANGLE); - Node_getTransformable(_brushNode)->setRotation(Quaternion::createForMatrix(rot)); + Node_getTransformable(_brushNode)->setRotation( + Quaternion::createForY(-ANGLE) + ); Node_getTransformable(_brushNode)->freezeTransform(); + double EPSILON = 0.001; EXPECT_NE(face.getPlane3(), orig); - EXPECT_EQ(face.getPlane3(), orig.transformed(rot)); - EXPECT_NEAR(face.getPlane3().normal().getLength(), 1, 0.001); + expectNear(face.getPlane3(), orig.transformed(rot), EPSILON); + EXPECT_NEAR(face.getPlane3().normal().getLength(), 1, EPSILON); return true; } diff --git a/test/math/Quaternion.cpp b/test/math/Quaternion.cpp index 1152b12e05..3831538686 100644 --- a/test/math/Quaternion.cpp +++ b/test/math/Quaternion.cpp @@ -40,8 +40,6 @@ TEST(MathTest, QuaternionForZRotation) expectNear(zRot, Quaternion(0, 0, sin(angle.asRadians() / 2), cos(angle.asRadians() / 2))); - expectNear(zRot, - Quaternion::createForMatrix(Matrix4::getRotationAboutZ(angle))); } TEST(MathTest, QuaternionMultiplication)