Browse Source

Functions for getting/setting particular matrix column.

vectorfields
Vladimír Vondruš 16 years ago
parent
commit
a1fc2de3a9
  1. 10
      src/Math/Matrix.h
  2. 7
      src/Math/Test/MatrixTest.cpp

10
src/Math/Matrix.h

@ -80,11 +80,21 @@ template<class T, size_t size> class Matrix {
return _data[col*size+row];
}
/** @brief Matrix column */
inline Vector<T, size> at(size_t col) const {
return _data+col*size;
}
/** @brief Set value at given position */
inline void set(size_t row, size_t col, T value) {
_data[col*size+row] = value;
}
/** @brief Set matrix column */
inline void set(size_t col, const Vector<T, size>& value) {
memcpy(_data+col*size, value.data(), size*sizeof(T));
}
/** @brief Add value to given position */
inline void add(size_t row, size_t col, T value) {
_data[col*size+row] += value;

7
src/Math/Test/MatrixTest.cpp

@ -25,6 +25,7 @@ namespace Magnum { namespace Math { namespace Test {
typedef Matrix<float, 4> Matrix4;
typedef Matrix<float, 3> Matrix3;
typedef Vector<float, 4> Vector4;
void MatrixTest::constructIdentity() {
Matrix4 identity;
@ -55,18 +56,22 @@ void MatrixTest::constructZero() {
void MatrixTest::data() {
Matrix4 m(false);
float vector[] = { 4.0f, 5.0f, 6.0f, 7.0f };
m.set(3, vector);
m.set(1, 2, 1.0f);
m.set(2, 1, 1.0f);
m.add(2, 1, 0.5f);
QVERIFY(m.at(1, 2) == 1.0f);
QVERIFY(m.at(3) == vector);
float expected[] = {
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.5f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f
4.0f, 5.0f, 6.0f, 7.0f
};
QVERIFY(m == Matrix4(expected));

Loading…
Cancel
Save