From 8f0bacd2f8045a5df3ab5fe32ea33f7ef47b0205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 23 Dec 2010 23:08:00 +0100 Subject: [PATCH] Function for transposing matrix. --- src/Matrix.h | 12 ++++++++++++ src/Test/MatrixTest.cpp | 18 ++++++++++++++++++ src/Test/MatrixTest.h | 1 + 3 files changed, 31 insertions(+) diff --git a/src/Matrix.h b/src/Matrix.h index 00285762f..fc2067d5e 100644 --- a/src/Matrix.h +++ b/src/Matrix.h @@ -107,6 +107,18 @@ template class Matrix { return out; } + /** @brief Transposed matrix */ + Matrix transposed() const { + Matrix 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]; }; diff --git a/src/Test/MatrixTest.cpp b/src/Test/MatrixTest.cpp index f19c3e303..aefcdab59 100644 --- a/src/Test/MatrixTest.cpp +++ b/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)); +} + }} diff --git a/src/Test/MatrixTest.h b/src/Test/MatrixTest.h index 7ef46f502..71058d001 100644 --- a/src/Test/MatrixTest.h +++ b/src/Test/MatrixTest.h @@ -29,6 +29,7 @@ class MatrixTest: public QObject { void copy(); void multiplyIdentity(); void multiply(); + void transposed(); }; }}