Browse Source

Math: creating DualQuaternion from vector.

pull/7/head
Vladimír Vondruš 13 years ago
parent
commit
03ae82b448
  1. 14
      src/Math/DualQuaternion.h
  2. 6
      src/Math/Test/DualQuaternionTest.cpp

14
src/Math/DualQuaternion.h

@ -84,6 +84,20 @@ template<class T> class DualQuaternion: public Dual<Quaternion<T>> {
*/
inline constexpr /*implicit*/ DualQuaternion(const Quaternion<T>& real, const Quaternion<T>& dual): Dual<Quaternion<T>>(real, dual) {}
/**
* @brief Construct dual quaternion from vector
*
* @f[
* \hat q = [\boldsymbol 0, 1] + \epsilon [\boldsymbol v, 0]
* @f]
* @todoc Remove workaround when Doxygen is predictable
*/
#ifdef DOXYGEN_GENERATING_OUTPUT
inline constexpr explicit DualQuaternion(const Vector3<T>& vector);
#else
inline constexpr explicit DualQuaternion(const Vector3<T>& vector): Dual<Quaternion<T>>({}, {vector, T(0)}) {}
#endif
/**
* @brief Rotation angle of unit dual quaternion
*

6
src/Math/Test/DualQuaternionTest.cpp

@ -27,6 +27,7 @@ class DualQuaternionTest: public Corrade::TestSuite::Tester {
void construct();
void constructDefault();
void constructFromVector();
void norm();
@ -49,6 +50,7 @@ typedef Math::Vector3<float> Vector3;
DualQuaternionTest::DualQuaternionTest() {
addTests(&DualQuaternionTest::construct,
&DualQuaternionTest::constructDefault,
&DualQuaternionTest::constructFromVector,
&DualQuaternionTest::norm,
@ -73,6 +75,10 @@ void DualQuaternionTest::constructDefault() {
CORRADE_COMPARE(DualQuaternion(), DualQuaternion({{0.0f, 0.0f, 0.0f}, 1.0f}, {{0.0f, 0.0f, 0.0f}, 0.0f}));
}
void DualQuaternionTest::constructFromVector() {
CORRADE_COMPARE(DualQuaternion({1.0f, 2.0f, 3.0f}), DualQuaternion({{0.0f, 0.0f, 0.0f}, 1.0f}, {{1.0f, 2.0f, 3.0f}, 0.0f}));
}
void DualQuaternionTest::norm() {
CORRADE_COMPARE(DualQuaternion().norm(), 1.0f);

Loading…
Cancel
Save