Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
JMATH::JMatrix4S Class Reference

4 x 4 symmetric matrix More...

#include <JMatrix4S.hh>

Inheritance diagram for JMATH::JMatrix4S:
JMATH::JMatrix4D JMATH::JMath< JMatrix4D > JLANG::JEquals< JFirst_t, JSecond_t >

Public Member Functions

 JMatrix4S ()
 Default constructor.
 
 JMatrix4S (const JMatrix4D &A)
 Contructor.
 
 JMatrix4S (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)
 Contructor.
 
void invert ()
 Invert matrix.
 
JMatrix4DsetIdentity ()
 Set to identity matrix.
 
void set (const JMatrix4D &A)
 Set matrix.
 
JMatrix4Dreset ()
 Set matrix to the null matrix.
 
JMatrix4Dtranspose ()
 Transpose.
 
JMatrix4Dnegate ()
 Negate matrix.
 
JMatrix4Dadd (const JMatrix4D &A)
 Matrix addition.
 
JMatrix4Dsub (const JMatrix4D &A)
 Matrix subtraction.
 
JMatrix4Dmul (const double factor)
 Scale matrix.
 
const JMatrix4Dmul (const JMatrix4D &A, const JMatrix4D &B)
 Matrix multiplication.
 
JMatrix4Dmul (const JSecond_t &object)
 Multiply with object.
 
JMatrix4Ddiv (const double factor)
 Scale matrix.
 
bool equals (const JMatrix4D &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) const
 Transform.
 

Static Public Member Functions

static const JMatrix4DgetInstance ()
 Get reference to unique instance of this class object.
 
static const JMatrix4DgetIdentity ()
 Get reference to unique instance of this class object.
 

Public Attributes

double a00
 
double a01
 
double a02
 
double a03
 
double a10
 
double a11
 
double a12
 
double a13
 
double a20
 
double a21
 
double a22
 
double a23
 
double a30
 
double a31
 
double a32
 
double a33
 

Detailed Description

4 x 4 symmetric matrix

Definition at line 26 of file JMatrix4S.hh.

Constructor & Destructor Documentation

◆ JMatrix4S() [1/3]

JMATH::JMatrix4S::JMatrix4S ( )
inline

Default constructor.

Definition at line 33 of file JMatrix4S.hh.

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

◆ JMatrix4S() [2/3]

JMATH::JMatrix4S::JMatrix4S ( const JMatrix4D & A)
inline

Contructor.

Parameters
Amatrix

Definition at line 43 of file JMatrix4S.hh.

43 :
44 JMatrix4D(A)
45 {}

◆ JMatrix4S() [3/3]

JMATH::JMatrix4S::JMatrix4S ( 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 )
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)

Definition at line 63 of file JMatrix4S.hh.

66 :
67 JMatrix4D(__a00, __a10, __a20, __a30,
68 __a10, __a11, __a21, __a31,
69 __a20, __a21, __a22, __a32,
70 __a30, __a31, __a32, __a33)
71 {}

Member Function Documentation

◆ invert()

void JMATH::JMatrix4S::invert ( )
inline

Invert matrix.

Definition at line 77 of file JMatrix4S.hh.

78 {
79 using std::swap;
80
81 // LDU decomposition
82
83 int p0 = 0; // permute row 0
84 int p1 = 0; // permute row 1
85 int p2 = 0; // permute row 2
86
87 double val;
88
89 val = a00;
90
91 if (fabs(a10) > fabs(val)) {
92 p0 = 1;
93 val = a10;
94 }
95
96 if (fabs(a20) > fabs(val)) {
97 p0 = 2;
98 val = a20;
99 }
100
101 if (fabs(a30) > fabs(val)) {
102 p0 = 3;
103 val = a30;
104 }
105
106 switch (p0) {
107
108 case 1:
109 swap(a00,a10);
110 swap(a01,a11);
111 swap(a02,a12);
112 swap(a03,a13);
113 break;
114
115 case 2:
116 swap(a00,a20);
117 swap(a01,a21);
118 swap(a02,a22);
119 swap(a03,a23);
120 break;
121
122 case 3:
123 swap(a00,a30);
124 swap(a01,a31);
125 swap(a02,a32);
126 swap(a03,a33);
127 break;
128 }
129
130 if (val == 0) {
131 throw JDivisionByZero("LDU decomposition zero pivot");
132 }
133
134 a10 /= val;
135 a11 -= a10 * a01;
136 a12 -= a10 * a02;
137 a13 -= a10 * a03;
138
139 a20 /= val;
140 a21 -= a20 * a01;
141 a22 -= a20 * a02;
142 a23 -= a20 * a03;
143
144 a30 /= val;
145 a31 -= a30 * a01;
146 a32 -= a30 * a02;
147 a33 -= a30 * a03;
148
149 val = a11;
150
151 if (fabs(a21) > fabs(val)) {
152 p1 = 2;
153 val = a21;
154 }
155
156 if (fabs(a31) > fabs(val)) {
157 p1 = 3;
158 val = a31;
159 }
160
161 switch (p1) {
162
163 case 2:
164 swap(a10,a20);
165 swap(a11,a21);
166 swap(a12,a22);
167 swap(a13,a23);
168 break;
169
170 case 3:
171 swap(a10,a30);
172 swap(a11,a31);
173 swap(a12,a32);
174 swap(a13,a33);
175 break;
176 }
177
178 if (val == 0) {
179 throw JDivisionByZero("LDU decomposition zero pivot");
180 }
181
182 a21 /= val;
183 a22 -= a21 * a12;
184 a23 -= a21 * a13;
185
186 a31 /= val;
187 a32 -= a31 * a12;
188 a33 -= a31 * a13;
189
190 val = a22;
191
192 if (fabs(a32) > fabs(val)) {
193 p2 = 3;
194 val = a32;
195 }
196
197 switch (p2) {
198
199 case 3:
200 swap(a20,a30);
201 swap(a21,a31);
202 swap(a22,a32);
203 swap(a23,a33);
204 break;
205 }
206
207 if (val == 0) {
208 throw JDivisionByZero("LDU decomposition zero pivot");
209 }
210
211 a32 /= val;
212 a33 -= a32 * a23;
213
214 // invert D
215
216 if (a33 == 0) {
217 throw JDivisionByZero("D matrix not invertable");
218 }
219
220 a00 = 1.0 / a00;
221 a11 = 1.0 / a11;
222 a22 = 1.0 / a22;
223 a33 = 1.0 / a33;
224
225 // invert U
226
227 a01 *= -a00;
228 a01 *= a11;
229
230 a02 *= -a00;
231 a02 -= a01 * a12;
232 a02 *= a22;
233
234 a03 *= -a00;
235 a03 -= a01 * a13;
236 a03 -= a02 * a23;
237 a03 *= a33;
238
239 a12 *= -a11;
240 a12 *= a22;
241
242 a13 *= -a11;
243 a13 -= a12 * a23;
244 a13 *= a33;
245
246 a23 *= -a22;
247 a23 *= a33;
248
249 // invert L
250
251 a32 = -a32;
252
253 a31 = -a31;
254 a31 -= a32 * a21;
255
256 a30 = -a30;
257 a30 -= a31 * a10;
258 a30 -= a32 * a20;
259
260 a21 = -a21;
261 a20 = -a20;
262 a20 -= a21 * a10;
263 a10 = -a10;
264
265 // U^-1 x L^-1
266
267 a00 += a01 * a10 + a02 * a20 + a03 * a30;
268 a01 += a02 * a21 + a03 * a31;
269 a02 += a03 * a32;
270
271 a10 *= a11;
272 a10 += a12 * a20 + a13 * a30;
273 a11 += a12 * a21 + a13 * a31;
274 a12 += a13 * a32;
275
276 a20 *= a22;
277 a20 += a23 * a30;
278 a21 *= a22;
279 a21 += a23 * a31;
280 a22 += a23 * a32;
281
282 a30 *= a33;
283 a31 *= a33;
284 a32 *= a33;
285
286 switch (p2) {
287
288 case 3:
289 swap(a02,a03);
290 swap(a12,a13);
291 swap(a22,a23);
292 swap(a32,a33);
293 break;
294 }
295
296 switch (p1) {
297
298 case 2:
299 swap(a01,a02);
300 swap(a11,a12);
301 swap(a21,a22);
302 swap(a31,a32);
303 break;
304
305 case 3:
306 swap(a01,a03);
307 swap(a11,a13);
308 swap(a21,a23);
309 swap(a31,a33);
310 break;
311 }
312
313 switch (p0) {
314
315 case 1:
316 swap(a00,a01);
317 swap(a10,a11);
318 swap(a20,a21);
319 swap(a30,a31);
320 break;
321
322 case 2:
323 swap(a00,a02);
324 swap(a10,a12);
325 swap(a20,a22);
326 swap(a30,a32);
327 break;
328
329 case 3:
330 swap(a00,a03);
331 swap(a10,a13);
332 swap(a20,a23);
333 swap(a30,a33);
334 break;
335 }
336 }
TPaveText * p1

◆ getInstance()

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

Get reference to unique instance of this class object.

Returns
zero matrix

Definition at line 89 of file JMatrix4D.hh.

90 {
91 static JMatrix4D matrix;
92
93 return matrix;
94 }

◆ setIdentity()

JMatrix4D & JMATH::JMatrix4D::setIdentity ( )
inlineinherited

Set to identity matrix.

Returns
this matrix

Definition at line 102 of file JMatrix4D.hh.

103 {
104 a00 = 1.0; a01 = 0.0; a02 = 0.0; a03 = 0.0;
105 a10 = 0.0; a11 = 1.0; a12 = 0.0; a13 = 0.0;
106 a20 = 0.0; a21 = 0.0; a22 = 1.0; a23 = 0.0;
107 a30 = 0.0; a31 = 0.0; a32 = 0.0; a33 = 1.0;
108
109 return *this;
110 }

◆ getIdentity()

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

Get reference to unique instance of this class object.

Returns
identity matrix

Definition at line 118 of file JMatrix4D.hh.

119 {
120 static JMatrix4D matrix(JMatrix4D().setIdentity());
121
122 return matrix;
123 }
JMatrix4D & setIdentity()
Set to identity matrix.
Definition JMatrix4D.hh:102

◆ set()

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

Set matrix.

Parameters
Amatrix

Definition at line 131 of file JMatrix4D.hh.

132 {
133 static_cast<JMatrix4D&>(*this) = A;
134 }

◆ reset()

JMatrix4D & JMATH::JMatrix4D::reset ( )
inlineinherited

Set matrix to the null matrix.

Returns
this matrix

Definition at line 142 of file JMatrix4D.hh.

143 {
144 *this = JMatrix4D();
145
146 return *this;
147 }

◆ transpose()

JMatrix4D & JMATH::JMatrix4D::transpose ( )
inlineinherited

Transpose.

Returns
this matrix

Definition at line 155 of file JMatrix4D.hh.

156 {
157 using std::swap;
158
159 swap(a10, a01);
160 swap(a20, a02);
161 swap(a21, a12);
162 swap(a30, a03);
163 swap(a31, a13);
164 swap(a32, a23);
165
166 return *this;
167 }

◆ negate()

JMatrix4D & JMATH::JMatrix4D::negate ( )
inlineinherited

Negate matrix.

Returns
-this matrix

Definition at line 175 of file JMatrix4D.hh.

176 {
177 a00 = -a00; a01 = -a01; a02 = -a02; a03 = -a03;
178 a10 = -a10; a11 = -a11; a12 = -a12; a13 = -a13;
179 a20 = -a20; a21 = -a21; a22 = -a22; a13 = -a23;
180 a30 = -a30; a31 = -a31; a32 = -a32; a33 = -a33;
181
182 return *this;
183 }

◆ add()

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

Matrix addition.

Parameters
Amatrix
Returns
this matrix + A

Definition at line 192 of file JMatrix4D.hh.

193 {
194 a00 += A.a00; a01 += A.a01; a02 += A.a02; a03 += A.a03;
195 a10 += A.a10; a11 += A.a11; a12 += A.a12; a13 += A.a13;
196 a20 += A.a20; a21 += A.a21; a22 += A.a22; a23 += A.a23;
197 a30 += A.a30; a31 += A.a31; a32 += A.a32; a33 += A.a33;
198
199 return *this;
200 }

◆ sub()

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

Matrix subtraction.

Parameters
Amatrix
Returns
this matrix - A

Definition at line 209 of file JMatrix4D.hh.

210 {
211 a00 -= A.a00; a01 -= A.a01; a02 -= A.a02; a03 -= A.a03;
212 a10 -= A.a10; a11 -= A.a11; a12 -= A.a12; a13 -= A.a13;
213 a20 -= A.a20; a21 -= A.a21; a22 -= A.a22; a23 -= A.a23;
214 a30 -= A.a30; a31 -= A.a31; a32 -= A.a32; a33 -= A.a33;
215
216 return *this;
217 }

◆ mul() [1/3]

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

Scale matrix.

Parameters
factorfactor
Returns
this matrix * factor

Definition at line 226 of file JMatrix4D.hh.

227 {
228 a00 *= factor; a01 *= factor; a02 *= factor; a03 *= factor;
229 a10 *= factor; a11 *= factor; a12 *= factor; a13 *= factor;
230 a20 *= factor; a21 *= factor; a22 *= factor; a23 *= factor;
231 a30 *= factor; a31 *= factor; a32 *= factor; a33 *= factor;
232
233 return *this;
234 }

◆ mul() [2/3]

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

Matrix multiplication.

Parameters
Amatrix
Bmatrix
Returns
this matrix

Definition at line 261 of file JMatrix4D.hh.

263 {
264 a00 = A.a00 * B.a00 + A.a01 * B.a10 + A.a02 * B.a20 + A.a03 * B.a30;
265 a01 = A.a00 * B.a01 + A.a01 * B.a11 + A.a02 * B.a21 + A.a03 * B.a31;
266 a02 = A.a00 * B.a02 + A.a01 * B.a12 + A.a02 * B.a22 + A.a03 * B.a32;
267 a03 = A.a00 * B.a03 + A.a01 * B.a13 + A.a02 * B.a23 + A.a03 * B.a33;
268
269 a10 = A.a10 * B.a00 + A.a11 * B.a10 + A.a12 * B.a20 + A.a13 * B.a30;
270 a11 = A.a10 * B.a01 + A.a11 * B.a11 + A.a12 * B.a21 + A.a13 * B.a31;
271 a12 = A.a10 * B.a02 + A.a11 * B.a12 + A.a12 * B.a22 + A.a13 * B.a32;
272 a13 = A.a10 * B.a03 + A.a11 * B.a13 + A.a12 * B.a23 + A.a13 * B.a33;
273
274 a20 = A.a20 * B.a00 + A.a21 * B.a10 + A.a22 * B.a20 + A.a23 * B.a30;
275 a21 = A.a20 * B.a01 + A.a21 * B.a11 + A.a22 * B.a21 + A.a23 * B.a31;
276 a22 = A.a20 * B.a02 + A.a21 * B.a12 + A.a22 * B.a22 + A.a23 * B.a32;
277 a23 = A.a20 * B.a03 + A.a21 * B.a13 + A.a22 * B.a23 + A.a23 * B.a33;
278
279 a30 = A.a30 * B.a00 + A.a31 * B.a10 + A.a32 * B.a20 + A.a33 * B.a30;
280 a31 = A.a30 * B.a01 + A.a31 * B.a11 + A.a32 * B.a21 + A.a33 * B.a31;
281 a32 = A.a30 * B.a02 + A.a31 * B.a12 + A.a32 * B.a22 + A.a33 * B.a32;
282 a33 = A.a30 * B.a03 + A.a31 * B.a13 + A.a32 * B.a23 + A.a33 * B.a33;
283
284 return *this;
285 }

◆ mul() [3/3]

JMatrix4D & JMATH::JMath< JMatrix4D, 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()

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

Scale matrix.

Parameters
factorfactor
Returns
this matrix / factor

Definition at line 243 of file JMatrix4D.hh.

244 {
245 a00 /= factor; a01 /= factor; a02 /= factor; a03 /= factor;
246 a10 /= factor; a11 /= factor; a12 /= factor; a13 /= factor;
247 a20 /= factor; a21 /= factor; a22 /= factor; a23 /= factor;
248 a30 /= factor; a31 /= factor; a32 /= factor; a33 /= factor;
249
250 return *this;
251 }

◆ equals()

bool JMATH::JMatrix4D::equals ( const JMatrix4D & 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 295 of file JMatrix4D.hh.

297 {
298 return (fabs(a00 - A.a00) <= eps &&
299 fabs(a01 - A.a01) <= eps &&
300 fabs(a02 - A.a02) <= eps &&
301 fabs(a03 - A.a03) <= eps &&
302 fabs(a10 - A.a10) <= eps &&
303 fabs(a11 - A.a11) <= eps &&
304 fabs(a12 - A.a12) <= eps &&
305 fabs(a13 - A.a13) <= eps &&
306 fabs(a20 - A.a20) <= eps &&
307 fabs(a21 - A.a21) <= eps &&
308 fabs(a22 - A.a22) <= eps &&
309 fabs(a23 - A.a23) <= eps &&
310 fabs(a30 - A.a30) <= eps &&
311 fabs(a31 - A.a31) <= eps &&
312 fabs(a32 - A.a32) <= eps &&
313 fabs(a33 - A.a33) <= eps);
314 }

◆ isIdentity()

bool JMATH::JMatrix4D::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 323 of file JMatrix4D.hh.

324 {
325 return equals(getIdentity(), eps);
326 }
static const JMatrix4D & getIdentity()
Get reference to unique instance of this class object.
Definition JMatrix4D.hh:118
bool equals(const JMatrix4D &A, const double eps=std::numeric_limits< double >::min()) const
Equality.
Definition JMatrix4D.hh:295

◆ getDeterminant()

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

Get determinant of matrix.

Returns
determinant of matrix

Definition at line 334 of file JMatrix4D.hh.

335 {
336 double det = 0.0;
337
338 det += a00 * JMatrix3D(a11, a12, a13,
339 a21, a22, a23,
340 a31, a32, a33).getDeterminant();
341
342 det -= a01 * JMatrix3D(a10, a12, a13,
343 a20, a22, a23,
344 a30, a32, a33).getDeterminant();
345
346 det += a02 * JMatrix3D(a10, a11, a13,
347 a20, a21, a23,
348 a30, a31, a33).getDeterminant();
349
350 det -= a03 * JMatrix3D(a10, a11, a12,
351 a20, a21, a22,
352 a30, a31, a32).getDeterminant();
353
354 return det;
355 }

◆ transform()

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

Transform.

Parameters
__x0x0 value
__x1x1 value
__x2x2 value
__x3x3 value

Definition at line 366 of file JMatrix4D.hh.

367 {
368 const double x0 = a00 * __x0 + a01 * __x1 + a02 * __x2 + a03 * __x3;
369 const double x1 = a10 * __x0 + a11 * __x1 + a12 * __x2 + a13 * __x3;
370 const double x2 = a20 * __x0 + a21 * __x1 + a22 * __x2 + a23 * __x3;
371 const double x3 = a30 * __x0 + a31 * __x1 + a32 * __x2 + a33 * __x3;
372
373 __x0 = x0;
374 __x1 = x1;
375 __x2 = x2;
376 __x3 = x3;
377 }

Member Data Documentation

◆ a00

double JMATH::JMatrix4D::a00
inherited

Definition at line 438 of file JMatrix4D.hh.

◆ a01

double JMATH::JMatrix4D::a01
inherited

Definition at line 438 of file JMatrix4D.hh.

◆ a02

double JMATH::JMatrix4D::a02
inherited

Definition at line 438 of file JMatrix4D.hh.

◆ a03

double JMATH::JMatrix4D::a03
inherited

Definition at line 438 of file JMatrix4D.hh.

◆ a10

double JMATH::JMatrix4D::a10
inherited

Definition at line 439 of file JMatrix4D.hh.

◆ a11

double JMATH::JMatrix4D::a11
inherited

Definition at line 439 of file JMatrix4D.hh.

◆ a12

double JMATH::JMatrix4D::a12
inherited

Definition at line 439 of file JMatrix4D.hh.

◆ a13

double JMATH::JMatrix4D::a13
inherited

Definition at line 439 of file JMatrix4D.hh.

◆ a20

double JMATH::JMatrix4D::a20
inherited

Definition at line 440 of file JMatrix4D.hh.

◆ a21

double JMATH::JMatrix4D::a21
inherited

Definition at line 440 of file JMatrix4D.hh.

◆ a22

double JMATH::JMatrix4D::a22
inherited

Definition at line 440 of file JMatrix4D.hh.

◆ a23

double JMATH::JMatrix4D::a23
inherited

Definition at line 440 of file JMatrix4D.hh.

◆ a30

double JMATH::JMatrix4D::a30
inherited

Definition at line 441 of file JMatrix4D.hh.

◆ a31

double JMATH::JMatrix4D::a31
inherited

Definition at line 441 of file JMatrix4D.hh.

◆ a32

double JMATH::JMatrix4D::a32
inherited

Definition at line 441 of file JMatrix4D.hh.

◆ a33

double JMATH::JMatrix4D::a33
inherited

Definition at line 441 of file JMatrix4D.hh.


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