Jpp  17.0.0
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
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. More...
 
 JMatrix4S (const JMatrix4D &A)
 Contructor. More...
 
 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. More...
 
void invert ()
 Invert matrix. More...
 
JMatrix4DsetIdentity ()
 Set to identity matrix. More...
 
void set (const JMatrix4D &A)
 Set matrix. More...
 
JMatrix4Dreset ()
 Set matrix to the null matrix. More...
 
JMatrix4Dtranspose ()
 Transpose. More...
 
JMatrix4Dnegate ()
 Negate matrix. More...
 
JMatrix4Dadd (const JMatrix4D &A)
 Matrix addition. More...
 
JMatrix4Dsub (const JMatrix4D &A)
 Matrix subtraction. More...
 
JMatrix4Dmul (const double factor)
 Scale matrix. More...
 
const JMatrix4Dmul (const JMatrix4D &A, const JMatrix4D &B)
 Matrix multiplication. More...
 
JMatrix4Dmul (const JNullType &object)
 Multiply with object. More...
 
JMatrix4Ddiv (const double factor)
 Scale matrix. More...
 
bool equals (const JMatrix4D &A, const double eps=std::numeric_limits< double >::min()) const
 Equality. More...
 
bool isIdentity (const double eps=std::numeric_limits< double >::min()) const
 Test identity. More...
 
double getDeterminant () const
 Get determinant of matrix. More...
 
void transform (double &__x0, double &__x1, double &__x2, double &__x3) const
 Transform. More...
 

Static Public Member Functions

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

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

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
JMATH::JMatrix4S::JMatrix4S ( const JMatrix4D A)
inline

Contructor.

Parameters
Amatrix

Definition at line 43 of file JMatrix4S.hh.

43  :
44  JMatrix4D(A)
45  {}
JMatrix4D()
Default constructor.
Definition: JMatrix4D.hh:45
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  {}
JMatrix4D()
Default constructor.
Definition: JMatrix4D.hh:45

Member Function Documentation

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
p2
Definition: module-Z:fit.sh:74
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  }
4 x 4 matrix
Definition: JMatrix4D.hh:33
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  }
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  }
4 x 4 matrix
Definition: JMatrix4D.hh:33
JMatrix4D & setIdentity()
Set to identity matrix.
Definition: JMatrix4D.hh:102
JMatrix4D()
Default constructor.
Definition: JMatrix4D.hh:45
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  }
4 x 4 matrix
Definition: JMatrix4D.hh:33
source $JPP_DIR setenv csh $JPP_DIR &dev null eval JShellParser o a A
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  }
JMatrix4D()
Default constructor.
Definition: JMatrix4D.hh:45
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  }
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  }
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  }
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  }
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  }
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  }
JMatrix4D & JMATH::JMath< JMatrix4D , JNullType >::mul ( const JNullType object)
inlineinherited

Multiply with object.

Parameters
objectobject
Returns
result object

Definition at line 357 of file JMath.hh.

358  {
359  return static_cast<JFirst_t&>(*this) = JCalculator<JFirst_t>::calculator.mul(static_cast<const JFirst_t&>(*this), object);
360  }
Auxiliary class for arithmetic operations on objects.
Definition: JCalculator.hh:18
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  }
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  }
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  }
bool equals(const JMatrix4D &A, const double eps=std::numeric_limits< double >::min()) const
Equality.
Definition: JMatrix4D.hh:295
static const JMatrix4D & getIdentity()
Get reference to unique instance of this class object.
Definition: JMatrix4D.hh:118
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  }
3 x 3 matrix
double getDeterminant() const
Get determinant of matrix.
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

double JMATH::JMatrix4D::a00
inherited

Definition at line 438 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a01
inherited

Definition at line 438 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a02
inherited

Definition at line 438 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a03
inherited

Definition at line 438 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a10
inherited

Definition at line 439 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a11
inherited

Definition at line 439 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a12
inherited

Definition at line 439 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a13
inherited

Definition at line 439 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a20
inherited

Definition at line 440 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a21
inherited

Definition at line 440 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a22
inherited

Definition at line 440 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a23
inherited

Definition at line 440 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a30
inherited

Definition at line 441 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a31
inherited

Definition at line 441 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a32
inherited

Definition at line 441 of file JMatrix4D.hh.

double JMATH::JMatrix4D::a33
inherited

Definition at line 441 of file JMatrix4D.hh.


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