Jpp 21.0.0-rc.3
the software that should make you happy
Loading...
Searching...
No Matches
JGEOMETRY3D::JRotation3D Class Reference

Rotation matrix. More...

#include <JRotation3D.hh>

Inheritance diagram for JGEOMETRY3D::JRotation3D:
JMATH::JMatrix3D JMATH::JMath< JFirst_t, JSecond_t > JMATH::JMath< JMatrix3D > JLANG::JEquals< JFirst_t, JSecond_t > JDETECTOR::JRotation JGEOMETRY3D::JEulerMatrix3D JGEOMETRY3D::JTransformation3D

Public Member Functions

 JRotation3D ()
 Default constructor (= identity matrix).
 
 JRotation3D (const JAngle3D &dir)
 Constructor.
 
 JRotation3D (const JVersor3D &dir)
 Constructor.
 
 JRotation3D (const JVersor3Z &dir)
 Constructor.
 
 JRotation3D (const JRotation3X &R)
 Constructor.
 
 JRotation3D (const JRotation3Y &R)
 Constructor.
 
 JRotation3D (const JRotation3Z &R)
 Constructor.
 
 JRotation3D (const JQuaternion3D &Q)
 Constructor.
 
const JRotation3DgetRotation () const
 Get rotation.
 
 operator JQuaternion3D () const
 Type conversion operator.
 
JRotation3Dtranspose ()
 Transpose.
 
JRotation3Dmul (const JRotation3D &A, const JRotation3D &B)
 Matrix multiplication.
 
void rotate (double &__x, double &__y, double &__z) const
 Rotate.
 
void rotate_back (double &__x, double &__y, double &__z) const
 Rotate back.
 
JMatrix3DsetIdentity ()
 Set to identity matrix.
 
void set (const JMatrix3D &A)
 Set matrix.
 
JMatrix3Dreset ()
 Set matrix to the null matrix.
 
JMatrix3Dnegate ()
 Negate matrix.
 
JMatrix3Dadd (const JMatrix3D &A)
 Matrix addition.
 
JMatrix3Dsub (const JMatrix3D &A)
 Matrix subtraction.
 
JMatrix3Dmul (const double factor)
 Scale matrix.
 
JMatrix3Dmul (const JMatrix3D &A, const JMatrix3D &B)
 Matrix multiplication.
 
JMatrix3Dmul (const JSecond_t &object)
 Multiply with object.
 
JMatrix3Ddiv (const double factor)
 Scale matrix.
 
bool equals (const JMatrix3D &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 &__x, double &__y, double &__z) const
 Transform.
 
JFirst_t & mul (const JSecond_t &object)
 Multiply with object.
 

Static Public Member Functions

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

Public Attributes

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

Detailed Description

Rotation matrix.

Definition at line 148 of file JRotation3D.hh.

Constructor & Destructor Documentation

◆ JRotation3D() [1/8]

JGEOMETRY3D::JRotation3D::JRotation3D ( )
inline

Default constructor (= identity matrix).

Definition at line 159 of file JRotation3D.hh.

159 :
160 JMatrix3D()
161 {
162 setIdentity();
163 }
JMatrix3D()
Default constructor.
JMatrix3D & setIdentity()
Set to identity matrix.

◆ JRotation3D() [2/8]

JGEOMETRY3D::JRotation3D::JRotation3D ( const JAngle3D & dir)
inline

Constructor.

The matrix is defined such that the rotation of a vector in the given direction ends up along the z-axis and the back rotation of a vector parallel to the z-axis ends up in the given direction.

Parameters
dirdirection

Definition at line 174 of file JRotation3D.hh.

174 :
175 JMatrix3D()
176 {
177 const double ct = cos(dir.getTheta());
178 const double st = sin(dir.getTheta());
179 const double cp = cos(dir.getPhi());
180 const double sp = sin(dir.getPhi());
181
182 a00 = ct*cp; a01 = ct*sp; a02 = -st;
183 a10 = -sp; a11 = cp; a12 = 0.0;
184 a20 = st*cp; a21 = st*sp; a22 = +ct;
185 }

◆ JRotation3D() [3/8]

JGEOMETRY3D::JRotation3D::JRotation3D ( const JVersor3D & dir)
inline

Constructor.

The matrix is defined such that the rotation of a vector in the given direction ends up along the z-axis and the back rotation of a vector parallel to the z-axis ends up in the given direction.

Parameters
dirdirection

Definition at line 196 of file JRotation3D.hh.

196 :
197 JMatrix3D()
198 {
199 const double ct = dir.getDZ();
200 const double st = sqrt((1.0 + ct)*(1.0 - ct));
201 const double phi = atan2(dir.getDY(), dir.getDX());
202 const double cp = cos(phi);
203 const double sp = sin(phi);
204
205 a00 = ct*cp; a01 = ct*sp; a02 = -st;
206 a10 = -sp; a11 = cp; a12 = 0.0;
207 a20 = st*cp; a21 = st*sp; a22 = +ct;
208 }

◆ JRotation3D() [4/8]

JGEOMETRY3D::JRotation3D::JRotation3D ( const JVersor3Z & dir)
inline

Constructor.

The matrix is defined such that the rotation of a vector in the given direction ends up along the z-axis and the back rotation of a vector parallel to the z-axis ends up in the given direction.

Parameters
dirdirection

Definition at line 219 of file JRotation3D.hh.

219 :
220 JMatrix3D()
221 {
222 const double ct = dir.getDZ();
223 const double st = sqrt((1.0 + ct)*(1.0 - ct));
224 const double phi = atan2(dir.getDY(), dir.getDX());
225 const double cp = cos(phi);
226 const double sp = sin(phi);
227
228 a00 = ct*cp; a01 = ct*sp; a02 = -st;
229 a10 = -sp; a11 = cp; a12 = 0.0;
230 a20 = st*cp; a21 = st*sp; a22 = +ct;
231 }

◆ JRotation3D() [5/8]

JGEOMETRY3D::JRotation3D::JRotation3D ( const JRotation3X & R)
inline

Constructor.

Parameters
R2D rotation matrix around X-axis

Definition at line 239 of file JRotation3D.hh.

239 :
240 JMatrix3D()
241 {
242 a00 = 1.0; a01 = 0.0; a02 = 0.0;
243 a10 = 0.0; a11 = R.a00; a12 = R.a01;
244 a20 = 0.0; a21 = R.a10; a22 = R.a11;
245 }

◆ JRotation3D() [6/8]

JGEOMETRY3D::JRotation3D::JRotation3D ( const JRotation3Y & R)
inline

Constructor.

Parameters
R2D rotation matrix around Y-axis

Definition at line 253 of file JRotation3D.hh.

253 :
254 JMatrix3D()
255 {
256 a00 = R.a00; a01 = 0.0; a02 = R.a01;
257 a10 = 0.0; a11 = 1.0; a12 = 0.0;
258 a20 = R.a10; a21 = 0.0; a22 = R.a11;
259 }

◆ JRotation3D() [7/8]

JGEOMETRY3D::JRotation3D::JRotation3D ( const JRotation3Z & R)
inline

Constructor.

Parameters
R2D rotation matrix around Z-axis

Definition at line 267 of file JRotation3D.hh.

267 :
268 JMatrix3D()
269 {
270 a00 = R.a00; a01 = R.a01; a02 = 0.0;
271 a10 = R.a10; a11 = R.a11; a12 = 0.0;
272 a20 = 0.0; a21 = 0.0; a22 = 1.0;
273 }

◆ JRotation3D() [8/8]

JGEOMETRY3D::JRotation3D::JRotation3D ( const JQuaternion3D & Q)
inline

Constructor.

Parameters
Qquaternion

Definition at line 281 of file JRotation3D.hh.

281 :
282 JMatrix3D()
283 {
284 const double a2 = Q.getA()*Q.getA();
285 const double b2 = Q.getB()*Q.getB();
286 const double c2 = Q.getC()*Q.getC();
287 const double d2 = Q.getD()*Q.getD();
288
289 const double ab = Q.getA()*Q.getB();
290 const double ac = Q.getA()*Q.getC();
291 const double ad = Q.getA()*Q.getD();
292
293 const double bc = Q.getB()*Q.getC();
294 const double bd = Q.getB()*Q.getD();
295
296 const double cd = Q.getC()*Q.getD();
297
298 a00 = a2 + b2 - c2 - d2; a01 = 2.0*bc - 2.0*ad; a02 = 2.0*bd + 2.0*ac;
299 a10 = 2.0*bc + 2.0*ad; a11 = a2 - b2 + c2 - d2; a12 = 2.0*cd - 2.0*ab;
300 a20 = 2.0*bd - 2.0*ac; a21 = 2.0*cd + 2.0*ab; a22 = a2 - b2 - c2 + d2;
301 }

Member Function Documentation

◆ getRotation()

const JRotation3D & JGEOMETRY3D::JRotation3D::getRotation ( ) const
inline

Get rotation.

Returns
rotation

Definition at line 309 of file JRotation3D.hh.

310 {
311 return static_cast<const JRotation3D&>(*this);
312 }
JRotation3D()
Default constructor (= identity matrix).

◆ operator JQuaternion3D()

JGEOMETRY3D::JRotation3D::operator JQuaternion3D ( ) const
inline

Type conversion operator.

Returns
quaternion

Definition at line 320 of file JRotation3D.hh.

321 {
322 const double q2 = 0.25 * (1.0 + a00 + a11 + a22);
323
324 if (q2 > 0.0) {
325
326 const double a = sqrt(q2);
327 const double w = 0.25 / a;
328 const double b = (a21 - a12) * w;
329 const double c = (a02 - a20) * w;
330 const double d = (a10 - a01) * w;
331
332 return JQuaternion3D(a,b,c,d).normalise();
333 }
334
335 return JQuaternion3D(1.0, 0.0, 0.0, 0.0);
336 }

◆ transpose()

JRotation3D & JGEOMETRY3D::JRotation3D::transpose ( )
inline

Transpose.

Definition at line 342 of file JRotation3D.hh.

343 {
344 static_cast<JMatrix3D&>(*this).transpose();
345
346 return *this;
347 }

◆ mul() [1/5]

JRotation3D & JGEOMETRY3D::JRotation3D::mul ( const JRotation3D & A,
const JRotation3D & B )
inline

Matrix multiplication.

Parameters
Amatrix
Bmatrix
Returns
this matrix

Definition at line 357 of file JRotation3D.hh.

359 {
360 static_cast<JMatrix3D&>(*this).mul(A, B);
361
362 return *this;
363 }

◆ rotate()

void JGEOMETRY3D::JRotation3D::rotate ( double & __x,
double & __y,
double & __z ) const
inline

Rotate.

Parameters
__xx value
__yy value
__zz value

Definition at line 373 of file JRotation3D.hh.

374 {
375 const double x = a00 * __x + a01 * __y + a02 * __z;
376 const double y = a10 * __x + a11 * __y + a12 * __z;
377 const double z = a20 * __x + a21 * __y + a22 * __z;
378
379 __x = x;
380 __y = y;
381 __z = z;
382 }

◆ rotate_back()

void JGEOMETRY3D::JRotation3D::rotate_back ( double & __x,
double & __y,
double & __z ) const
inline

Rotate back.

Parameters
__xx value
__yy value
__zz value

Definition at line 392 of file JRotation3D.hh.

393 {
394 const double x = a00 * __x + a10 * __y + a20 * __z;
395 const double y = a01 * __x + a11 * __y + a21 * __z;
396 const double z = a02 * __x + a12 * __y + a22 * __z;
397
398 __x = x;
399 __y = y;
400 __z = z;
401 }

◆ 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 }

◆ 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() [2/5]

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() [3/5]

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() [4/5]

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

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 }
static const JMatrix3D & getIdentity()
Get reference to unique instance of this class object.
bool equals(const JMatrix3D &A, const double eps=std::numeric_limits< double >::min()) const
Equality.

◆ 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 }

◆ mul() [5/5]

template<class JFirst_t , class JSecond_t >
JFirst_t & JMATH::JMath< JFirst_t, 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 }

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: