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});