Browse Source

Functions for getting translation part of the matrix.

pull/279/head
Vladimír Vondruš 14 years ago
parent
commit
fb70ef046a
  1. 18
      src/Math/Matrix3.h
  2. 18
      src/Math/Matrix4.h
  3. 9
      src/Math/Test/Matrix3Test.cpp
  4. 1
      src/Math/Test/Matrix3Test.h
  5. 10
      src/Math/Test/Matrix4Test.cpp
  6. 1
      src/Math/Test/Matrix4Test.h

18
src/Math/Matrix3.h

@ -38,7 +38,8 @@ template<class T> class Matrix3: public Matrix<3, T> {
* @brief 2D translation matrix
* @param vec Translation vector
*
* @see Matrix4::translation(), Vector2::xAxis(), Vector2::yAxis()
* @see translation(), Matrix4::translation(const Vector3&),
* Vector2::xAxis(), Vector2::yAxis()
*/
inline constexpr static Matrix3<T> translation(const Vector2<T>& vec) {
return Matrix3<T>( /* Column-major! */
@ -122,6 +123,21 @@ template<class T> class Matrix3: public Matrix<3, T> {
(*this)[1].xy().normalized());
}
/**
* @brief 2D translation part of the matrix
*
* First two elements of last column.
* @see translation(const Vector2&), Matrix4::translation()
*/
inline Vector2<T>& translation() {
return (*this)[2].xy();
}
/** @overload */
inline constexpr Vector3<T> translation() const {
return (*this)[2].xy();
}
MAGNUM_MATRIX_SUBCLASS_IMPLEMENTATION(Matrix3, Vector3, 3)
MAGNUM_RECTANGULARMATRIX_SUBCLASS_OPERATOR_IMPLEMENTATION(3, 3, Matrix3<T>)
};

18
src/Math/Matrix4.h

@ -40,7 +40,8 @@ template<class T> class Matrix4: public Matrix<4, T> {
* @brief 3D translation matrix
* @param vec Translation vector
*
* @see Matrix3::translation(), Vector3::xAxis(), Vector3::yAxis(), Vector3::zAxis()
* @see translation(), Matrix3::translation(const Vector2&),
* Vector3::xAxis(), Vector3::yAxis(), Vector3::zAxis()
*/
inline constexpr static Matrix4<T> translation(const Vector3<T>& vec) {
return Matrix4<T>( /* Column-major! */
@ -161,6 +162,21 @@ template<class T> class Matrix4: public Matrix<4, T> {
(*this)[2].xyz().normalized());
}
/**
* @brief 3D translation part of the matrix
*
* First three elements of last column.
* @see translation(const Vector3&), Matrix3::translation()
*/
inline Vector3<T>& translation() {
return (*this)[3].xyz();
}
/** @overload */
inline constexpr Vector3<T> translation() const {
return (*this)[3].xyz();
}
MAGNUM_MATRIX_SUBCLASS_IMPLEMENTATION(Matrix4, Vector4, 4)
MAGNUM_RECTANGULARMATRIX_SUBCLASS_OPERATOR_IMPLEMENTATION(4, 4, Matrix4<T>)
};

9
src/Math/Test/Matrix3Test.cpp

@ -38,6 +38,7 @@ Matrix3Test::Matrix3Test() {
&Matrix3Test::rotation,
&Matrix3Test::rotationScalingPart,
&Matrix3Test::rotationPart,
&Matrix3Test::translationPart,
&Matrix3Test::debug,
&Matrix3Test::configuration);
}
@ -122,6 +123,14 @@ void Matrix3Test::rotationPart() {
CORRADE_COMPARE(rotationTransformed.rotation(), expectedRotationPart);
}
void Matrix3Test::translationPart() {
Matrix3 m(1.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f,
-5.0f, 12.0f, 1.0f);
Vector2 expected(-5.0f, 12.0f);
CORRADE_COMPARE(m.translation(), expected);
}
void Matrix3Test::debug() {
Matrix3 m(
3.0f, 5.0f, 8.0f,

1
src/Math/Test/Matrix3Test.h

@ -30,6 +30,7 @@ class Matrix3Test: public Corrade::TestSuite::Tester<Matrix3Test> {
void rotation();
void rotationScalingPart();
void rotationPart();
void translationPart();
void debug();
void configuration();

10
src/Math/Test/Matrix4Test.cpp

@ -38,6 +38,7 @@ Matrix4Test::Matrix4Test() {
&Matrix4Test::rotation,
&Matrix4Test::rotationScalingPart,
&Matrix4Test::rotationPart,
&Matrix4Test::translationPart,
&Matrix4Test::debug,
&Matrix4Test::configuration);
}
@ -135,6 +136,15 @@ void Matrix4Test::rotationPart() {
CORRADE_COMPARE(rotationTransformed.rotation(), expectedRotationPart);
}
void Matrix4Test::translationPart() {
Matrix4 m(1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
-5.0f, 12.0f, 0.5f, 1.0f);
Vector3 expected(-5.0f, 12.0f, 0.5f);
CORRADE_COMPARE(m.translation(), expected);
}
void Matrix4Test::debug() {
Matrix4 m(
3.0f, 5.0f, 8.0f, 4.0f,

1
src/Math/Test/Matrix4Test.h

@ -30,6 +30,7 @@ class Matrix4Test: public Corrade::TestSuite::Tester<Matrix4Test> {
void rotation();
void rotationScalingPart();
void rotationPart();
void translationPart();
void debug();
void configuration();

Loading…
Cancel
Save