From 07c0c4d845324b12a74d0520e4b38bf1efff3d50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 16 Feb 2013 23:31:50 +0100 Subject: [PATCH] Math: added tests for composed dual quaternion parts. To be sure everything is implemented properly. --- src/Math/Test/DualQuaternionTest.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Math/Test/DualQuaternionTest.cpp b/src/Math/Test/DualQuaternionTest.cpp index 896ab5c2a..35c64dae0 100644 --- a/src/Math/Test/DualQuaternionTest.cpp +++ b/src/Math/Test/DualQuaternionTest.cpp @@ -39,6 +39,7 @@ class DualQuaternionTest: public Corrade::TestSuite::Tester { void rotation(); void translation(); + void combinedTransformParts(); void transformPointNormalized(); void debug(); @@ -65,6 +66,7 @@ DualQuaternionTest::DualQuaternionTest() { &DualQuaternionTest::rotation, &DualQuaternionTest::translation, + &DualQuaternionTest::combinedTransformParts, &DualQuaternionTest::transformPointNormalized, &DualQuaternionTest::debug); @@ -143,6 +145,20 @@ void DualQuaternionTest::translation() { CORRADE_COMPARE(q.translation(), vec); } +void DualQuaternionTest::combinedTransformParts() { + Vector3 translation = Vector3(-1.0f, 2.0f, 3.0f); + DualQuaternion a = DualQuaternion::translation(translation)*DualQuaternion::rotation(deg(23.0f), Vector3::xAxis()); + DualQuaternion b = DualQuaternion::rotation(deg(23.0f), Vector3::xAxis())*DualQuaternion::translation(translation); + + CORRADE_COMPARE(a.rotationAxis(), Vector3::xAxis()); + CORRADE_COMPARE(b.rotationAxis(), Vector3::xAxis()); + CORRADE_COMPARE(a.rotationAngle(), deg(23.0f)); + CORRADE_COMPARE(b.rotationAngle(), deg(23.0f)); + + CORRADE_COMPARE(a.translation(), translation); + CORRADE_COMPARE(b.translation(), Quaternion::rotation(deg(23.0f), Vector3::xAxis()).rotateVectorNormalized(translation)); +} + void DualQuaternionTest::transformPointNormalized() { DualQuaternion a = DualQuaternion::translation({-1.0f, 2.0f, 3.0f})*DualQuaternion::rotation(deg(23.0f), Vector3::xAxis()); DualQuaternion b = DualQuaternion::rotation(deg(23.0f), Vector3::xAxis())*DualQuaternion::translation({-1.0f, 2.0f, 3.0f});