matrix3.h Source File

LibRPA: matrix3.h Source File
LibRPA
matrix3.h
1 //==========================================================
2 // AUTHOR: Lixin He, Mohan Chen
3 // LAST UPDATE : 2009-03-24 add operator == and !=
4 //==========================================================
5 #ifndef MatriX3_H
6 #define MatriX3_H
7 
8 #include "vector3.h"
9 
10 class Matrix3
11 {
12  /* data */
13 public:
14  // element eij:i_column,j_row
15  double e11, e12, e13, e21, e22, e23, e31, e32, e33;
16 
17  /* Constructors and destructor */
18  Matrix3(const double &r11 = 1,const double &r12 = 0,const double &r13 = 0,
19  const double &r21 = 0,const double &r22 = 1,const double &r23 = 0,
20  const double &r31 = 0,const double &r32 = 0,const double &r33 = 1);
21 
22  void Reset(void);
23  void Identity(void);
24  double Det(void) const ;
25  Matrix3 Transpose(void) const ;
26  Matrix3 Inverse(void) const ;
27 
28  Matrix3& operator=(const Matrix3 &m);
29  Matrix3& operator+=(const Matrix3 &m);
30  Matrix3& operator-=(const Matrix3 &m);
31  Matrix3& operator*=(const double &s);
32  Matrix3& operator/=(const double &s);
33 
34  void print(int width = 10)const;
35 };
36 
37 Matrix3 operator +(const Matrix3 &m1, const Matrix3 &m2); //m1+m2
38 Matrix3 operator -(const Matrix3 &m1, const Matrix3 &m2); //m1-m2
39 Matrix3 operator /(const Matrix3 &m,const double &s); //m/s
40 Matrix3 operator *(const Matrix3 &m1,const Matrix3 &m2); //m1*m2
41 Matrix3 operator *(const Matrix3 &m,const double &s); //m*s
42 Matrix3 operator *(double &s, const Matrix3 &m); //s*m
43 template<typename T> Vector3<double> operator *(const Matrix3 &m, const Vector3<T> &u); //m*u // Peize Lin change Vector3<T> 2017-01-10
44 template<typename T> Vector3<double> operator *(const Vector3<T> &u, const Matrix3 &m); //u*m // Peize Lin change Vector3<T> 2017-01-10
45 
46 bool operator ==(const Matrix3 &m1, const Matrix3 &m2); //whether m1 == m2
47 bool operator !=(const Matrix3 &m1, const Matrix3 &m2); //whethor m1 != m2
48 
49 
50 
51 
52 //m*u
53 template<typename T>
54 Vector3<double> operator *(const Matrix3 &m, const Vector3<T> &u)
55 {
56  return Vector3<double>(m.e11*u.x + m.e12*u.y + m.e13*u.z,
57  m.e21*u.x + m.e22*u.y + m.e23*u.z,
58  m.e31*u.x + m.e32*u.y + m.e33*u.z);
59 }
60 
61 //u*m
62 template<typename T>
63 Vector3<double> operator *(const Vector3<T> &u, const Matrix3 &m)
64 {
65  return Vector3<double>(u.x*m.e11 + u.y*m.e21 + u.z*m.e31,
66  u.x*m.e12 + u.y*m.e22 + u.z*m.e32,
67  u.x*m.e13 + u.y*m.e23 + u.z*m.e33);
68 }
69 
70 #endif // MATRIX3_H
71 
Definition: matrix3.h:11
Definition: vector3.h:18