Browse Source

Function for transposing matrix.

vectorfields
Vladimír Vondruš 16 years ago
parent
commit
8f0bacd2f8
  1. 12
      src/Matrix.h
  2. 18
      src/Test/MatrixTest.cpp
  3. 1
      src/Test/MatrixTest.h

12
src/Matrix.h

@ -107,6 +107,18 @@ template<class T, size_t size> class Matrix {
return out;
}
/** @brief Transposed matrix */
Matrix<T, size> transposed() const {
Matrix<T, size> out;
for(size_t row = 0; row != size; ++row) {
for(size_t col = 0; col != size; ++col)
out.set(col, row, at(row, col));
}
return out;
}
private:
T _data[size*size];
};

18
src/Test/MatrixTest.cpp

@ -135,4 +135,22 @@ void MatrixTest::multiply() {
QVERIFY(is);
}
void MatrixTest::transposed() {
float original[] = {
0.0f, 1.0f, 2.0f, 3.0f,
4.0f, 5.0f, 6.0f, 7.0f,
8.0f, 9.0f, 10.0f, 11.0f,
12.0f, 13.0f, 14.0f, 15.0f
};
float transposed[] = {
0.0f, 4.0f, 8.0f, 12.0f,
1.0f, 5.0f, 9.0f, 13.0f,
2.0f, 6.0f, 10.0f, 14.0f,
3.0f, 7.0f, 11.0f, 15.0f
};
QVERIFY(Matrix4(original).transposed() == Matrix4(transposed));
}
}}

1
src/Test/MatrixTest.h

@ -29,6 +29,7 @@ class MatrixTest: public QObject {
void copy();
void multiplyIdentity();
void multiply();
void transposed();
};
}}

Loading…
Cancel
Save