SmallMatrix4x4T.h
Go to the documentation of this file.
1 
7 #ifndef _MATRIX4D_PATTERNGENERATOR_JRL_
8 #define _MATRIX4D_PATTERNGENERATOR_JRL_
9 
10 namespace CD_Matrix
11 {
12 
14 template<typename T>
15 struct Matrix4x4T
16 {
18  T m[16];
19 
22  {
23  m[0] = 0.0;
24  m[1] = 0.0;
25  m[2] = 0.0;
26  m[3] = 0.0;
27  m[4] = 0.0;
28  m[5] = 0.0;
29  m[6] = 0.0;
30  m[7] = 0.0;
31  m[8] = 0.0;
32  m[9] = 0.0;
33  m[10] = 0.0;
34  m[11] = 0.0;
35  m[12] = 0.0;
36  m[13] = 0.0;
37  m[14] = 0.0;
38  m[15] = 0.0;
39  }
40 
42  Matrix4x4T<T>(const T x)
43  {
44  for(int i = 0; i < 16; m[i++] = x)
45  ;
46  }
47 
49  Matrix4x4T<T>(const struct Matrix4x4T<T> & v)
50  {
51  for(int i = 0; i < 16; i++) m[i] = v.m[i];
52  }
53 
55  template<typename T2>
56  Matrix4x4T<T>(const struct Matrix4x4T<T2> & v)
57  {
58  for(int i = 0; i < 16; i++) m[i] = v.m[i];
59  }
60 
62  inline T & operator[](unsigned int i)
63  {
64  return m[i];
65  }
66 
68  inline const T & operator[](unsigned int i) const
69  {
70  return m[i];
71  }
72 
74  inline T & operator()(unsigned int i, unsigned int j)
75  {
76  return m[4 * i + j];
77  }
78 
80  inline T operator()(unsigned int i, unsigned int j) const
81  {
82  return m[4 * i + j];
83  }
84 
86  inline void setZero(void)
87  {
88  for(int i = 0; i < 16; i++) m[i] = 0.0;
89  }
90 
92  void setIdentity(void)
93  {
94  setZero();
95  m[0] = m[5] = m[10] = m[15] = 1.0;
96  }
97 
100  {
101  Matrix4x4T<T> A;
102  A.m[0] = m[0] + B.m[0];
103  A.m[1] = m[1] + B.m[1];
104  A.m[2] = m[2] + B.m[2];
105  A.m[3] = m[3] + B.m[3];
106  A.m[4] = m[4] + B.m[4];
107  A.m[5] = m[5] + B.m[5];
108  A.m[6] = m[6] + B.m[6];
109  A.m[7] = m[7] + B.m[7];
110  A.m[8] = m[8] + B.m[8];
111  A.m[9] = m[9] + B.m[9];
112  A.m[10] = m[10] + B.m[10];
113  A.m[11] = m[11] + B.m[11];
114  A.m[12] = m[12] + B.m[12];
115  A.m[13] = m[13] + B.m[13];
116  A.m[14] = m[14] + B.m[14];
117  A.m[15] = m[15] + B.m[15];
118 
119  return A;
120  }
121 
123  struct Matrix4x4T<T> operator-(const struct Matrix4x4T<T> & B)
124  {
125  Matrix4x4T<T> A;
126  A.m[0] = m[0] - B.m[0];
127  A.m[1] = m[1] - B.m[1];
128  A.m[2] = m[2] - B.m[2];
129  A.m[3] = m[3] - B.m[3];
130  A.m[4] = m[4] - B.m[4];
131  A.m[5] = m[5] - B.m[5];
132  A.m[6] = m[6] - B.m[6];
133  A.m[7] = m[7] - B.m[7];
134  A.m[8] = m[8] - B.m[8];
135  A.m[9] = m[9] - B.m[9];
136  A.m[10] = m[10] - B.m[10];
137  A.m[11] = m[11] - B.m[11];
138  A.m[12] = m[12] - B.m[12];
139  A.m[13] = m[13] - B.m[13];
140  A.m[14] = m[14] - B.m[14];
141  A.m[15] = m[15] - B.m[15];
142  return A;
143  }
144 
147  operator*(const Matrix4x4T<T> & B) const
148  {
149  Matrix4x4T<T> A;
150  A.m[0] = m[0] * B.m[0] + m[1] * B.m[3] + m[2] * B.m[6];
151  A.m[0] = m[0] * B.m[0] + m[1] * B.m[4] + m[2] * B.m[8] + m[3] * B.m[12];
152  A.m[1] = m[0] * B.m[1] + m[1] * B.m[5] + m[2] * B.m[9] + m[3] * B.m[13];
153  A.m[2] = m[0] * B.m[2] + m[1] * B.m[6] + m[2] * B.m[10] + m[3] * B.m[14];
154  A.m[3] = m[0] * B.m[3] + m[1] * B.m[7] + m[2] * B.m[11] + m[3] * B.m[15];
155  A.m[4] = m[4] * B.m[0] + m[5] * B.m[4] + m[6] * B.m[8] + m[7] * B.m[12];
156  A.m[5] = m[4] * B.m[1] + m[5] * B.m[5] + m[6] * B.m[9] + m[7] * B.m[13];
157  A.m[6] = m[4] * B.m[2] + m[5] * B.m[6] + m[6] * B.m[10] + m[7] * B.m[14];
158  A.m[7] = m[4] * B.m[3] + m[5] * B.m[7] + m[6] * B.m[11] + m[7] * B.m[15];
159  A.m[8] = m[8] * B.m[0] + m[9] * B.m[4] + m[10] * B.m[8] + m[11] * B.m[12];
160  A.m[9] = m[8] * B.m[1] + m[9] * B.m[5] + m[10] * B.m[9] + m[11] * B.m[13];
161  A.m[10] = m[8] * B.m[2] + m[9] * B.m[6] + m[10] * B.m[10] + m[11] * B.m[14];
162  A.m[11] = m[8] * B.m[3] + m[9] * B.m[7] + m[10] * B.m[11] + m[11] * B.m[15];
163  A.m[12] = m[12] * B.m[0] + m[13] * B.m[4] + m[14] * B.m[8] + m[15] * B.m[12];
164  A.m[13] = m[12] * B.m[1] + m[13] * B.m[5] + m[14] * B.m[9] + m[15] * B.m[13];
165  A.m[14] = m[12] * B.m[2] + m[13] * B.m[6] + m[14] * B.m[10] + m[15] * B.m[14];
166  A.m[15] = m[12] * B.m[3] + m[13] * B.m[7] + m[14] * B.m[11] + m[15] * B.m[15];
167  return A;
168  }
169 
171  void CeqthismulB(const Matrix4x4T<T> & B, Matrix4x4T<T> & C) const
172  {
173  C.m[0] = m[0] * B.m[0] + m[1] * B.m[4] + m[2] * B.m[8] + m[3] * B.m[12];
174  C.m[1] = m[0] * B.m[1] + m[1] * B.m[5] + m[2] * B.m[9] + m[3] * B.m[13];
175  C.m[2] = m[0] * B.m[2] + m[1] * B.m[6] + m[2] * B.m[10] + m[3] * B.m[14];
176  C.m[3] = m[0] * B.m[3] + m[1] * B.m[7] + m[2] * B.m[11] + m[3] * B.m[15];
177  C.m[4] = m[4] * B.m[0] + m[5] * B.m[4] + m[6] * B.m[8] + m[7] * B.m[12];
178  C.m[5] = m[4] * B.m[1] + m[5] * B.m[5] + m[6] * B.m[9] + m[7] * B.m[13];
179  C.m[6] = m[4] * B.m[2] + m[5] * B.m[6] + m[6] * B.m[10] + m[7] * B.m[14];
180  C.m[7] = m[4] * B.m[3] + m[5] * B.m[7] + m[6] * B.m[11] + m[7] * B.m[15];
181  C.m[8] = m[8] * B.m[0] + m[9] * B.m[4] + m[10] * B.m[8] + m[11] * B.m[12];
182  C.m[9] = m[8] * B.m[1] + m[9] * B.m[5] + m[10] * B.m[9] + m[11] * B.m[13];
183  C.m[10] = m[8] * B.m[2] + m[9] * B.m[6] + m[10] * B.m[10] + m[11] * B.m[14];
184  C.m[11] = m[8] * B.m[3] + m[9] * B.m[7] + m[10] * B.m[11] + m[11] * B.m[15];
185  C.m[12] = m[12] * B.m[0] + m[13] * B.m[4] + m[14] * B.m[8] + m[15] * B.m[12];
186  C.m[13] = m[12] * B.m[1] + m[13] * B.m[5] + m[14] * B.m[9] + m[15] * B.m[13];
187  C.m[14] = m[12] * B.m[2] + m[13] * B.m[6] + m[14] * B.m[10] + m[15] * B.m[14];
188  C.m[15] = m[12] * B.m[3] + m[13] * B.m[7] + m[14] * B.m[11] + m[15] * B.m[15];
189  }
190 
192  void CeqthismulB(const Vector4T<T> & B, Vector4T<T> & C) const
193  {
194  C.m_x = m[0] * B.m_x + m[1] * B.m_y + m[2] * B.m_z + m[3] * B.m_w;
195  C.m_y = m[4] * B.m_x + m[5] * B.m_y + m[6] * B.m_z + m[7] * B.m_w;
196  C.m_z = m[8] * B.m_x + m[9] * B.m_y + m[10] * B.m_z + m[11] * B.m_w;
197  C.m_w = m[12] * B.m_x + m[13] * B.m_y + m[14] * B.m_z + m[15] * B.m_w;
198  }
199 
201  template<bool b>
203  {
204  Vector3T<T, b> C;
205  C.m_x = m[0] * B.m_x + m[1] * B.m_y + m[2] * B.m_z + m[3];
206  C.m_y = m[4] * B.m_x + m[5] * B.m_y + m[6] * B.m_z + m[7];
207  C.m_z = m[8] * B.m_x + m[9] * B.m_y + m[10] * B.m_z + m[11];
208  }
209 
211  Matrix4x4T<T> operator*(const double & r)
212  {
213  struct Matrix4x4T<T> result;
214  result.m[0] = m[0] * r;
215  result.m[1] = m[1] * r;
216  result.m[2] = m[2] * r;
217  result.m[3] = m[3] * r;
218  result.m[4] = m[4] * r;
219  result.m[5] = m[5] * r;
220  result.m[6] = m[6] * r;
221  result.m[7] = m[7] * r;
222  result.m[8] = m[8] * r;
223  result.m[9] = m[3] * r;
224  result.m[10] = m[10] * r;
225  result.m[11] = m[11] * r;
226  result.m[12] = m[12] * r;
227  result.m[13] = m[13] * r;
228  result.m[14] = m[14] * r;
229  result.m[15] = m[15] * r;
230  return result;
231  }
232 
235  {
236  struct Matrix4x4 A;
237  A.m[0] = m[0];
238  A.m[1] = m[4];
239  A.m[2] = m[8];
240  A.m[3] = m[12];
241  A.m[4] = m[1];
242  A.m[5] = m[5];
243  A.m[6] = m[9];
244  A.m[7] = m[13];
245  A.m[8] = m[2];
246  A.m[9] = m[6];
247  A.m[10] = m[10];
248  A.m[11] = m[14];
249  A.m[12] = m[3];
250  A.m[13] = m[7];
251  A.m[14] = m[11];
252  A.m[15] = m[15];
253  return A;
254  }
255 
258  {
259  T det = 1 / determinant();
260  A.m[0] = m[6] * m[11] * m[13] - m[7] * m[10] * m[13] + m[7] * m[9] * m[14] - m[5] * m[11] * m[14]
261  - m[6] * m[9] * m[15] + m[5] * m[10] * m[15];
262  A.m[1] = m[3] * m[10] * m[13] - m[2] * m[11] * m[13] - m[3] * m[9] * m[14] + m[1] * m[11] * m[14]
263  + m[2] * m[9] * m[15] - m[1] * m[10] * m[15];
264  A.m[2] = m[2] * m[7] * m[13] - m[3] * m[6] * m[13] + m[3] * m[5] * m[14] - m[1] * m[7] * m[14] - m[2] * m[5] * m[15]
265  + m[1] * m[6] * m[15];
266  A.m[3] = m[3] * m[6] * m[9] - m[2] * m[7] * m[9] - m[3] * m[5] * m[10] + m[1] * m[7] * m[10] + m[2] * m[5] * m[11]
267  - m[1] * m[6] * m[11];
268  A.m[4] = m[7] * m[10] * m[12] - m[6] * m[11] * m[12] - m[7] * m[8] * m[14] + m[4] * m[11] * m[14]
269  + m[6] * m[8] * m[15] - m[4] * m[10] * m[15];
270  A.m[5] = m[2] * m[11] * m[12] - m[3] * m[10] * m[12] + m[3] * m[8] * m[14] - m[0] * m[11] * m[14]
271  - m[2] * m[8] * m[15] + m[0] * m[10] * m[15];
272  A.m[6] = m[3] * m[6] * m[12] - m[2] * m[7] * m[12] - m[3] * m[4] * m[14] + m[0] * m[7] * m[14] + m[2] * m[4] * m[15]
273  - m[0] * m[6] * m[15];
274  A.m[7] = m[2] * m[7] * m[8] - m[3] * m[6] * m[8] + m[3] * m[4] * m[10] - m[0] * m[7] * m[10] - m[2] * m[4] * m[11]
275  + m[0] * m[6] * m[11];
276  A.m[8] = m[5] * m[11] * m[12] - m[7] * m[9] * m[12] + m[7] * m[8] * m[13] - m[4] * m[11] * m[13]
277  - m[5] * m[8] * m[15] + m[4] * m[9] * m[15];
278  A.m[9] = m[3] * m[9] * m[12] - m[1] * m[11] * m[12] - m[3] * m[8] * m[13] + m[0] * m[11] * m[13]
279  + m[1] * m[8] * m[15] - m[0] * m[9] * m[15];
280  A.m[10] = m[1] * m[7] * m[12] - m[3] * m[5] * m[12] + m[3] * m[4] * m[13] - m[0] * m[7] * m[13]
281  - m[1] * m[4] * m[15] + m[0] * m[5] * m[15];
282  A.m[11] = m[3] * m[5] * m[8] - m[1] * m[7] * m[8] - m[3] * m[4] * m[9] + m[0] * m[7] * m[9] + m[1] * m[4] * m[11]
283  - m[0] * m[5] * m[11];
284  A.m[12] = m[6] * m[9] * m[12] - m[5] * m[10] * m[12] - m[6] * m[8] * m[13] + m[4] * m[10] * m[13]
285  + m[5] * m[8] * m[14] - m[4] * m[9] * m[14];
286  A.m[13] = m[1] * m[10] * m[12] - m[2] * m[9] * m[12] + m[2] * m[8] * m[13] - m[0] * m[10] * m[13]
287  - m[1] * m[8] * m[14] + m[0] * m[9] * m[14];
288  A.m[14] = m[2] * m[5] * m[12] - m[1] * m[6] * m[12] - m[2] * m[4] * m[13] + m[0] * m[6] * m[13]
289  + m[1] * m[4] * m[14] - m[0] * m[5] * m[14];
290  A.m[15] = m[1] * m[6] * m[8] - m[2] * m[5] * m[8] + m[2] * m[4] * m[9] - m[0] * m[6] * m[9] - m[1] * m[4] * m[10]
291  + m[0] * m[5] * m[10];
292  }
293 
296  {
297  struct Matrix4x4 A;
298  T det = 1 / determinant();
299  m[0] = m[6] * m[11] * m[13] - m[7] * m[10] * m[13] + m[7] * m[9] * m[14] - m[5] * m[11] * m[14]
300  - m[6] * m[9] * m[15] + m[5] * m[10] * m[15];
301  m[1] = m[3] * m[10] * m[13] - m[2] * m[11] * m[13] - m[3] * m[9] * m[14] + m[1] * m[11] * m[14]
302  + m[2] * m[9] * m[15] - m[1] * m[10] * m[15];
303  m[2] = m[2] * m[7] * m[13] - m[3] * m[6] * m[13] + m[3] * m[5] * m[14] - m[1] * m[7] * m[14] - m[2] * m[5] * m[15]
304  + m[1] * m[6] * m[15];
305  m[3] = m[3] * m[6] * m[9] - m[2] * m[7] * m[9] - m[3] * m[5] * m[10] + m[1] * m[7] * m[10] + m[2] * m[5] * m[11]
306  - m[1] * m[6] * m[11];
307  m[4] = m[7] * m[10] * m[12] - m[6] * m[11] * m[12] - m[7] * m[8] * m[14] + m[4] * m[11] * m[14]
308  + m[6] * m[8] * m[15] - m[4] * m[10] * m[15];
309  m[5] = m[2] * m[11] * m[12] - m[3] * m[10] * m[12] + m[3] * m[8] * m[14] - m[0] * m[11] * m[14]
310  - m[2] * m[8] * m[15] + m[0] * m[10] * m[15];
311  m[6] = m[3] * m[6] * m[12] - m[2] * m[7] * m[12] - m[3] * m[4] * m[14] + m[0] * m[7] * m[14] + m[2] * m[4] * m[15]
312  - m[0] * m[6] * m[15];
313  m[7] = m[2] * m[7] * m[8] - m[3] * m[6] * m[8] + m[3] * m[4] * m[10] - m[0] * m[7] * m[10] - m[2] * m[4] * m[11]
314  + m[0] * m[6] * m[11];
315  m[8] = m[5] * m[11] * m[12] - m[7] * m[9] * m[12] + m[7] * m[8] * m[13] - m[4] * m[11] * m[13] - m[5] * m[8] * m[15]
316  + m[4] * m[9] * m[15];
317  m[9] = m[3] * m[9] * m[12] - m[1] * m[11] * m[12] - m[3] * m[8] * m[13] + m[0] * m[11] * m[13] + m[1] * m[8] * m[15]
318  - m[0] * m[9] * m[15];
319  m[10] = m[1] * m[7] * m[12] - m[3] * m[5] * m[12] + m[3] * m[4] * m[13] - m[0] * m[7] * m[13] - m[1] * m[4] * m[15]
320  + m[0] * m[5] * m[15];
321  m[11] = m[3] * m[5] * m[8] - m[1] * m[7] * m[8] - m[3] * m[4] * m[9] + m[0] * m[7] * m[9] + m[1] * m[4] * m[11]
322  - m[0] * m[5] * m[11];
323  m[12] = m[6] * m[9] * m[12] - m[5] * m[10] * m[12] - m[6] * m[8] * m[13] + m[4] * m[10] * m[13]
324  + m[5] * m[8] * m[14] - m[4] * m[9] * m[14];
325  m[13] = m[1] * m[10] * m[12] - m[2] * m[9] * m[12] + m[2] * m[8] * m[13] - m[0] * m[10] * m[13]
326  - m[1] * m[8] * m[14] + m[0] * m[9] * m[14];
327  m[14] = m[2] * m[5] * m[12] - m[1] * m[6] * m[12] - m[2] * m[4] * m[13] + m[0] * m[6] * m[13] + m[1] * m[4] * m[14]
328  - m[0] * m[5] * m[14];
329  m[15] = m[1] * m[6] * m[8] - m[2] * m[5] * m[8] + m[2] * m[4] * m[9] - m[0] * m[6] * m[9] - m[1] * m[4] * m[10]
330  + m[0] * m[5] * m[10];
331  return A;
332  }
333 
335  T determinant() const
336  {
337  return m[3] * m[6] * m[9] * m[12] - m[2] * m[7] * m[9] * m[12] - m[3] * m[5] * m[10] * m[12]
338  + m[1] * m[7] * m[10] * m[12] + m[2] * m[5] * m[11] * m[12] - m[1] * m[6] * m[11] * m[12]
339  - m[3] * m[6] * m[8] * m[13] + m[2] * m[7] * m[8] * m[13] + m[3] * m[4] * m[10] * m[13]
340  - m[0] * m[7] * m[10] * m[13] - m[2] * m[4] * m[11] * m[13] + m[0] * m[6] * m[11] * m[13]
341  + m[3] * m[5] * m[8] * m[14] - m[1] * m[7] * m[8] * m[14] - m[3] * m[4] * m[9] * m[14]
342  + m[0] * m[7] * m[9] * m[14] + m[1] * m[4] * m[11] * m[14] - m[0] * m[5] * m[11] * m[14]
343  - m[2] * m[5] * m[8] * m[15] + m[1] * m[6] * m[8] * m[15] + m[2] * m[4] * m[9] * m[15]
344  - m[0] * m[6] * m[9] * m[15] - m[1] * m[4] * m[10] * m[15] + m[0] * m[5] * m[10] * m[15];
345  }
346 
347  T trace() const
348  {
349  return m[0] + m[5] + m[10] + m[15];
350  }
351 
353  void operator+=(const Matrix3x3T<T> & B)
354  {
355  m[0] += B.m[0];
356  m[1] += B.m[1];
357  m[2] += B.m[2];
358  m[3] += B.m[3];
359  m[4] += B.m[4];
360  m[5] += B.m[5];
361  m[6] += B.m[6];
362  m[7] += B.m[7];
363  m[8] += B.m[8];
364  m[9] += B.m[0];
365  m[10] += B.m[10];
366  m[11] += B.m[11];
367  m[12] += B.m[12];
368  m[13] += B.m[13];
369  m[14] += B.m[14];
370  m[15] += B.m[15];
371  }
372 
374  void operator-=(const Matrix4x4T<T> & B)
375  {
376  m[0] -= B.m[0];
377  m[1] -= B.m[1];
378  m[2] -= B.m[2];
379  m[3] -= B.m[3];
380  m[4] -= B.m[4];
381  m[5] -= B.m[5];
382  m[6] -= B.m[6];
383  m[7] -= B.m[7];
384  m[8] -= B.m[8];
385  m[9] -= B.m[9];
386  m[10] -= B.m[10];
387  m[11] -= B.m[11];
388  m[12] -= B.m[12];
389  m[13] -= B.m[13];
390  m[14] -= B.m[14];
391  m[15] -= B.m[15];
392  }
393 
395  void operator*=(const Matrix4x4T<T> & B)
396  {
397  Matrix4x4T<T> temp(*this);
398  m[0] = temp.m[0] * B.m[0] + temp.m[1] * B.m[4] + temp.m[2] * B.m[8] + temp.m[3] * B.m[12];
399  m[1] = temp.m[0] * B.m[1] + temp.m[1] * B.m[5] + temp.m[2] * B.m[9] + temp.m[3] * B.m[13];
400  m[2] = temp.m[0] * B.m[2] + temp.m[1] * B.m[6] + temp.m[2] * B.m[10] + temp.m[3] * B.m[14];
401  m[3] = temp.m[0] * B.m[3] + temp.m[1] * B.m[7] + temp.m[2] * B.m[11] + temp.m[3] * B.m[15];
402  m[4] = temp.m[4] * B.m[0] + temp.m[5] * B.m[4] + temp.m[6] * B.m[8] + temp.m[7] * B.m[12];
403  m[5] = temp.m[4] * B.m[1] + temp.m[5] * B.m[5] + temp.m[6] * B.m[9] + temp.m[7] * B.m[13];
404  m[6] = temp.m[4] * B.m[2] + temp.m[5] * B.m[6] + temp.m[6] * B.m[10] + temp.m[7] * B.m[14];
405  m[7] = temp.m[4] * B.m[3] + temp.m[5] * B.m[7] + temp.m[6] * B.m[11] + temp.m[7] * B.m[15];
406  m[8] = temp.m[8] * B.m[0] + temp.m[9] * B.m[4] + temp.m[10] * B.m[8] + temp.m[11] * B.m[12];
407  m[9] = temp.m[8] * B.m[1] + temp.m[9] * B.m[5] + temp.m[10] * B.m[9] + temp.m[11] * B.m[13];
408  m[10] = temp.m[8] * B.m[2] + temp.m[9] * B.m[6] + temp.m[10] * B.m[10] + temp.m[11] * B.m[14];
409  m[11] = temp.m[8] * B.m[3] + temp.m[9] * B.m[7] + temp.m[10] * B.m[11] + temp.m[11] * B.m[15];
410  m[12] = temp.m[12] * B.m[0] + temp.m[13] * B.m[4] + temp.m[14] * B.m[8] + temp.m[15] * B.m[12];
411  m[13] = temp.m[12] * B.m[1] + temp.m[13] * B.m[5] + temp.m[14] * B.m[9] + temp.m[15] * B.m[13];
412  m[14] = temp.m[12] * B.m[2] + temp.m[13] * B.m[6] + temp.m[14] * B.m[10] + temp.m[15] * B.m[14];
413  m[15] = temp.m[12] * B.m[3] + temp.m[13] * B.m[7] + temp.m[14] * B.m[11] + temp.m[15] * B.m[15];
414  }
415 
416  inline friend std::ostream & operator<<(std::ostream & os, Matrix4x4T<T> const & A)
417  {
418  for(int i = 0; i < 4; i++)
419  {
420  for(int j = 0; j < 4; j++) os << A.m[i * 4 + j] << " ";
421  os << std::endl;
422  }
423  return os;
424  }
425 };
426 } // namespace CD_Matrix
427 
428 #endif
CD_Matrix::Matrix4x4T::setZero
void setZero(void)
Definition: SmallMatrix4x4T.h:86
CD_Matrix::Vector4T::m_z
T m_z
Definition: SmallVector4T.h:22
CD_Matrix::Matrix4x4T::operator+=
void operator+=(const Matrix3x3T< T > &B)
Definition: SmallMatrix4x4T.h:353
CD_Matrix::Matrix4x4T::operator<<
friend std::ostream & operator<<(std::ostream &os, Matrix4x4T< T > const &A)
Definition: SmallMatrix4x4T.h:416
CD_Matrix::Vector3T::m_z
T m_z
Definition: SmallVector3T.h:72
CD_Matrix::Matrix4x4T::operator[]
const T & operator[](unsigned int i) const
Definition: SmallMatrix4x4T.h:68
CD_Matrix::Matrix4x4T::operator*=
void operator*=(const Matrix4x4T< T > &B)
Local matrix multiplication.
Definition: SmallMatrix4x4T.h:395
CD_Matrix::Vector3T::m_x
T m_x
Definition: SmallVector3T.h:72
CD_Matrix::Vector4T::m_y
T m_y
Definition: SmallVector4T.h:22
CD_Matrix::Matrix4x4T::operator*
Vector3T< T, b > operator*(const Vector3T< T, b > &B) const
Definition: SmallMatrix4x4T.h:202
CD_Matrix::Matrix4x4T::CeqthismulB
void CeqthismulB(const Matrix4x4T< T > &B, Matrix4x4T< T > &C) const
Definition: SmallMatrix4x4T.h:171
CD_Matrix::Matrix4x4T::operator-=
void operator-=(const Matrix4x4T< T > &B)
Definition: SmallMatrix4x4T.h:374
CD_Matrix::Matrix4x4T::Inversion
Matrix4x4T< T > Inversion()
Definition: SmallMatrix4x4T.h:295
CD_Matrix::Vector4T
Template to handle 3 dimensional vector.
Definition: SmallVector4T.h:19
CD_Matrix::Matrix4x4T::Transpose
Matrix4x4T< T > Transpose()
Definition: SmallMatrix4x4T.h:234
CD_Matrix::Matrix3x3T::m
T m[9]
Definition: SmallMatrix3x3T.h:24
CD_Matrix::Matrix4x4T::operator()
T & operator()(unsigned int i, unsigned int j)
Definition: SmallMatrix4x4T.h:74
CD_Matrix::Matrix4x4T::m
T m[16]
Definition: SmallMatrix4x4T.h:18
CD_Matrix::Matrix4x4T
Definition: SmallMatrix4x4T.h:15
CD_Matrix::Matrix4x4T::operator*
Matrix4x4T< T > operator*(const Matrix4x4T< T > &B) const
Definition: SmallMatrix4x4T.h:147
CD_Matrix::Matrix4x4T::operator[]
T & operator[](unsigned int i)
Definition: SmallMatrix4x4T.h:62
CD_Matrix::Vector3T::m_y
T m_y
Definition: SmallVector3T.h:72
CD_Matrix::Matrix4x4T::operator+
Matrix4x4T< T > operator+(const Matrix4x4T< T > &B)
Definition: SmallMatrix4x4T.h:99
CD_Matrix::Vector4T::m_w
T m_w
Definition: SmallVector4T.h:22
CD_Matrix::Matrix4x4T::setIdentity
void setIdentity(void)
Definition: SmallMatrix4x4T.h:92
CD_Matrix::Matrix4x4T::CeqthismulB
void CeqthismulB(const Vector4T< T > &B, Vector4T< T > &C) const
Definition: SmallMatrix4x4T.h:192
sch::Matrix4x4
CD_Matrix::Matrix4x4T< Scalar > Matrix4x4
Definition: SCH_Types.h:29
CD_Matrix::Vector4T::m_x
T m_x
Definition: SmallVector4T.h:22
CD_Matrix
Definition: QuaternionT.h:6
CD_Matrix::Matrix4x4T::determinant
T determinant() const
Definition: SmallMatrix4x4T.h:335
CD_Matrix::Matrix4x4T::operator*
Matrix4x4T< T > operator*(const double &r)
Definition: SmallMatrix4x4T.h:211
CD_Matrix::Matrix4x4T::operator()
T operator()(unsigned int i, unsigned int j) const
Definition: SmallMatrix4x4T.h:80
CD_Matrix::Vector3T
Definition: SmallMatrix3x3T.h:14
CD_Matrix::Matrix3x3T
Definition: SmallMatrix3x3T.h:20
CD_Matrix::Matrix4x4T::trace
T trace() const
Definition: SmallMatrix4x4T.h:347
CD_Matrix::Matrix4x4T::Inversion
void Inversion(Matrix4x4T &A)
Definition: SmallMatrix4x4T.h:257