Jpp test-rotations-old
the software that should make you happy
Loading...
Searching...
No Matches
JMATH::JMatrix5S Class Reference

5 x 5 symmetric matrix More...

#include <JMatrix5S.hh>

Inheritance diagram for JMATH::JMatrix5S:
JMATH::JMatrix5D JMATH::JMath< JMatrix5D > JLANG::JEquals< JFirst_t, JSecond_t >

Public Member Functions

 JMatrix5S ()
 Default constructor.
 
 JMatrix5S (const JMatrix5D &A)
 Contructor.
 
 JMatrix5S (const double __a00, const double __a10, const double __a11, const double __a20, const double __a21, const double __a22, const double __a30, const double __a31, const double __a32, const double __a33, const double __a40, const double __a41, const double __a42, const double __a43, const double __a44)
 Contructor.
 
void invert ()
 Invert matrix.
 
JMatrix5DsetIdentity ()
 Set to identity matrix.
 
void set (const JMatrix5D &A)
 Set matrix.
 
JMatrix5Dreset ()
 Set matrix to the null matrix.
 
JMatrix5Dtranspose ()
 Transpose.
 
JMatrix5Dnegate ()
 Negate matrix.
 
JMatrix5Dadd (const JMatrix5D &A)
 Matrix addition.
 
JMatrix5Dsub (const JMatrix5D &A)
 Matrix subtraction.
 
JMatrix5Dmul (const double factor)
 Scale matrix.
 
const JMatrix5Dmul (const JMatrix5D &A, const JMatrix5D &B)
 Matrix multiplication.
 
JMatrix5Dmul (const JSecond_t &object)
 Multiply with object.
 
JMatrix5Ddiv (const double factor)
 Scale matrix.
 
bool equals (const JMatrix5D &A, const double eps=std::numeric_limits< double >::min()) const
 Equality.
 
bool isIdentity (const double eps=std::numeric_limits< double >::min()) const
 Test identity.
 
double getDeterminant () const
 Get determinant of matrix.
 
void transform (double &__x0, double &__x1, double &__x2, double &__x3, double &__x4) const
 Transform.
 
double operator() (int row, int col) const
 Get matrix element.
 
double & operator() (int row, int col)
 Get matrix element.
 

Static Public Member Functions

static const JMatrix5DgetInstance ()
 Get reference to unique instance of this class object.
 
static const JMatrix5DgetIdentity ()
 Get reference to unique instance of this class object.
 

Public Attributes

double a00
 
double a01
 
double a02
 
double a03
 
double a04
 
double a10
 
double a11
 
double a12
 
double a13
 
double a14
 
double a20
 
double a21
 
double a22
 
double a23
 
double a24
 
double a30
 
double a31
 
double a32
 
double a33
 
double a34
 
double a40
 
double a41
 
double a42
 
double a43
 
double a44
 

Static Public Attributes

static const int NUMBER_OF_DIMENSIONS = 5
 

Detailed Description

5 x 5 symmetric matrix

Definition at line 26 of file JMatrix5S.hh.

Constructor & Destructor Documentation

◆ JMatrix5S() [1/3]

JMATH::JMatrix5S::JMatrix5S ( )
inline

Default constructor.

Definition at line 33 of file JMatrix5S.hh.

33 :
34 JMatrix5D()
35 {}
JMatrix5D()
Default constructor.
Definition JMatrix5D.hh:45

◆ JMatrix5S() [2/3]

JMATH::JMatrix5S::JMatrix5S ( const JMatrix5D & A)
inline

Contructor.

Parameters
Amatrix

Definition at line 43 of file JMatrix5S.hh.

43 :
44 JMatrix5D(A)
45 {}

◆ JMatrix5S() [3/3]

JMATH::JMatrix5S::JMatrix5S ( const double __a00,
const double __a10,
const double __a11,
const double __a20,
const double __a21,
const double __a22,
const double __a30,
const double __a31,
const double __a32,
const double __a33,
const double __a40,
const double __a41,
const double __a42,
const double __a43,
const double __a44 )
inline

Contructor.


The upper triangle is internally set.

Parameters
__a00(0,0)
__a10(1,0)
__a11(1,1)
__a20(2,0)
__a21(2,1)
__a22(2,2)
__a30(3,0)
__a31(3,1)
__a32(3,2)
__a33(3,3)
__a40(4,0)
__a41(4,1)
__a42(4,2)
__a43(4,3)
__a44(4,4)

Definition at line 68 of file JMatrix5S.hh.

72 :
73 JMatrix5D(__a00, __a10, __a20, __a30, __a40,
74 __a10, __a11, __a21, __a31, __a41,
75 __a20, __a21, __a22, __a32, __a42,
76 __a30, __a31, __a32, __a33, __a43,
77 __a40, __a41, __a42, __a43, __a44)
78 {}

Member Function Documentation

◆ invert()

void JMATH::JMatrix5S::invert ( )
inline

Invert matrix.

Definition at line 84 of file JMatrix5S.hh.

85 {
86 using std::swap;
87
88 if (isIdentity()) {
89 return;
90 }
91
92 // LDU decomposition
93
94 int p0 = 0; // permute row 0
95 int p1 = 0; // permute row 1
96 int p2 = 0; // permute row 2
97 int p3 = 0; // permute row 3
98
99 double val;
100
101 val = a00;
102
103 if (fabs(a10) > fabs(val)) {
104 p0 = 1;
105 val = a10;
106 }
107
108 if (fabs(a20) > fabs(val)) {
109 p0 = 2;
110 val = a20;
111 }
112
113 if (fabs(a30) > fabs(val)) {
114 p0 = 3;
115 val = a30;
116 }
117
118 if (fabs(a40) > fabs(val)) {
119 p0 = 4;
120 val = a40;
121 }
122
123 switch (p0) {
124
125 case 1:
126 swap(a00,a10);
127 swap(a01,a11);
128 swap(a02,a12);
129 swap(a03,a13);
130 swap(a04,a14);
131 break;
132
133 case 2:
134 swap(a00,a20);
135 swap(a01,a21);
136 swap(a02,a22);
137 swap(a03,a23);
138 swap(a04,a24);
139 break;
140
141 case 3:
142 swap(a00,a30);
143 swap(a01,a31);
144 swap(a02,a32);
145 swap(a03,a33);
146 swap(a04,a34);
147 break;
148
149 case 4:
150 swap(a00,a40);
151 swap(a01,a41);
152 swap(a02,a42);
153 swap(a03,a43);
154 swap(a04,a44);
155 break;
156 }
157
158 if (val == 0) {
159 throw JDivisionByZero("LDU decomposition zero pivot");
160 }
161
162 a10 /= val;
163 a11 -= a10 * a01;
164 a12 -= a10 * a02;
165 a13 -= a10 * a03;
166 a14 -= a10 * a04;
167
168 a20 /= val;
169 a21 -= a20 * a01;
170 a22 -= a20 * a02;
171 a23 -= a20 * a03;
172 a24 -= a20 * a04;
173
174 a30 /= val;
175 a31 -= a30 * a01;
176 a32 -= a30 * a02;
177 a33 -= a30 * a03;
178 a34 -= a30 * a04;
179
180 a40 /= val;
181 a41 -= a40 * a01;
182 a42 -= a40 * a02;
183 a43 -= a40 * a03;
184 a44 -= a40 * a04;
185
186 val = a11;
187
188 if (fabs(a21) > fabs(val)) {
189 p1 = 2;
190 val = a21;
191 }
192
193 if (fabs(a31) > fabs(val)) {
194 p1 = 3;
195 val = a31;
196 }
197
198 if (fabs(a41) > fabs(val)) {
199 p1 = 4;
200 val = a41;
201 }
202
203 switch (p1) {
204
205 case 2:
206 swap(a10,a20);
207 swap(a11,a21);
208 swap(a12,a22);
209 swap(a13,a23);
210 swap(a14,a24);
211 break;
212
213 case 3:
214 swap(a10,a30);
215 swap(a11,a31);
216 swap(a12,a32);
217 swap(a13,a33);
218 swap(a14,a34);
219 break;
220
221 case 4:
222 swap(a10,a40);
223 swap(a11,a41);
224 swap(a12,a42);
225 swap(a13,a43);
226 swap(a14,a44);
227 break;
228 }
229
230 if (val == 0) {
231 throw JDivisionByZero("LDU decomposition zero pivot");
232 }
233
234 a21 /= val;
235 a22 -= a21 * a12;
236 a23 -= a21 * a13;
237 a24 -= a21 * a14;
238
239 a31 /= val;
240 a32 -= a31 * a12;
241 a33 -= a31 * a13;
242 a34 -= a31 * a14;
243
244 a41 /= val;
245 a42 -= a41 * a12;
246 a43 -= a41 * a13;
247 a44 -= a41 * a14;
248
249 val = a22;
250
251 if (fabs(a32) > fabs(val)) {
252 p2 = 3;
253 val = a32;
254 }
255
256 if (fabs(a42) > fabs(val)) {
257 p2 = 4;
258 val = a42;
259 }
260
261 switch (p2) {
262
263 case 3:
264 swap(a20,a30);
265 swap(a21,a31);
266 swap(a22,a32);
267 swap(a23,a33);
268 swap(a24,a34);
269 break;
270
271 case 4:
272 swap(a20,a40);
273 swap(a21,a41);
274 swap(a22,a42);
275 swap(a23,a43);
276 swap(a24,a44);
277 break;
278 }
279
280 if (val == 0) {
281 throw JDivisionByZero("LDU decomposition zero pivot");
282 }
283
284 a32 /= val;
285 a33 -= a32 * a23;
286 a34 -= a32 * a24;
287
288 a42 /= val;
289 a43 -= a42 * a23;
290 a44 -= a42 * a24;
291
292 val = a33;
293
294 if (fabs(a43) > fabs(val)) {
295 p3 = 4;
296 val = a43;
297 }
298
299 switch (p3) {
300
301 case 4:
302 swap(a30,a40);
303 swap(a31,a41);
304 swap(a32,a42);
305 swap(a33,a43);
306 swap(a34,a44);
307 break;
308 }
309
310 if (val == 0) {
311 throw JDivisionByZero("LDU decomposition zero pivot");
312 }
313
314 a43 /= val;
315 a44 -= a43 * a34;
316
317 // invert D
318
319 if (a44 == 0) {
320 throw JDivisionByZero("D matrix not invertable");
321 }
322
323 a00 = 1.0 / a00;
324 a11 = 1.0 / a11;
325 a22 = 1.0 / a22;
326 a33 = 1.0 / a33;
327 a44 = 1.0 / a44;
328
329 // invert U
330
331 a01 *= -a00;
332 a01 *= a11;
333
334 a02 *= -a00;
335 a02 -= a01 * a12;
336 a02 *= a22;
337
338 a03 *= -a00;
339 a03 -= a01 * a13;
340 a03 -= a02 * a23;
341 a03 *= a33;
342
343 a04 *= -a00;
344 a04 -= a01 * a14;
345 a04 -= a02 * a24;
346 a04 -= a03 * a34;
347 a04 *= a44;
348
349 a12 *= -a11;
350 a12 *= a22;
351
352 a13 *= -a11;
353 a13 -= a12 * a23;
354 a13 *= a33;
355
356 a14 *= -a11;
357 a14 -= a12 * a24;
358 a14 -= a13 * a34;
359 a14 *= a44;
360
361 a23 *= -a22;
362 a23 *= a33;
363
364 a24 *= -a22;
365 a24 -= a23 * a34;
366 a24 *= a44;
367
368 a34 *= -a33;
369 a34 *= a44;
370
371 // invert L
372
373 a43 = -a43;
374
375 a42 = -a42;
376 a42 -= a43 * a32;
377
378 a41 = -a41;
379 a41 -= a42 * a21;
380 a41 -= a43 * a31;
381
382 a40 = -a40;
383 a40 -= a41 * a10;
384 a40 -= a42 * a20;
385 a40 -= a43 * a30;
386
387 a32 = -a32;
388
389 a31 = -a31;
390 a31 -= a32 * a21;
391
392 a30 = -a30;
393 a30 -= a31 * a10;
394 a30 -= a32 * a20;
395
396 a21 = -a21;
397 a20 = -a20;
398 a20 -= a21 * a10;
399 a10 = -a10;
400
401 // U^-1 x L^-1
402
403 a00 += a01 * a10 + a02 * a20 + a03 * a30 + a04 * a40;
404 a01 += a02 * a21 + a03 * a31 + a04 * a41;
405 a02 += a03 * a32 + a04 * a42;
406 a03 += a04 * a43;
407
408 a10 *= a11;
409 a10 += a12 * a20 + a13 * a30 + a14 * a40;
410 a11 += a12 * a21 + a13 * a31 + a14 * a41;
411 a12 += a13 * a32 + a14 * a42;
412 a13 += a14 * a43;
413
414 a20 *= a22;
415 a20 += a23 * a30 + a24 * a40;
416 a21 *= a22;
417 a21 += a23 * a31 + a24 * a41;
418 a22 += a23 * a32 + a24 * a42;
419 a23 += a24 * a43;
420
421 a30 *= a33;
422 a30 += a34 * a40;
423 a31 *= a33;
424 a31 += a34 * a41;
425 a32 *= a33;
426 a32 += a34 * a42;
427 a33 += a34 * a43;
428
429 a40 *= a44;
430 a41 *= a44;
431 a42 *= a44;
432 a43 *= a44;
433
434 switch (p3) {
435
436 case 4:
437 swap(a03,a04);
438 swap(a13,a14);
439 swap(a23,a24);
440 swap(a33,a34);
441 swap(a43,a44);
442 break;
443 }
444
445 switch (p2) {
446
447 case 3:
448 swap(a02,a03);
449 swap(a12,a13);
450 swap(a22,a23);
451 swap(a32,a33);
452 swap(a42,a43);
453 break;
454
455 case 4:
456 swap(a02,a04);
457 swap(a12,a14);
458 swap(a22,a24);
459 swap(a32,a34);
460 swap(a42,a44);
461 break;
462 }
463
464 switch (p1) {
465
466 case 2:
467 swap(a01,a02);
468 swap(a11,a12);
469 swap(a21,a22);
470 swap(a31,a32);
471 swap(a41,a42);
472 break;
473
474 case 3:
475 swap(a01,a03);
476 swap(a11,a13);
477 swap(a21,a23);
478 swap(a31,a33);
479 swap(a41,a43);
480 break;
481
482 case 4:
483 swap(a01,a04);
484 swap(a11,a14);
485 swap(a21,a24);
486 swap(a31,a34);
487 swap(a41,a44);
488 break;
489 }
490
491 switch (p0) {
492
493 case 1:
494 swap(a00,a01);
495 swap(a10,a11);
496 swap(a20,a21);
497 swap(a30,a31);
498 swap(a40,a41);
499 break;
500
501 case 2:
502 swap(a00,a02);
503 swap(a10,a12);
504 swap(a20,a22);
505 swap(a30,a32);
506 swap(a40,a42);
507 break;
508
509 case 3:
510 swap(a00,a03);
511 swap(a10,a13);
512 swap(a20,a23);
513 swap(a30,a33);
514 swap(a40,a43);
515 break;
516
517 case 4:
518 swap(a00,a04);
519 swap(a10,a14);
520 swap(a20,a24);
521 swap(a30,a34);
522 swap(a40,a44);
523 break;
524 }
525 }
TPaveText * p1
bool isIdentity(const double eps=std::numeric_limits< double >::min()) const
Test identity.
Definition JMatrix5D.hh:364

◆ getInstance()

static const JMatrix5D & JMATH::JMatrix5D::getInstance ( )
inlinestaticinherited

Get reference to unique instance of this class object.

Returns
zero matrix

Definition at line 101 of file JMatrix5D.hh.

102 {
103 static JMatrix5D matrix;
104
105 return matrix;
106 }

◆ setIdentity()

JMatrix5D & JMATH::JMatrix5D::setIdentity ( )
inlineinherited

Set to identity matrix.

Returns
this matrix

Definition at line 114 of file JMatrix5D.hh.

115 {
116 a00 = 1.0; a01 = 0.0; a02 = 0.0; a03 = 0.0; a04 = 0.0;
117 a10 = 0.0; a11 = 1.0; a12 = 0.0; a13 = 0.0; a14 = 0.0;
118 a20 = 0.0; a21 = 0.0; a22 = 1.0; a23 = 0.0; a24 = 0.0;
119 a30 = 0.0; a31 = 0.0; a32 = 0.0; a33 = 1.0; a34 = 0.0;
120 a40 = 0.0; a41 = 0.0; a42 = 0.0; a43 = 0.0; a44 = 1.0;
121
122 return *this;
123 }

◆ getIdentity()

static const JMatrix5D & JMATH::JMatrix5D::getIdentity ( )
inlinestaticinherited

Get reference to unique instance of this class object.

Returns
identity matrix

Definition at line 131 of file JMatrix5D.hh.

132 {
133 static JMatrix5D matrix(JMatrix5D().setIdentity());
134
135 return matrix;
136 }
JMatrix5D & setIdentity()
Set to identity matrix.
Definition JMatrix5D.hh:114

◆ set()

void JMATH::JMatrix5D::set ( const JMatrix5D & A)
inlineinherited

Set matrix.

Parameters
Amatrix

Definition at line 144 of file JMatrix5D.hh.

145 {
146 static_cast<JMatrix5D&>(*this) = A;
147 }

◆ reset()

JMatrix5D & JMATH::JMatrix5D::reset ( )
inlineinherited

Set matrix to the null matrix.

Returns
this matrix

Definition at line 155 of file JMatrix5D.hh.

156 {
157 *this = JMatrix5D();
158
159 return *this;
160 }

◆ transpose()

JMatrix5D & JMATH::JMatrix5D::transpose ( )
inlineinherited

Transpose.

Returns
this matrix

Definition at line 168 of file JMatrix5D.hh.

169 {
170 using std::swap;
171
172 swap(a10, a01);
173 swap(a20, a02);
174 swap(a21, a12);
175 swap(a30, a03);
176 swap(a31, a13);
177 swap(a32, a23);
178 swap(a40, a04);
179 swap(a41, a14);
180 swap(a42, a24);
181 swap(a43, a34);
182
183 return *this;
184 }

◆ negate()

JMatrix5D & JMATH::JMatrix5D::negate ( )
inlineinherited

Negate matrix.

Returns
-this matrix

Definition at line 192 of file JMatrix5D.hh.

193 {
194 a00 = -a00; a01 = -a01; a02 = -a02; a03 = -a03; a04 = -a04;
195 a10 = -a10; a11 = -a11; a12 = -a12; a13 = -a13; a14 = -a14;
196 a20 = -a20; a21 = -a21; a22 = -a22; a13 = -a23; a14 = -a24;
197 a30 = -a30; a31 = -a31; a32 = -a32; a33 = -a33; a34 = -a34;
198 a40 = -a40; a41 = -a41; a42 = -a42; a43 = -a43; a44 = -a44;
199
200 return *this;
201 }

◆ add()

JMatrix5D & JMATH::JMatrix5D::add ( const JMatrix5D & A)
inlineinherited

Matrix addition.

Parameters
Amatrix
Returns
this matrix + A

Definition at line 210 of file JMatrix5D.hh.

211 {
212 a00 += A.a00; a01 += A.a01; a02 += A.a02; a03 += A.a03; a04 += A.a04;
213 a10 += A.a10; a11 += A.a11; a12 += A.a12; a13 += A.a13; a14 += A.a14;
214 a20 += A.a20; a21 += A.a21; a22 += A.a22; a23 += A.a23; a24 += A.a24;
215 a30 += A.a30; a31 += A.a31; a32 += A.a32; a33 += A.a33; a34 += A.a34;
216 a40 += A.a40; a41 += A.a41; a42 += A.a42; a43 += A.a43; a44 += A.a44;
217
218 return *this;
219 }

◆ sub()

JMatrix5D & JMATH::JMatrix5D::sub ( const JMatrix5D & A)
inlineinherited

Matrix subtraction.

Parameters
Amatrix
Returns
this matrix - A

Definition at line 228 of file JMatrix5D.hh.

229 {
230 a00 -= A.a00; a01 -= A.a01; a02 -= A.a02; a03 -= A.a03; a04 -= A.a04;
231 a10 -= A.a10; a11 -= A.a11; a12 -= A.a12; a13 -= A.a13; a14 -= A.a14;
232 a20 -= A.a20; a21 -= A.a21; a22 -= A.a22; a23 -= A.a23; a24 -= A.a24;
233 a30 -= A.a30; a31 -= A.a31; a32 -= A.a32; a33 -= A.a33; a34 -= A.a34;
234 a40 -= A.a40; a41 -= A.a41; a42 -= A.a42; a43 -= A.a43; a44 -= A.a44;
235
236 return *this;
237 }

◆ mul() [1/3]

JMatrix5D & JMATH::JMatrix5D::mul ( const double factor)
inlineinherited

Scale matrix.

Parameters
factorfactor
Returns
this matrix * factor

Definition at line 246 of file JMatrix5D.hh.

247 {
248 a00 *= factor; a01 *= factor; a02 *= factor; a03 *= factor; a04 *= factor;
249 a10 *= factor; a11 *= factor; a12 *= factor; a13 *= factor; a14 *= factor;
250 a20 *= factor; a21 *= factor; a22 *= factor; a23 *= factor; a24 *= factor;
251 a30 *= factor; a31 *= factor; a32 *= factor; a33 *= factor; a34 *= factor;
252 a40 *= factor; a41 *= factor; a42 *= factor; a43 *= factor; a44 *= factor;
253
254 return *this;
255 }

◆ mul() [2/3]

const JMatrix5D & JMATH::JMatrix5D::mul ( const JMatrix5D & A,
const JMatrix5D & B )
inlineinherited

Matrix multiplication.

Parameters
Amatrix
Bmatrix
Returns
this matrix

Definition at line 283 of file JMatrix5D.hh.

285 {
286 a00 = A.a00 * B.a00 + A.a01 * B.a10 + A.a02 * B.a20 + A.a03 * B.a30 + A.a04 * B.a40;
287 a01 = A.a00 * B.a01 + A.a01 * B.a11 + A.a02 * B.a21 + A.a03 * B.a31 + A.a04 * B.a41;
288 a02 = A.a00 * B.a02 + A.a01 * B.a12 + A.a02 * B.a22 + A.a03 * B.a32 + A.a04 * B.a42;
289 a03 = A.a00 * B.a03 + A.a01 * B.a13 + A.a02 * B.a23 + A.a03 * B.a33 + A.a04 * B.a43;
290 a04 = A.a00 * B.a04 + A.a01 * B.a14 + A.a02 * B.a24 + A.a03 * B.a34 + A.a04 * B.a44;
291
292 a10 = A.a10 * B.a00 + A.a11 * B.a10 + A.a12 * B.a20 + A.a13 * B.a30 + A.a14 * B.a40;
293 a11 = A.a10 * B.a01 + A.a11 * B.a11 + A.a12 * B.a21 + A.a13 * B.a31 + A.a14 * B.a41;
294 a12 = A.a10 * B.a02 + A.a11 * B.a12 + A.a12 * B.a22 + A.a13 * B.a32 + A.a14 * B.a42;
295 a13 = A.a10 * B.a03 + A.a11 * B.a13 + A.a12 * B.a23 + A.a13 * B.a33 + A.a14 * B.a43;
296 a14 = A.a10 * B.a04 + A.a11 * B.a14 + A.a12 * B.a24 + A.a13 * B.a34 + A.a14 * B.a44;
297
298 a20 = A.a20 * B.a00 + A.a21 * B.a10 + A.a22 * B.a20 + A.a23 * B.a30 + A.a24 * B.a40;
299 a21 = A.a20 * B.a01 + A.a21 * B.a11 + A.a22 * B.a21 + A.a23 * B.a31 + A.a24 * B.a41;
300 a22 = A.a20 * B.a02 + A.a21 * B.a12 + A.a22 * B.a22 + A.a23 * B.a32 + A.a24 * B.a42;
301 a23 = A.a20 * B.a03 + A.a21 * B.a13 + A.a22 * B.a23 + A.a23 * B.a33 + A.a24 * B.a43;
302 a24 = A.a20 * B.a04 + A.a21 * B.a14 + A.a22 * B.a24 + A.a23 * B.a34 + A.a24 * B.a44;
303
304 a30 = A.a30 * B.a00 + A.a31 * B.a10 + A.a32 * B.a20 + A.a33 * B.a30 + A.a34 * B.a40;
305 a31 = A.a30 * B.a01 + A.a31 * B.a11 + A.a32 * B.a21 + A.a33 * B.a31 + A.a34 * B.a41;
306 a32 = A.a30 * B.a02 + A.a31 * B.a12 + A.a32 * B.a22 + A.a33 * B.a32 + A.a34 * B.a42;
307 a33 = A.a30 * B.a03 + A.a31 * B.a13 + A.a32 * B.a23 + A.a33 * B.a33 + A.a34 * B.a43;
308 a34 = A.a30 * B.a04 + A.a31 * B.a14 + A.a32 * B.a24 + A.a33 * B.a34 + A.a34 * B.a44;
309
310 a40 = A.a40 * B.a00 + A.a41 * B.a10 + A.a42 * B.a20 + A.a43 * B.a30 + A.a44 * B.a40;
311 a41 = A.a40 * B.a01 + A.a41 * B.a11 + A.a42 * B.a21 + A.a43 * B.a31 + A.a44 * B.a41;
312 a42 = A.a40 * B.a02 + A.a41 * B.a12 + A.a42 * B.a22 + A.a43 * B.a32 + A.a44 * B.a42;
313 a43 = A.a40 * B.a03 + A.a41 * B.a13 + A.a42 * B.a23 + A.a43 * B.a33 + A.a44 * B.a43;
314 a44 = A.a40 * B.a04 + A.a41 * B.a14 + A.a42 * B.a24 + A.a43 * B.a34 + A.a44 * B.a44;
315
316 return *this;
317 }

◆ mul() [3/3]

JMatrix5D & JMATH::JMath< JMatrix5D, JSecond_t >::mul ( const JSecond_t & object)
inlineinherited

Multiply with object.

Parameters
objectobject
Returns
result object

Definition at line 354 of file JMath.hh.

355 {
356 return static_cast<JFirst_t&>(*this) = JFirst_t().mul(static_cast<const JFirst_t&>(*this), object);
357 }

◆ div()

JMatrix5D & JMATH::JMatrix5D::div ( const double factor)
inlineinherited

Scale matrix.

Parameters
factorfactor
Returns
this matrix / factor

Definition at line 264 of file JMatrix5D.hh.

265 {
266 a00 /= factor; a01 /= factor; a02 /= factor; a03 /= factor; a04 /= factor;
267 a10 /= factor; a11 /= factor; a12 /= factor; a13 /= factor; a14 /= factor;
268 a20 /= factor; a21 /= factor; a22 /= factor; a23 /= factor; a24 /= factor;
269 a30 /= factor; a31 /= factor; a32 /= factor; a33 /= factor; a34 /= factor;
270 a40 /= factor; a41 /= factor; a42 /= factor; a43 /= factor; a44 /= factor;
271
272 return *this;
273 }

◆ equals()

bool JMATH::JMatrix5D::equals ( const JMatrix5D & A,
const double eps = std::numeric_limits<double>::min() ) const
inlineinherited

Equality.

Parameters
Amatrix
epsnumerical precision
Returns
true if matrices identical; else false

Definition at line 327 of file JMatrix5D.hh.

329 {
330 return (fabs(a00 - A.a00) <= eps &&
331 fabs(a01 - A.a01) <= eps &&
332 fabs(a02 - A.a02) <= eps &&
333 fabs(a03 - A.a03) <= eps &&
334 fabs(a04 - A.a04) <= eps &&
335 fabs(a10 - A.a10) <= eps &&
336 fabs(a11 - A.a11) <= eps &&
337 fabs(a12 - A.a12) <= eps &&
338 fabs(a13 - A.a13) <= eps &&
339 fabs(a14 - A.a14) <= eps &&
340 fabs(a20 - A.a20) <= eps &&
341 fabs(a21 - A.a21) <= eps &&
342 fabs(a22 - A.a22) <= eps &&
343 fabs(a23 - A.a23) <= eps &&
344 fabs(a24 - A.a24) <= eps &&
345 fabs(a30 - A.a30) <= eps &&
346 fabs(a31 - A.a31) <= eps &&
347 fabs(a32 - A.a32) <= eps &&
348 fabs(a33 - A.a33) <= eps &&
349 fabs(a34 - A.a34) <= eps &&
350 fabs(a40 - A.a40) <= eps &&
351 fabs(a41 - A.a41) <= eps &&
352 fabs(a42 - A.a42) <= eps &&
353 fabs(a43 - A.a43) <= eps &&
354 fabs(a44 - A.a44) <= eps);
355 }

◆ isIdentity()

bool JMATH::JMatrix5D::isIdentity ( const double eps = std::numeric_limits<double>::min()) const
inlineinherited

Test identity.

Parameters
epsnumerical precision
Returns
true if identity matrix; else false

Definition at line 364 of file JMatrix5D.hh.

365 {
366 return equals(getIdentity(), eps);
367 }
bool equals(const JMatrix5D &A, const double eps=std::numeric_limits< double >::min()) const
Equality.
Definition JMatrix5D.hh:327
static const JMatrix5D & getIdentity()
Get reference to unique instance of this class object.
Definition JMatrix5D.hh:131

◆ getDeterminant()

double JMATH::JMatrix5D::getDeterminant ( ) const
inlineinherited

Get determinant of matrix.

Returns
determinant of matrix

Definition at line 375 of file JMatrix5D.hh.

376 {
377 double det = 0.0;
378
379 det += a00 * JMatrix4D(a11, a12, a13, a14,
380 a21, a22, a23, a24,
381 a31, a32, a33, a34,
382 a41, a42, a43, a44).getDeterminant();
383
384 det -= a01 * JMatrix4D(a10, a12, a13, a14,
385 a20, a22, a23, a24,
386 a30, a32, a33, a34,
387 a40, a42, a43, a44).getDeterminant();
388
389 det += a02 * JMatrix4D(a10, a11, a13, a14,
390 a20, a21, a23, a24,
391 a30, a31, a33, a34,
392 a40, a41, a43, a44).getDeterminant();
393
394 det -= a03 * JMatrix4D(a10, a11, a12, a14,
395 a20, a21, a22, a24,
396 a30, a31, a32, a34,
397 a40, a41, a42, a44).getDeterminant();
398
399 det += a04 * JMatrix4D(a10, a11, a12, a13,
400 a20, a21, a22, a23,
401 a30, a31, a32, a33,
402 a40, a41, a42, a43).getDeterminant();
403
404 return det;
405 }

◆ transform()

void JMATH::JMatrix5D::transform ( double & __x0,
double & __x1,
double & __x2,
double & __x3,
double & __x4 ) const
inlineinherited

Transform.

Parameters
__x0x0 value
__x1x1 value
__x2x2 value
__x3x3 value
__x4x4 value

Definition at line 417 of file JMatrix5D.hh.

418 {
419 const double x0 = a00 * __x0 + a01 * __x1 + a02 * __x2 + a03 * __x3 + a04 * __x4;
420 const double x1 = a10 * __x0 + a11 * __x1 + a12 * __x2 + a13 * __x3 + a14 * __x4;
421 const double x2 = a20 * __x0 + a21 * __x1 + a22 * __x2 + a23 * __x3 + a24 * __x4;
422 const double x3 = a30 * __x0 + a31 * __x1 + a32 * __x2 + a33 * __x3 + a34 * __x4;
423 const double x4 = a40 * __x0 + a41 * __x1 + a42 * __x2 + a43 * __x3 + a44 * __x4;
424
425 __x0 = x0;
426 __x1 = x1;
427 __x2 = x2;
428 __x3 = x3;
429 __x4 = x4;
430 }

◆ operator()() [1/2]

double JMATH::JMatrix5D::operator() ( int row,
int col ) const
inlineinherited

Get matrix element.

Parameters
rowrow number
colcolumn number
Returns
matrix element at (row,col)

Definition at line 501 of file JMatrix5D.hh.

502 {
503 return (&a00)[row * NUMBER_OF_DIMENSIONS + col];
504 }
static const int NUMBER_OF_DIMENSIONS
Definition JMatrix5D.hh:520

◆ operator()() [2/2]

double & JMATH::JMatrix5D::operator() ( int row,
int col )
inlineinherited

Get matrix element.

Parameters
rowrow number
colcolumn number
Returns
matrix element at (row,col)

Definition at line 514 of file JMatrix5D.hh.

515 {
516 return (&a00)[row * NUMBER_OF_DIMENSIONS + col];
517 }

Member Data Documentation

◆ NUMBER_OF_DIMENSIONS

const int JMATH::JMatrix5D::NUMBER_OF_DIMENSIONS = 5
staticinherited

Definition at line 520 of file JMatrix5D.hh.

◆ a00

double JMATH::JMatrix5D::a00
inherited

Definition at line 522 of file JMatrix5D.hh.

◆ a01

double JMATH::JMatrix5D::a01
inherited

Definition at line 522 of file JMatrix5D.hh.

◆ a02

double JMATH::JMatrix5D::a02
inherited

Definition at line 522 of file JMatrix5D.hh.

◆ a03

double JMATH::JMatrix5D::a03
inherited

Definition at line 522 of file JMatrix5D.hh.

◆ a04

double JMATH::JMatrix5D::a04
inherited

Definition at line 522 of file JMatrix5D.hh.

◆ a10

double JMATH::JMatrix5D::a10
inherited

Definition at line 523 of file JMatrix5D.hh.

◆ a11

double JMATH::JMatrix5D::a11
inherited

Definition at line 523 of file JMatrix5D.hh.

◆ a12

double JMATH::JMatrix5D::a12
inherited

Definition at line 523 of file JMatrix5D.hh.

◆ a13

double JMATH::JMatrix5D::a13
inherited

Definition at line 523 of file JMatrix5D.hh.

◆ a14

double JMATH::JMatrix5D::a14
inherited

Definition at line 523 of file JMatrix5D.hh.

◆ a20

double JMATH::JMatrix5D::a20
inherited

Definition at line 524 of file JMatrix5D.hh.

◆ a21

double JMATH::JMatrix5D::a21
inherited

Definition at line 524 of file JMatrix5D.hh.

◆ a22

double JMATH::JMatrix5D::a22
inherited

Definition at line 524 of file JMatrix5D.hh.

◆ a23

double JMATH::JMatrix5D::a23
inherited

Definition at line 524 of file JMatrix5D.hh.

◆ a24

double JMATH::JMatrix5D::a24
inherited

Definition at line 524 of file JMatrix5D.hh.

◆ a30

double JMATH::JMatrix5D::a30
inherited

Definition at line 525 of file JMatrix5D.hh.

◆ a31

double JMATH::JMatrix5D::a31
inherited

Definition at line 525 of file JMatrix5D.hh.

◆ a32

double JMATH::JMatrix5D::a32
inherited

Definition at line 525 of file JMatrix5D.hh.

◆ a33

double JMATH::JMatrix5D::a33
inherited

Definition at line 525 of file JMatrix5D.hh.

◆ a34

double JMATH::JMatrix5D::a34
inherited

Definition at line 525 of file JMatrix5D.hh.

◆ a40

double JMATH::JMatrix5D::a40
inherited

Definition at line 526 of file JMatrix5D.hh.

◆ a41

double JMATH::JMatrix5D::a41
inherited

Definition at line 526 of file JMatrix5D.hh.

◆ a42

double JMATH::JMatrix5D::a42
inherited

Definition at line 526 of file JMatrix5D.hh.

◆ a43

double JMATH::JMatrix5D::a43
inherited

Definition at line 526 of file JMatrix5D.hh.

◆ a44

double JMATH::JMatrix5D::a44
inherited

Definition at line 526 of file JMatrix5D.hh.


The documentation for this class was generated from the following file: