Browse Source

Function for multiplying vector with matrix.

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

13
src/Matrix.h

@ -21,6 +21,7 @@
#include <cstring>
#include "Vector.h"
#include "constants.h"
namespace Magnum {
@ -114,6 +115,18 @@ template<class T, size_t size> class Matrix {
return out;
}
/** @brief Multiply vector operator */
Vector<T, size> operator*(const Vector<T, size>& other) const {
Vector<T, size> out;
for(size_t row = 0; row != size; ++row) {
for(size_t pos = 0; pos != size; ++pos)
out.add(row, at(pos, row)*other.at(pos));
}
return out;
}
/** @brief Transposed matrix */
Matrix<T, size> transposed() const {
Matrix<T, size> out;

18
src/Test/MatrixTest.cpp

@ -135,6 +135,24 @@ void MatrixTest::multiply() {
QVERIFY(is);
}
void MatrixTest::multiplyVector() {
int matrix[] = {
-3, -3, -1, 3, -5,
-1, -3, -5, 2, 3,
-1, -4, 3, -1, -2,
-5, -5, -1, -4, -1,
1, 3, -3, -4, -1
};
int vector[] = { 0, 5, 3, 4, 4 };
int expected[] = { -24, -35, -32, -25, 1 };
bool is = (Matrix<int, 5>(matrix)*Vector<int, 5>(vector) == Vector<int, 5>(expected));
QVERIFY(is);
}
void MatrixTest::transposed() {
float original[] = {
0.0f, 1.0f, 2.0f, 3.0f,

1
src/Test/MatrixTest.h

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

Loading…
Cancel
Save