ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Mat3x3d.hpp
Revision: 1268
Committed: Fri Jun 11 17:16:21 2004 UTC (20 years ago) by tim
File size: 5895 byte(s)
Log Message:
roll in progress

File Contents

# Content
1 #ifndef _Mat3x3dD_H_
2 #define _Mat3x3dD_H_
3
4 // class introduction in Mat3x3d.cpp
5
6 class Vector3d;
7 class Quaternion;
8 class Euler3;
9
10
11 class Mat3x3d{
12 public:
13 double element[3][3];
14 //enum {Axx = 0, Axy = 1, Axz = 2, Ayx =3, Ayy =4, Ayz = 5, Azx = 6, Azy =7, Azz = 8};
15 public:
16 Mat3x3d(){
17 element[0][0] = 0.0;
18 element[0][1] = 0.0;
19 element[0][2] = 0.0;
20
21 element[1][0] = 0.0;
22 element[1][1] = 0.0;
23 element[1][2] = 0.0;
24
25 element[2][0] = 0.0;
26 element[2][1] = 0.0;
27 element[2][2] = 0.0;
28 }
29
30 Mat3x3d(double s){
31 element[0][0] = s;
32 element[0][1] = 0.0;
33 element[0][2] = 0.0;
34
35 element[1][0] = 0.0;
36 element[1][1] = s;
37 element[1][2] = 0.0;
38
39 element[2][0] = 0.0;
40 element[2][1] = 0.0;
41 element[2][2] = s;
42 }
43
44 Mat3x3d(double d[3][3]){
45 element[0][0] = d[0][0];
46 element[0][1] = d[0][1];
47 element[0][2] = d[0][2];
48
49 element[1][0] = d[1][0];
50 element[1][1] = d[1][1];
51 element[1][2] = d[1][2];
52
53 element[2][0] = d[2][0];
54 element[2][1] = d[2][1];
55 element[2][2] = d[2][2];
56 }
57
58 Mat3x3d(const Vector3d& v1, const Vector3d& v2, const Vector3d& v3);
59
60 Mat3x3d(const Quaternion& q);
61
62 Mat3x3d(const Euler3& e);
63
64 void getArray(double *m){
65 m[0] = element[0][0];
66 m[1] = element[0][1];
67 m[2] = element[0][2];
68
69 m[3] = element[1][0];
70 m[4] = element[1][1];
71 m[5] = element[1][2];
72
73 m[6] = element[2][0];
74 m[7] = element[2][1];
75 m[8] = element[2][2];
76 }
77
78 void operator +=(const Mat3x3d& m){
79 element[0][0] += m.element[0][0];
80 element[0][1] += m.element[0][1];
81 element[0][2] += m.element[0][2];
82
83 element[1][0] += m.element[1][0];
84 element[1][1] += m.element[1][1];
85 element[1][2] += m.element[1][2];
86
87 element[2][0] += m.element[2][0];
88 element[2][1] += m.element[2][1];
89 element[2][2] += m.element[2][2];
90 }
91
92 void operator -=(const Mat3x3d& m){
93 element[0][0] -= m.element[0][0];
94 element[0][1] -= m.element[0][1];
95 element[0][2] -= m.element[0][2];
96
97 element[1][0] -= m.element[1][0];
98 element[1][1] -= m.element[1][1];
99 element[1][2] -= m.element[1][2];
100
101 element[2][0] -= m.element[2][0];
102 element[2][1] -= m.element[2][1];
103 element[2][2] -= m.element[2][2];
104 }
105
106 void operator *=(const Mat3x3d& m){
107 Mat3x3d temp(*this);
108
109 for(unsigned int i = 0; i < 3; i++)
110 for(unsigned int j = 0; j < 3 ; j++)
111 element[i][j] = temp.element[i][0] * m.element[0][j] +
112 temp.element[i][1] * m.element[1][j] +
113 temp.element[i][2] * m.element[2][j];
114 }
115
116 void operator *=(const double r){
117 element[0][0] *=r;
118 element[0][1] *=r;
119 element[0][2] *=r;
120
121 element[1][0] *=r;
122 element[1][1] *=r;
123 element[1][2] *=r;
124
125 element[2][0] *=r;
126 element[2][1] *=r;
127 element[2][2] *=r;
128 }
129
130 void operator /=(const double r){
131 element[0][0] /=r;
132 element[0][1] /=r;
133 element[0][2] /=r;
134
135 element[1][0] /=r;
136 element[1][1] /=r;
137 element[1][2] /=r;
138
139 element[2][0] /=r;
140 element[2][1] /=r;
141 element[2][2] /=r;
142 }
143
144 friend Mat3x3d operator+(const Mat3x3d& m1, const Mat3x3d& m2){
145 Mat3x3d result;
146
147 result.element[0][0] = m1.element[0][0] + m2.element[0][0];
148 result.element[0][1] = m1.element[0][1] + m2.element[0][1];
149 result.element[0][2] = m1.element[0][2] + m2.element[0][2];
150
151 result.element[1][0] = m1.element[1][0] + m2.element[1][0];
152 result.element[1][1] = m1.element[1][1] + m2.element[1][1];
153 result.element[1][2] = m1.element[1][2] + m2.element[1][2];
154
155 result.element[2][0] = m1.element[2][0] + m2.element[2][0];
156 result.element[2][1] = m1.element[2][1] + m2.element[2][1];
157 result.element[2][2] = m1.element[2][2] + m2.element[2][2];
158
159 return result;
160 }
161
162 friend Mat3x3d operator-(const Mat3x3d& m1, const Mat3x3d& m2){
163 Mat3x3d result;
164
165 result.element[0][0] = m1.element[0][0] - m2.element[0][0];
166 result.element[0][1] = m1.element[0][1] - m2.element[0][1];
167 result.element[0][2] = m1.element[0][2] - m2.element[0][2];
168
169 result.element[1][0] = m1.element[1][0] - m2.element[1][0];
170 result.element[1][1] = m1.element[1][1] - m2.element[1][1];
171 result.element[1][2] = m1.element[1][2] - m2.element[1][2];
172
173 result.element[2][0] = m1.element[2][0] - m2.element[2][0];
174 result.element[2][1] = m1.element[2][1] - m2.element[2][1];
175 result.element[2][2] = m1.element[2][2] - m2.element[2][2];
176
177 return result;
178 }
179
180 friend Mat3x3d operator*(const Mat3x3d& m1, const Mat3x3d& m2){
181 Mat3x3d result;
182
183 for(unsigned int i = 0; i < 3; i++)
184 for(unsigned int j = 0; j < 3 ; j++)
185 result.element[i][j] = m1.element[i][0] * m2.element[0][j] +
186 m1.element[i][1] * m2.element[1][j] +
187 m1.element[i][2] * m2.element[2][j];
188 return result;
189 }
190
191 friend Vector3d operator*(const Mat3x3d& m, const Vector3d& v);
192
193 Mat3x3d inverse() const;
194
195 Mat3x3d transpose() const;
196
197 double det() const;
198
199 double trace() const {return element[0][0] + element[1][1] + element[2][2];}
200
201 //the last three will be deprecated in the next version
202 void diagonalize(Vector3d& v, Mat3x3d& m);
203 void diagonalize(Vector3d& v, double m[3][3]);
204 void diagonalize(double v[3], Mat3x3d& m);
205 void diagonalize(double v[3], double m[3][3]);
206
207 Quaternion toQuaternion();
208 Euler3 toEuler();
209
210 //bool isRotationMatrix();
211
212 //bool isSymmetric(void) const;
213
214 };
215
216 #endif //end ifndef _Mat3x3dD_H_

Properties

Name Value
svn:executable *