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

# User Rev Content
1 tim 1254 #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 tim 1268
191     friend Vector3d operator*(const Mat3x3d& m, const Vector3d& v);
192 tim 1254
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 *