Jpp
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
JMATH::JMatrix3S Class Reference

3 x 3 symmetric matrix More...

#include <JMatrix3S.hh>

Inheritance diagram for JMATH::JMatrix3S:
JMATH::JMatrix3D JMATH::JMath< JMatrix3D > JLANG::JEquals< JFirst_t, JSecond_t >

Public Member Functions

 JMatrix3S ()
 Default constructor. More...
 
 JMatrix3S (const JMatrix3D &A)
 Contructor. More...
 
 JMatrix3S (const double __a00, const double __a10, const double __a11, const double __a20, const double __a21, const double __a22)
 Contructor. More...
 
void invert ()
 Invert matrix. More...
 
JMatrix3DsetIdentity ()
 Set to identity matrix. More...
 
void set (const JMatrix3D &A)
 Set matrix. More...
 
JMatrix3Dreset ()
 Set matrix to the null matrix. More...
 
JMatrix3Dtranspose ()
 Transpose. More...
 
JMatrix3Dnegate ()
 Negate matrix. More...
 
JMatrix3Dadd (const JMatrix3D &A)
 Matrix addition. More...
 
JMatrix3Dsub (const JMatrix3D &A)
 Matrix subtraction. More...
 
JMatrix3Dmul (const double factor)
 Scale matrix. More...
 
JMatrix3Dmul (const JMatrix3D &A, const JMatrix3D &B)
 Matrix multiplication. More...
 
JMatrix3Dmul (const JSecond_t &object)
 Multiply with object. More...
 
JMatrix3Ddiv (const double factor)
 Scale matrix. More...
 
bool equals (const JMatrix3D &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 &__x, double &__y, double &__z) const
 Transform. More...
 

Static Public Member Functions

static const JMatrix3DgetInstance ()
 Get reference to unique instance of this class object. More...
 
static const JMatrix3DgetIdentity ()
 Get reference to unique instance of this class object. More...
 

Public Attributes

double a00
 
double a01
 
double a02
 
double a10
 
double a11
 
double a12
 
double a20
 
double a21
 
double a22
 

Detailed Description

3 x 3 symmetric matrix

Definition at line 26 of file JMatrix3S.hh.

Constructor & Destructor Documentation

◆ JMatrix3S() [1/3]

JMATH::JMatrix3S::JMatrix3S ( )
inline

Default constructor.

Definition at line 33 of file JMatrix3S.hh.

33  :
34  JMatrix3D()
35  {}

◆ JMatrix3S() [2/3]

JMATH::JMatrix3S::JMatrix3S ( const JMatrix3D A)
inline

Contructor.

Parameters
Amatrix

Definition at line 43 of file JMatrix3S.hh.

43  :
44  JMatrix3D(A)
45  {}

◆ JMatrix3S() [3/3]

JMATH::JMatrix3S::JMatrix3S ( const double  __a00,
const double  __a10,
const double  __a11,
const double  __a20,
const double  __a21,
const double  __a22 
)
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)

Definition at line 59 of file JMatrix3S.hh.

61  :
62  JMatrix3D(__a00, __a10, __a20,
63  __a10, __a11, __a21,
64  __a20, __a21, __a22)
65  {}

Member Function Documentation

◆ invert()

void JMATH::JMatrix3S::invert ( )
inline

Invert matrix.

Definition at line 71 of file JMatrix3S.hh.

72  {
73  using std::swap;
74 
75  // LDU decomposition
76 
77  int p0 = 0; // permute row 0
78  int p1 = 0; // permute row 1
79 
80  double val;
81 
82  val = a00;
83 
84  if (fabs(a10) > fabs(val)) {
85  p0 = 1;
86  val = a10;
87  }
88 
89  if (fabs(a20) > fabs(val)) {
90  p0 = 2;
91  val = a20;
92  }
93 
94  switch (p0) {
95 
96  case 1:
97  swap(a00,a10);
98  swap(a01,a11);
99  swap(a02,a12);
100  break;
101 
102  case 2:
103  swap(a00,a20);
104  swap(a01,a21);
105  swap(a02,a22);
106  break;
107  }
108 
109  if (val == 0) {
110  throw JDivisionByZero("LDU decomposition zero pivot");
111  }
112 
113  a10 /= val;
114  a11 -= a10 * a01;
115  a12 -= a10 * a02;
116 
117  a20 /= val;
118  a21 -= a20 * a01;
119  a22 -= a20 * a02;
120 
121  val = a11;
122 
123  if (fabs(a21) > fabs(val)) {
124  p1 = 2;
125  val = a21;
126  }
127 
128  switch (p1) {
129 
130  case 2:
131  swap(a10,a20);
132  swap(a11,a21);
133  swap(a12,a22);
134  break;
135  }
136 
137  if (val == 0) {
138  throw JDivisionByZero("LDU decomposition zero pivot");
139  }
140 
141  a21 /= val;
142  a22 -= a21 * a12;
143 
144  // invert D
145 
146  if (a22 == 0) {
147  throw JDivisionByZero("D matrix not invertable");
148  }
149 
150  a00 = 1.0 / a00;
151  a11 = 1.0 / a11;
152  a22 = 1.0 / a22;
153 
154  // invert U
155 
156  a01 *= -a00;
157  a01 *= a11;
158 
159  a02 *= -a00;
160  a02 -= a01 * a12;
161  a02 *= a22;
162 
163  a12 *= -a11;
164  a12 *= a22;
165 
166  // invert L
167 
168  a21 = -a21;
169  a20 = -a20;
170  a20 -= a21 * a10;
171  a10 = -a10;
172 
173  // U^-1 x L^-1
174 
175  a00 += a01 * a10 + a02 * a20;
176  a01 += a02 * a21;
177  a10 *= a11;
178  a10 += a12 * a20;
179  a11 += a12 * a21;
180  a20 *= a22;
181  a21 *= a22;
182 
183  switch (p1) {
184 
185  case 2:
186  swap(a01,a02);
187  swap(a11,a12);
188  swap(a21,a22);
189  break;
190  }
191 
192  switch (p0) {
193 
194  case 1:
195  swap(a00,a01);
196  swap(a10,a11);
197  swap(a20,a21);
198  break;
199 
200  case 2:
201  swap(a00,a02);
202  swap(a10,a12);
203  swap(a20,a22);
204  break;
205  }
206  }

◆ getInstance()

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

Get reference to unique instance of this class object.

Returns
zero matrix

Definition at line 78 of file JMath/JMatrix3D.hh.

79  {
80  static JMatrix3D matrix;
81 
82  return matrix;
83  }

◆ setIdentity()

JMatrix3D& JMATH::JMatrix3D::setIdentity ( )
inlineinherited

Set to identity matrix.

Returns
this matrix

Definition at line 91 of file JMath/JMatrix3D.hh.

92  {
93  a00 = 1.0; a01 = 0.0; a02 = 0.0;
94  a10 = 0.0; a11 = 1.0; a12 = 0.0;
95  a20 = 0.0; a21 = 0.0; a22 = 1.0;
96 
97  return *this;
98  }

◆ getIdentity()

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

Get reference to unique instance of this class object.

Returns
identity matrix

Definition at line 106 of file JMath/JMatrix3D.hh.

107  {
108  static JMatrix3D matrix(JMatrix3D().setIdentity());
109 
110  return matrix;
111  }

◆ set()

void JMATH::JMatrix3D::set ( const JMatrix3D A)
inlineinherited

Set matrix.

Parameters
Amatrix

Definition at line 119 of file JMath/JMatrix3D.hh.

120  {
121  static_cast<JMatrix3D&>(*this) = A;
122  }

◆ reset()

JMatrix3D& JMATH::JMatrix3D::reset ( )
inlineinherited

Set matrix to the null matrix.

Returns
this matrix

Definition at line 130 of file JMath/JMatrix3D.hh.

131  {
132  *this = JMatrix3D();
133 
134  return *this;
135  }

◆ transpose()

JMatrix3D& JMATH::JMatrix3D::transpose ( )
inlineinherited

Transpose.

Returns
this matrix

Definition at line 143 of file JMath/JMatrix3D.hh.

144  {
145  using std::swap;
146 
147  swap(a10, a01);
148  swap(a20, a02);
149  swap(a21, a12);
150 
151  return *this;
152  }

◆ negate()

JMatrix3D& JMATH::JMatrix3D::negate ( )
inlineinherited

Negate matrix.

Returns
-this matrix

Definition at line 160 of file JMath/JMatrix3D.hh.

161  {
162  a00 = -a00; a01 = -a01; a02 = -a02;
163  a10 = -a10; a11 = -a11; a12 = -a12;
164  a20 = -a20; a21 = -a21; a22 = -a22;
165 
166  return *this;
167  }

◆ add()

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

Matrix addition.

Parameters
Amatrix
Returns
this matrix + A

Definition at line 176 of file JMath/JMatrix3D.hh.

177  {
178  a00 += A.a00; a01 += A.a01; a02 += A.a02;
179  a10 += A.a10; a11 += A.a11; a12 += A.a12;
180  a20 += A.a20; a21 += A.a21; a22 += A.a22;
181 
182  return *this;
183  }

◆ sub()

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

Matrix subtraction.

Parameters
Amatrix
Returns
this matrix - A

Definition at line 192 of file JMath/JMatrix3D.hh.

193  {
194  a00 -= A.a00; a01 -= A.a01; a02 -= A.a02;
195  a10 -= A.a10; a11 -= A.a11; a12 -= A.a12;
196  a20 -= A.a20; a21 -= A.a21; a22 -= A.a22;
197 
198  return *this;
199  }

◆ mul() [1/3]

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

Scale matrix.

Parameters
factorfactor
Returns
this matrix * factor

Definition at line 208 of file JMath/JMatrix3D.hh.

209  {
210  a00 *= factor; a01 *= factor; a02 *= factor;
211  a10 *= factor; a11 *= factor; a12 *= factor;
212  a20 *= factor; a21 *= factor; a22 *= factor;
213 
214  return *this;
215  }

◆ mul() [2/3]

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

Matrix multiplication.

Parameters
Amatrix
Bmatrix
Returns
this matrix

Definition at line 241 of file JMath/JMatrix3D.hh.

243  {
244  a00 = A.a00 * B.a00 + A.a01 * B.a10 + A.a02 * B.a20;
245  a01 = A.a00 * B.a01 + A.a01 * B.a11 + A.a02 * B.a21;
246  a02 = A.a00 * B.a02 + A.a01 * B.a12 + A.a02 * B.a22;
247 
248  a10 = A.a10 * B.a00 + A.a11 * B.a10 + A.a12 * B.a20;
249  a11 = A.a10 * B.a01 + A.a11 * B.a11 + A.a12 * B.a21;
250  a12 = A.a10 * B.a02 + A.a11 * B.a12 + A.a12 * B.a22;
251 
252  a20 = A.a20 * B.a00 + A.a21 * B.a10 + A.a22 * B.a20;
253  a21 = A.a20 * B.a01 + A.a21 * B.a11 + A.a22 * B.a21;
254  a22 = A.a20 * B.a02 + A.a21 * B.a12 + A.a22 * B.a22;
255 
256  return *this;
257  }

◆ mul() [3/3]

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

Multiply with object.

Parameters
objectobject
Returns
result object

Definition at line 273 of file JMath.hh.

274  {
275  return static_cast<JFirst_t&>(*this) = JCalculator<JFirst_t>::calculator.mul(static_cast<const JFirst_t&>(*this), object);
276  }

◆ div()

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

Scale matrix.

Parameters
factorfactor
Returns
this matrix / factor

Definition at line 224 of file JMath/JMatrix3D.hh.

225  {
226  a00 /= factor; a01 /= factor; a02 /= factor;
227  a10 /= factor; a11 /= factor; a12 /= factor;
228  a20 /= factor; a21 /= factor; a22 /= factor;
229 
230  return *this;
231  }

◆ equals()

bool JMATH::JMatrix3D::equals ( const JMatrix3D 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 267 of file JMath/JMatrix3D.hh.

269  {
270  return (fabs(a00 - A.a00) <= eps &&
271  fabs(a01 - A.a01) <= eps &&
272  fabs(a02 - A.a02) <= eps &&
273  fabs(a10 - A.a10) <= eps &&
274  fabs(a11 - A.a11) <= eps &&
275  fabs(a12 - A.a12) <= eps &&
276  fabs(a20 - A.a20) <= eps &&
277  fabs(a21 - A.a21) <= eps &&
278  fabs(a22 - A.a22) <= eps);
279  }

◆ isIdentity()

bool JMATH::JMatrix3D::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 288 of file JMath/JMatrix3D.hh.

289  {
290  return equals(getIdentity(), eps);
291  }

◆ getDeterminant()

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

Get determinant of matrix.

Returns
determinant of matrix

Definition at line 299 of file JMath/JMatrix3D.hh.

300  {
301  double det = 0.0;
302 
303  det += a00 * (a11 * a22 - a21 * a12);
304  det -= a01 * (a10 * a22 - a20 * a12);
305  det += a02 * (a10 * a21 - a20 * a11);
306 
307  return det;
308  }

◆ transform()

void JMATH::JMatrix3D::transform ( double &  __x,
double &  __y,
double &  __z 
) const
inlineinherited

Transform.

Parameters
__xx value
__yy value
__zz value

Definition at line 318 of file JMath/JMatrix3D.hh.

319  {
320  const double x = a00 * __x + a01 * __y + a02 * __z;
321  const double y = a10 * __x + a11 * __y + a12 * __z;
322  const double z = a20 * __x + a21 * __y + a22 * __z;
323 
324  __x = x;
325  __y = y;
326  __z = z;
327  }

Member Data Documentation

◆ a00

double JMATH::JMatrix3D::a00
inherited

Definition at line 385 of file JMath/JMatrix3D.hh.

◆ a01

double JMATH::JMatrix3D::a01
inherited

Definition at line 385 of file JMath/JMatrix3D.hh.

◆ a02

double JMATH::JMatrix3D::a02
inherited

Definition at line 385 of file JMath/JMatrix3D.hh.

◆ a10

double JMATH::JMatrix3D::a10
inherited

Definition at line 386 of file JMath/JMatrix3D.hh.

◆ a11

double JMATH::JMatrix3D::a11
inherited

Definition at line 386 of file JMath/JMatrix3D.hh.

◆ a12

double JMATH::JMatrix3D::a12
inherited

Definition at line 386 of file JMath/JMatrix3D.hh.

◆ a20

double JMATH::JMatrix3D::a20
inherited

Definition at line 387 of file JMath/JMatrix3D.hh.

◆ a21

double JMATH::JMatrix3D::a21
inherited

Definition at line 387 of file JMath/JMatrix3D.hh.

◆ a22

double JMATH::JMatrix3D::a22
inherited

Definition at line 387 of file JMath/JMatrix3D.hh.


The documentation for this class was generated from the following file:
JMATH::JMatrix3D::a01
double a01
Definition: JMath/JMatrix3D.hh:385
JMATH::JMatrix3D::a21
double a21
Definition: JMath/JMatrix3D.hh:387
JMATH::JMatrix3D::a20
double a20
Definition: JMath/JMatrix3D.hh:387
JMATH::JMatrix3D::getIdentity
static const JMatrix3D & getIdentity()
Get reference to unique instance of this class object.
Definition: JMath/JMatrix3D.hh:106
JMATH::JMatrix3D
3 x 3 matrix
Definition: JMath/JMatrix3D.hh:32
JMATH::JMatrix3D::a00
double a00
Definition: JMath/JMatrix3D.hh:385
JMATH::JMatrix3D::a12
double a12
Definition: JMath/JMatrix3D.hh:386
JMATH::JMatrix3D::JMatrix3D
JMatrix3D()
Default constructor.
Definition: JMath/JMatrix3D.hh:44
JMATH::JMatrix3D::equals
bool equals(const JMatrix3D &A, const double eps=std::numeric_limits< double >::min()) const
Equality.
Definition: JMath/JMatrix3D.hh:267
JMATH::JMatrix3D::a22
double a22
Definition: JMath/JMatrix3D.hh:387
JMATH::JMatrix3D::a11
double a11
Definition: JMath/JMatrix3D.hh:386
JMATH::JCalculator
Auxiliary class for arithmetic operations on objects.
Definition: JCalculator.hh:18
p1
TPaveText * p1
Definition: JDrawModule3D.cc:35
JMATH::JMatrix3D::a02
double a02
Definition: JMath/JMatrix3D.hh:385
JMATH::JMatrix3D::a10
double a10
Definition: JMath/JMatrix3D.hh:386
JMATH::JMatrix3D::setIdentity
JMatrix3D & setIdentity()
Set to identity matrix.
Definition: JMath/JMatrix3D.hh:91