Browse Source

Function for skipping given row and column from an matrix.

vectorfields
Vladimír Vondruš 16 years ago
parent
commit
252278c91d
  1. 13
      src/Math/Matrix.h
  2. 18
      src/Math/Test/MatrixTest.cpp
  3. 1
      src/Math/Test/MatrixTest.h

13
src/Math/Matrix.h

@ -143,6 +143,19 @@ template<class T, size_t size> class Matrix {
return out;
}
/** @brief Matrix without given row and column */
Matrix<T, size-1> ij(size_t skipRow, size_t skipCol) const {
Matrix<T, size-1> out(false);
for(size_t row = 0; row != size-1; ++row) {
for(size_t col = 0; col != size-1; ++col)
out.set(row, col, at(row + (row >= skipRow),
col + (col >= skipCol)));
}
return out;
}
private:
T _data[size*size];
};

18
src/Math/Test/MatrixTest.cpp

@ -24,6 +24,7 @@ QTEST_APPLESS_MAIN(Magnum::Math::Test::MatrixTest)
namespace Magnum { namespace Math { namespace Test {
typedef Matrix<float, 4> Matrix4;
typedef Matrix<float, 3> Matrix3;
void MatrixTest::constructIdentity() {
Matrix4 identity;
@ -171,4 +172,21 @@ void MatrixTest::transposed() {
QVERIFY(Matrix4(original).transposed() == Matrix4(transposed));
}
void MatrixTest::ij() {
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 skipped[] = {
0.0f, 1.0f, 3.0f,
8.0f, 9.0f, 11.0f,
12.0f, 13.0f, 15.0f
};
QVERIFY(Matrix4(original).ij(2, 1) == Matrix3(skipped));
}
}}}

1
src/Math/Test/MatrixTest.h

@ -31,6 +31,7 @@ class MatrixTest: public QObject {
void multiply();
void multiplyVector();
void transposed();
void ij();
};
}}}

Loading…
Cancel
Save