-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMatrix.h
83 lines (63 loc) · 1.82 KB
/
Matrix.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "Vector.h"
#ifndef MATRIX_H
#define MATRIX_H
namespace de300 {
template <class T> class Matrix {
public :
T a;
T b;
T c;
T d;
Matrix<T>(T aa, T ba, T ca, T da);
Matrix<T> operator+(const Matrix<T>& m);
Matrix<T> operator-(const Matrix<T>& m);
Matrix<T> operator*(const Matrix<T>& m);
Vector<T> operator*(const Vector<T>& m);
Matrix<T> operator*(T m);
Matrix<T> operator/(T d);
};
template <class T>
Matrix<T>::Matrix(T aa, T ba, T ca, T da) {
a = aa;
b = ba;
c = ca;
d = da;
}
template <class T>
Matrix<T> Matrix<T>::operator+(const Matrix<T>& m) {
Matrix result(m.a + a, m.b + b, m.c + c, m.d + d);
return result;
}
template <class T>
Matrix<T> Matrix<T>::operator-(const Matrix<T>& m) {
Matrix result(a - m.a, b - m.b, c - m.c, d - m.d);
return result;
}
template <class T>
Matrix<T> Matrix<T>::operator*(const Matrix<T>& m) {
Matrix<T> result(0,0,0,0);
result.a = a*m.a + b*m.c;
result.b = a*m.b + b*m.d;
result.c = c*m.a + d*m.c;
result.d = c*m.b + d*m.d;
return result;
}
template <class T>
Vector<T> Matrix<T>::operator*(const Vector<T>& m) {
Vector<T> result(0,0);
result.a = a*m.a + b*m.b;
result.b = c*m.a + d*m.b;
return result;
}
template <class T>
Matrix<T> Matrix<T>::operator*(T m) {
Matrix<T> result(a * m, b * m, c * m, d * m);
return result;
}
template <class T>
Matrix<T> Matrix<T>::operator/(T m) {
Matrix<T> result(a / m, b / m, c / m, d / m);
return result;
}
}
#endif