Browse Source

Math: translation dual complex number.

pull/278/head
Vladimír Vondruš 13 years ago
parent
commit
bdc02ddd19
  1. 26
      src/Math/DualComplex.h
  2. 5
      src/Math/DualQuaternion.h
  3. 5
      src/Math/Matrix3.h
  4. 10
      src/Math/Test/DualComplexTest.cpp

26
src/Math/DualComplex.h

@ -49,6 +49,20 @@ template<class T> class DualComplex: public Dual<Complex<T>> {
return {Complex<T>::rotation(angle), {{}, {}}};
}
/**
* @brief Translation dual complex number
* @param vector Translation vector
*
* @f[
* \hat c = (0 + i1) + \epsilon (v_x + iv_y)
* @f]
* @see translation() const, Matrix3::translation(const Vector2&),
* DualQuaternion::translation(), Vector2::xAxis(), Vector2::yAxis()
*/
inline static DualComplex<T> translation(const Vector2<T>& vector) {
return {{}, {vector.x(), vector.y()}};
}
/**
* @brief Default constructor
*
@ -84,6 +98,18 @@ template<class T> class DualComplex: public Dual<Complex<T>> {
return this->real().rotationAngle();
}
/**
* @brief Translation part of dual complex number
*
* @f[
* \boldsymbol a = (c_\epsilon c_0^*)
* @f]
* @see translation(const Vector2&)
*/
inline Vector2<T> translation() const {
return Vector2<T>(this->dual()*this->real().conjugated());
}
/**
* @brief Complex-conjugated dual complex number
*

5
src/Math/DualQuaternion.h

@ -59,8 +59,9 @@ template<class T> class DualQuaternion: public Dual<Quaternion<T>> {
* @f[
* \hat q = [\boldsymbol 0, 1] + \epsilon [\frac{\boldsymbol v}{2}, 0]
* @f]
* @see translation() const, Matrix3::translation(const Vector2&),
* Vector3::xAxis(), Vector3::yAxis(), Vector3::zAxis()
* @see translation() const, Matrix4::translation(const Vector3&),
* DualComplex::translation(), Vector3::xAxis(), Vector3::yAxis(),
* Vector3::zAxis()
*/
inline static DualQuaternion<T> translation(const Vector3<T>& vector) {
return {{}, {vector/T(2), T(0)}};

5
src/Math/Matrix3.h

@ -38,8 +38,9 @@ template<class T> class Matrix3: public Matrix<3, T> {
* @brief 2D translation matrix
* @param vector Translation vector
*
* @see translation(), Matrix4::translation(const Vector3&),
* Vector2::xAxis(), Vector2::yAxis()
* @see translation(), DualComplex::translation(),
* Matrix4::translation(const Vector3&), Vector2::xAxis(),
* Vector2::yAxis()
*/
inline constexpr static Matrix3<T> translation(const Vector2<T>& vector) {
return {{ T(1), T(0), T(0)},

10
src/Math/Test/DualComplexTest.cpp

@ -40,6 +40,7 @@ class DualComplexTest: public Corrade::TestSuite::Tester {
void invertedNormalized();
void rotation();
void translation();
void debug();
};
@ -49,6 +50,7 @@ typedef Math::Rad<float> Rad;
typedef Math::Complex<float> Complex;
typedef Math::Dual<float> Dual;
typedef Math::DualComplex<float> DualComplex;
typedef Math::Vector2<float> Vector2;
DualComplexTest::DualComplexTest() {
addTests(&DualComplexTest::construct,
@ -67,6 +69,7 @@ DualComplexTest::DualComplexTest() {
&DualComplexTest::invertedNormalized,
&DualComplexTest::rotation,
&DualComplexTest::translation,
&DualComplexTest::debug);
}
@ -161,6 +164,13 @@ void DualComplexTest::rotation() {
CORRADE_COMPARE_AS(a.rotationAngle(), Deg(120.0f), Rad);
}
void DualComplexTest::translation() {
Vector2 vec(1.5f, -3.5f);
DualComplex a = DualComplex::translation(vec);
CORRADE_COMPARE(a, DualComplex({}, {1.5f, -3.5f}));
CORRADE_COMPARE(a.translation(), vec);
}
void DualComplexTest::debug() {
std::ostringstream o;

Loading…
Cancel
Save