Browse Source

Math: ability to normalize DualQuaternion.

Also hope that this is proper implementation.
pull/7/head
Vladimír Vondruš 13 years ago
parent
commit
7e0d8d119f
  1. 5
      src/Math/DualQuaternion.h
  2. 9
      src/Math/Test/DualQuaternionTest.cpp

5
src/Math/DualQuaternion.h

@ -208,6 +208,11 @@ template<class T> class DualQuaternion: public Dual<Quaternion<T>> {
return Math::sqrt(lengthSquared());
}
/** @brief Normalized quaternion (of length 1) */
inline DualQuaternion<T> normalized() const {
return (*this)/length();
}
/**
* @brief Inverted dual quaternion
*

9
src/Math/Test/DualQuaternionTest.cpp

@ -31,6 +31,7 @@ class DualQuaternionTest: public Corrade::TestSuite::Tester {
void lengthSquared();
void length();
void normalized();
void quaternionConjugated();
void dualConjugated();
@ -60,6 +61,7 @@ DualQuaternionTest::DualQuaternionTest() {
&DualQuaternionTest::lengthSquared,
&DualQuaternionTest::length,
&DualQuaternionTest::normalized,
&DualQuaternionTest::quaternionConjugated,
&DualQuaternionTest::dualConjugated,
@ -103,6 +105,13 @@ void DualQuaternionTest::length() {
CORRADE_COMPARE(a.length(), Dual(5.477226f, -0.821584f));
}
void DualQuaternionTest::normalized() {
DualQuaternion a({{1.0f, 2.0f, 3.0f}, -4.0f}, {{0.5f, -3.0f, 3.0f}, 2.0f});
DualQuaternion b({{0.182574f, 0.365148f, 0.547723f}, -0.730297f}, {{0.118673f, -0.49295f, 0.629881f}, 0.255604f});
CORRADE_COMPARE(a.normalized().length(), 1.0f);
CORRADE_COMPARE(a.normalized(), b);
}
void DualQuaternionTest::quaternionConjugated() {
DualQuaternion a({{ 1.0f, 2.0f, 3.0f}, -4.0f}, {{ 0.5f, -3.1f, 3.3f}, 2.0f});
DualQuaternion b({{-1.0f, -2.0f, -3.0f}, -4.0f}, {{-0.5f, 3.1f, -3.3f}, 2.0f});

Loading…
Cancel
Save