Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
Transform3D.h
Go to the documentation of this file.
1// -*- C++ -*-
2// ---------------------------------------------------------------------------
3//
4// This file is a part of the CLHEP - a Class Library for High Energy Physics.
5//
6// Hep geometrical 3D Transformation class
7//
8// Author: Evgeni Chernyaev <[email protected]>
9//
10// ******************************************
11// * *
12// * Transform *
13// * / / \ \ *
14// * -------- / \ -------- *
15// * / / \ \ *
16// * Rotate Translate Reflect Scale *
17// * / | \ / | \ / | \ / | \ *
18// * X Y Z X Y Z X Y Z X Y Z *
19// * *
20// ******************************************
21//
22// Identity transformation:
23// Transform3D::Identity - global identity transformation;
24// any constructor without parameters, e.g. Transform3D();
25// m.setIdentity() - set "m" to identity;
26//
27// General transformations:
28// Transform3D(m,v) - transformation given by Rotation "m"
29// and CLHEP::Hep3Vector "v";
30// Transform3D(a0,a1,a2, b0,b1,b2) - transformation given by initial
31// and transformed positions of three points;
32// Rotations:
33// Rotate3D(m) - rotation given by CLHEP::HepRotation "m";
34// Rotate3D(ang,v) - rotation through the angle "ang" around
35// vector "v";
36// Rotate3D(ang,p1,p2) - rotation through the angle "ang"
37// counterclockwise around the axis given by
38// two points p1->p2;
39// Rotate3D(a1,a2, b1,b2) - rotation around the origin defined by initial
40// and transformed positions of two points;
41// RotateX3D(ang) - rotation around X-axis;
42// RotateY3D(ang) - rotation around Y-axis;
43// RotateZ3D(ang) - rotation around Z-axis;
44//
45// Translations:
46// Translate3D(v) - translation given by CLHEP::Hep3Vector "v";
47// Translate3D(dx,dy,dz) - translation on vector (dx,dy,dz);
48// TraslateX3D(dx) - translation along X-axis;
49// TraslateY3D(dy) - translation along Y-axis;
50// TraslateZ3D(dz) - translation along Z-axis;
51//
52// Reflections:
53// Reflect3D(a,b,c,d) - reflection in the plane a*x+b*y+c*z+d=0;
54// Reflect3D(normal,p) - reflection in the plane going through "p"
55// and whose normal is equal to "normal";
56// ReflectX3D(a) - reflect X in the plane x=a (default a=0);
57// ReflectY3D(a) - reflect Y in the plane y=a (default a=0);
58// ReflectZ3D(a) - reflect Z in the plane z=a (default a=0);
59//
60// Scalings:
61// Scale3D(sx,sy,sz) - general scaling with factors "sx","sy","sz"
62// along X, Y and Z;
63// Scale3D(s) - scaling with constant factor "s" along all
64// directions;
65// ScaleX3D(sx) - scale X;
66// ScaleY3D(sy) - scale Y;
67// ScaleZ3D(sz) - scale Z;
68//
69// Inverse transformation:
70// m.inverse() or - returns inverse transformation;
71//
72// Compound transformation:
73// m3 = m2 * m1 - it is relatively slow in comparison with
74// transformation of a vector. Use parenthesis
75// to avoid this operation (see example below);
76// Transformation of point:
77// p2 = m * p1
78//
79// Transformation of vector:
80// v2 = m * v1
81//
82// Transformation of normal:
83// n2 = m * n1
84//
85// The following table explains how different transformations affect
86// point, vector and normal. "+" means affect, "-" means do not affect,
87// "*" meas affect but in different way than "+"
88//
89// Point Vector Normal
90// -------------+-------+-------+-------
91// Rotation ! + ! + ! +
92// Translation ! + ! - ! -
93// Reflection ! + ! + ! *
94// Scaling ! + ! + ! *
95// -------------+-------+-------+-------
96//
97// Example of the usage:
98//
99// Transform3D m1, m2, m3;
100// HepVector3D v2, v1(0,0,0);
101//
102// m1 = Rotate3D(angle, Vector3D(1,1,1));
103// m2 = Translate3D(dx,dy,dz);
104// m3 = m1.inverse();
105//
106// v2 = m3*(m2*(m1*v1));
107//
108// History:
109// 24.09.96 E.Chernyaev - initial version
110//
111// 26.02.97 E.Chernyaev
112// - added global Identity by request of John Allison
113// (to avoid problems with compilation on HP)
114// - added getRotation and getTranslation
115//
116// 29.01.01 E.Chernyaev - added subscripting
117// 11.06.01 E.Chernyaev - added getDecomposition
118
119#ifndef HEP_TRANSFROM3D_H
120#define HEP_TRANSFROM3D_H
121
123
124namespace HepGeom {
125
126 template<class T> class Point3D;
127 template<class T> class Vector3D;
128 template<class T> class Normal3D;
129
130 class Translate3D;
131 class Rotate3D;
132 class Scale3D;
133
134 /**
135 * Class for transformation of 3D geometrical objects.
136 * It allows different translations, rotations, scalings and reflections.
137 * Several specialized classes are derived from it:
138 *
139 * TranslateX3D, TranslateY3D, TranslateZ3D, Translate3D,<br>
140 * RotateX3D, RotateY3D, RotateZ3D, Rotate3D, <br>
141 * ScaleX3D, ScaleY3D, ScaleZ3D, Scale3D, <br>
142 * ReflectX3D, ReflectY3D, ReflectZ3D, Reflect3D.
143 *
144 * The idea behind these classes is to provide some additional constructors
145 * for Transform3D, they normally should not be used as separate classes.
146 *
147 * Example:
148 * @code
149 * HepGeom::Transform3D m;
150 * m = HepGeom::TranslateX3D(10.*cm);
151 * @endcode
152 *
153 * Remark:
154 * For the reason that the operator* is left associative, the notation
155 * @code
156 * v2 = m3*(m2*(m1*v1));
157 * @endcode
158 * is much more effective then the notation
159 * @code
160 * v2 = m3*m2*m1*v1;
161 * @endcode
162 * In the first case three operations Transform3D*Vector3D are executed,
163 * in the second case two operations Transform3D*Transform3D and one
164 * Transform3D*Vector3D are performed. Transform3D*Transform3D is
165 * roughly three times slower than Transform3D*Vector3D.
166 *
167 * @author <[email protected]>
168 * @ingroup geometry
169 */
171 protected:
172 double xx_, xy_, xz_, dx_, // 4x3 Transformation Matrix
175
176 // Protected constructor
177 Transform3D(double XX, double XY, double XZ, double DX,
178 double YX, double YY, double YZ, double DY,
179 double ZX, double ZY, double ZZ, double DZ)
180 : xx_(XX), xy_(XY), xz_(XZ), dx_(DX),
181 yx_(YX), yy_(YY), yz_(YZ), dy_(DY),
182 zx_(ZX), zy_(ZY), zz_(ZZ), dz_(DZ) {}
183
184 // Set transformation matrix
185 void setTransform(double XX, double XY, double XZ, double DX,
186 double YX, double YY, double YZ, double DY,
187 double ZX, double ZY, double ZZ, double DZ) {
188 xx_ = XX; xy_ = XY; xz_ = XZ; dx_ = DX;
189 yx_ = YX; yy_ = YY; yz_ = YZ; dy_ = DY;
190 zx_ = ZX; zy_ = ZY; zz_ = ZZ; dz_ = DZ;
191 }
192
193 public:
194 /**
195 * Global identity transformation. */
197
198 // Helper class for implemention of C-style subscripting r[i][j]
200 public:
201 inline Transform3D_row(const Transform3D &, int);
202 inline double operator [] (int) const;
203 private:
204 const Transform3D & rr;
205 int ii;
206 };
207
208 /**
209 * Default constructor - sets the Identity transformation. */
211 : xx_(1), xy_(0), xz_(0), dx_(0),
212 yx_(0), yy_(1), yz_(0), dy_(0),
213 zx_(0), zy_(0), zz_(1), dz_(0) {}
214
215 /**
216 * Constructor: rotation and then translation. */
217 inline Transform3D(const CLHEP::HepRotation & mt, const CLHEP::Hep3Vector & v);
218
219 /**
220 * Constructor: transformation of basis (assumed - no reflection). */
221 Transform3D(const Point3D<double> & fr0,
222 const Point3D<double> & fr1,
223 const Point3D<double> & fr2,
224 const Point3D<double> & to0,
225 const Point3D<double> & to1,
226 const Point3D<double> & to2);
227
228 /**
229 * Copy constructor. */
230 Transform3D(const Transform3D & mt) = default;
231
232 /**
233 * Move constructor. */
234 Transform3D(Transform3D && mt) = default;
235
236 /**
237 * Destructor. */
238 ~Transform3D() = default;
239
240 /**
241 * Assignment. */
242 Transform3D & operator=(const Transform3D & mt) = default;
243
244 /**
245 * Move assignment. */
247
248 /**
249 * Returns object of the helper class for C-style subscripting r[i][j] */
250 inline const Transform3D_row operator [] (int) const;
251
252 /** Fortran-style subscripting: returns (i,j) element of the matrix. */
253 double operator () (int, int) const;
254
255 /**
256 * Gets xx-element of the transformation matrix. */
257 double xx() const { return xx_; }
258 /**
259 * Gets xy-element of the transformation matrix. */
260 double xy() const { return xy_; }
261 /**
262 * Gets xz-element of the transformation matrix. */
263 double xz() const { return xz_; }
264 /**
265 * Gets yx-element of the transformation matrix. */
266 double yx() const { return yx_; }
267 /**
268 * Gets yy-element of the transformation matrix. */
269 double yy() const { return yy_; }
270 /**
271 * Gets yz-element of the transformation matrix. */
272 double yz() const { return yz_; }
273 /**
274 * Gets zx-element of the transformation matrix. */
275 double zx() const { return zx_; }
276 /**
277 * Gets zy-element of the transformation matrix. */
278 double zy() const { return zy_; }
279 /**
280 * Gets zz-element of the transformation matrix. */
281 double zz() const { return zz_; }
282 /**
283 * Gets dx-element of the transformation matrix. */
284 double dx() const { return dx_; }
285 /**
286 * Gets dy-element of the transformation matrix. */
287 double dy() const { return dy_; }
288 /**
289 * Gets dz-element of the transformation matrix. */
290 double dz() const { return dz_; }
291
292 /**
293 * Sets the Identity transformation. */
294 void setIdentity() {
295 xy_= xz_= dx_= yx_= yz_= dy_= zx_= zy_= dz_= 0; xx_= yy_= zz_= 1;
296 }
297
298 /**
299 * Returns the inverse transformation. */
300 Transform3D inverse() const;
301
302 /**
303 * Transformation by another Transform3D. */
304 Transform3D operator*(const Transform3D & b) const;
305
306 /**
307 * Decomposition of general transformation.
308 * This function gets decomposition of the transformation
309 * in three consequentive specific transformations: Scale3D,
310 * then Rotate3D, then Translate3, i.e.
311 * @code
312 * Transform3D = Translate3D * Rotate3D * Scale3D
313 * @endcode
314 *
315 * @param scale output: scaling transformation;
316 * if there was a reflection, then scale factor for
317 * z-component (scale(2,2)) will be negative.
318 * @param rotation output: rotation transformaion.
319 * @param translation output: translation transformaion.
320 */
321 void getDecomposition(Scale3D & scale,
322 Rotate3D & rotation,
323 Translate3D & translation) const;
324
325 /**
326 * Returns true if the difference between corresponding
327 * matrix elements is less than the tolerance.
328 */
329 bool isNear(const Transform3D & t, double tolerance = 2.2E-14 ) const;
330
331 /**
332 * Extracts the rotation matrix.
333 * This functions is obsolete - use getDecomposition() instead.
334 */
336
337 /**
338 * Extracts the translation vector.
339 * This functions is obsolete - use getDecomposition() instead.
340 */
342
343 /**
344 * Test for equality. */
345 bool operator == (const Transform3D & transform) const;
346
347 /**
348 * Test for inequality. */
349 bool operator != (const Transform3D & transform) const {
350 return ! operator==(transform);
351 }
352 };
353
354 // R O T A T I O N S
355
356 /**
357 * Constructs a rotation transformation.
358 * This class provides additional constructors for Transform3D
359 * and should not be used as a separate class.
360 *
361 * Example of use:
362 * @code
363 * Transform3D m;
364 * m = Rotate3D(30.*deg, HepVector3D(1.,1.,1.));
365 * @endcode
366 *
367 * @author <[email protected]>
368 * @ingroup geometry
369 */
370 class Rotate3D : public Transform3D {
371 public:
372 /**
373 * Default constructor: sets the Identity transformation. */
375
376 /**
377 * Constructor from CLHEP::HepRotation. */
378 inline Rotate3D(const CLHEP::HepRotation &mt);
379
380 /**
381 * Constructor from angle and axis given by two points.
382 * @param a angle of rotation
383 * @param p1 begin point of the axis
384 * @param p2 end point of the axis
385 */
386 Rotate3D(double a,
387 const Point3D<double> & p1,
388 const Point3D<double> & p2);
389
390 /**
391 * Constructor from angle and axis.
392 * @param a angle of rotation
393 * @param v axis of rotation
394 */
395 inline Rotate3D(double a, const Vector3D<double> & v);
396
397 /**
398 * Constructor for rotation given by original and rotated position of
399 * two points. It is assumed that there is no reflection.
400 * @param fr1 original position of 1st point
401 * @param fr2 original position of 2nd point
402 * @param to1 rotated position of 1st point
403 * @param to2 rotated position of 2nd point
404 */
405 inline Rotate3D(const Point3D<double> & fr1,
406 const Point3D<double> & fr2,
407 const Point3D<double> & to1,
408 const Point3D<double> & to2);
409 };
410
411 /**
412 * Constructs a rotation around x-axis.
413 * This class provides additional constructors for Transform3D
414 * and should not be used as a separate class.
415 *
416 * Example of use:
417 * @code
418 * Transform3D m;
419 * m = RotateX3D(30.*deg);
420 * @endcode
421 *
422 * @author <[email protected]>
423 * @ingroup geometry
424 */
425 class RotateX3D : public Rotate3D {
426 public:
427 /**
428 * Default constructor: sets the Identity transformation. */
430
431 /**
432 * Constructs a rotation around x-axis by angle a. */
433 RotateX3D(double a) {
434 double cosa = std::cos(a), sina = std::sin(a);
435 setTransform(1,0,0,0, 0,cosa,-sina,0, 0,sina,cosa,0);
436 }
437 };
438
439 /**
440 * Constructs a rotation around y-axis.
441 * This class provides additional constructors for Transform3D
442 * and should not be used as a separate class.
443 *
444 * Example of use:
445 * @code
446 * Transform3D m;
447 * m = RotateY3D(30.*deg);
448 * @endcode
449 *
450 * @author <[email protected]>
451 * @ingroup geometry
452 */
453 class RotateY3D : public Rotate3D {
454 public:
455 /**
456 * Default constructor: sets the Identity transformation. */
458
459 /**
460 * Constructs a rotation around y-axis by angle a. */
461 RotateY3D(double a) {
462 double cosa = std::cos(a), sina = std::sin(a);
463 setTransform(cosa,0,sina,0, 0,1,0,0, -sina,0,cosa,0);
464 }
465 };
466
467 /**
468 * Constructs a rotation around z-axis.
469 * This class provides additional constructors for Transform3D
470 * and should not be used as a separate class.
471 *
472 * Example of use:
473 * @code
474 * Transform3D m;
475 * m = RotateZ3D(30.*deg);
476 * @endcode
477 *
478 * @author <[email protected]>
479 * @ingroup geometry
480 */
481 class RotateZ3D : public Rotate3D {
482 public:
483 /**
484 * Default constructor: sets the Identity transformation. */
486
487 /**
488 * Constructs a rotation around z-axis by angle a. */
489 RotateZ3D(double a) {
490 double cosa = std::cos(a), sina = std::sin(a);
491 setTransform(cosa,-sina,0,0, sina,cosa,0,0, 0,0,1,0);
492 }
493 };
494
495 // T R A N S L A T I O N S
496
497 /**
498 * Constructs a translation transformation.
499 * This class provides additional constructors for Transform3D
500 * and should not be used as a separate class.
501 *
502 * Example of use:
503 * @code
504 * Transform3D m;
505 * m = Translate3D(10.,20.,30.);
506 * @endcode
507 *
508 * @author <[email protected]>
509 * @ingroup geometry
510 */
511 class Translate3D : public Transform3D {
512 public:
513 /**
514 * Default constructor: sets the Identity transformation. */
516
517 /**
518 * Constructor from CLHEP::Hep3Vector. */
520
521 /**
522 * Constructor from three numbers. */
523 Translate3D(double x, double y, double z)
524 : Transform3D(1,0,0,x, 0,1,0,y, 0,0,1,z) {}
525 };
526
527 /**
528 * Constructs a translation along x-axis.
529 * This class provides additional constructors for Transform3D
530 * and should not be used as a separate class.
531 *
532 * Example of use:
533 * @code
534 * Transform3D m;
535 * m = TranslateX3D(10.);
536 * @endcode
537 *
538 * @author <[email protected]>
539 * @ingroup geometry
540 */
541 class TranslateX3D : public Translate3D {
542 public:
543 /**
544 * Default constructor: sets the Identity transformation. */
546
547 /**
548 * Constructor from a number. */
549 TranslateX3D(double x) : Translate3D(x, 0, 0) {}
550 };
551
552 /**
553 * Constructs a translation along y-axis.
554 * This class provides additional constructors for Transform3D
555 * and should not be used as a separate class.
556 *
557 * Example of use:
558 * @code
559 * Transform3D m;
560 * m = TranslateY3D(10.);
561 * @endcode
562 *
563 * @author <[email protected]>
564 * @ingroup geometry
565 */
566 class TranslateY3D : public Translate3D {
567 public:
568 /**
569 * Default constructor: sets the Identity transformation. */
571
572 /**
573 * Constructor from a number. */
574 TranslateY3D(double y) : Translate3D(0, y, 0) {}
575 };
576
577 /**
578 * Constructs a translation along z-axis.
579 * This class provides additional constructors for Transform3D
580 * and should not be used as a separate class.
581 *
582 * Example of use:
583 * @code
584 * Transform3D m;
585 * m = TranslateZ3D(10.);
586 * @endcode
587 *
588 * @author <[email protected]>
589 * @ingroup geometry
590 */
591 class TranslateZ3D : public Translate3D {
592 public:
593 /**
594 * Default constructor: sets the Identity transformation. */
596
597 /**
598 * Constructor from a number. */
599 TranslateZ3D(double z) : Translate3D(0, 0, z) {}
600 };
601
602 // R E F L E C T I O N S
603
604 /**
605 * Constructs a reflection transformation.
606 * This class provides additional constructors for Transform3D
607 * and should not be used as a separate class.
608 *
609 * Example of use:
610 * @code
611 * Transform3D m;
612 * m = Reflect3D(1.,1.,1.,0.);
613 * @endcode
614 *
615 * @author <[email protected]>
616 * @ingroup geometry
617 */
618 class Reflect3D : public Transform3D {
619 protected:
620 Reflect3D(double XX, double XY, double XZ, double DX,
621 double YX, double YY, double YZ, double DY,
622 double ZX, double ZY, double ZZ, double DZ)
623 : Transform3D(XX,XY,XZ,DX, YX,YY,YZ,DY, ZX,ZY,ZZ,DZ) {}
624
625 public:
626 /**
627 * Default constructor: sets the Identity transformation. */
629
630 /**
631 * Constructor from four numbers.
632 * Sets reflection in a plane a*x+b*y+c*z+d=0
633 */
634 Reflect3D(double a, double b, double c, double d);
635
636 /**
637 * Constructor from a plane given by its normal and origin. */
638 inline Reflect3D(const Normal3D<double> & normal,
639 const Point3D<double> & point);
640 };
641
642 /**
643 * Constructs reflection in a plane x=const.
644 * This class provides additional constructors for Transform3D
645 * and should not be used as a separate class.
646 *
647 * Example of use:
648 * @code
649 * Transform3D m;
650 * m = ReflectX3D(1.);
651 * @endcode
652 *
653 * @author <[email protected]>
654 * @ingroup geometry
655 */
656 class ReflectX3D : public Reflect3D {
657 public:
658 /**
659 * Constructor from a number. */
660 ReflectX3D(double x=0) : Reflect3D(-1,0,0,x+x, 0,1,0,0, 0,0,1,0) {}
661 };
662
663 /**
664 * Constructs reflection in a plane y=const.
665 * This class provides additional constructors for Transform3D
666 * and should not be used as a separate class.
667 *
668 * Example of use:
669 * @code
670 * Transform3D m;
671 * m = ReflectY3D(1.);
672 * @endcode
673 *
674 * @author <[email protected]>
675 * @ingroup geometry
676 */
677 class ReflectY3D : public Reflect3D {
678 public:
679 /**
680 * Constructor from a number. */
681 ReflectY3D(double y=0) : Reflect3D(1,0,0,0, 0,-1,0,y+y, 0,0,1,0) {}
682 };
683
684 /**
685 * Constructs reflection in a plane z=const.
686 * This class provides additional constructors for Transform3D
687 * and should not be used as a separate class.
688 *
689 * Example of use:
690 * @code
691 * Transform3D m;
692 * m = ReflectZ3D(1.);
693 * @endcode
694 *
695 * @author <[email protected]>
696 * @ingroup geometry
697 */
698 class ReflectZ3D : public Reflect3D {
699 public:
700 /**
701 * Constructor from a number. */
702 ReflectZ3D(double z=0) : Reflect3D(1,0,0,0, 0,1,0,0, 0,0,-1,z+z) {}
703 };
704
705 // S C A L I N G S
706
707 /**
708 * Constructs a scaling transformation.
709 * This class provides additional constructors for Transform3D
710 * and should not be used as a separate class.
711 *
712 * Example of use:
713 * @code
714 * Transform3D m;
715 * m = Scale3D(2.);
716 * @endcode
717 *
718 * @author <[email protected]>
719 * @ingroup geometry
720 */
721 class Scale3D : public Transform3D {
722 public:
723 /**
724 * Default constructor: sets the Identity transformation. */
726
727 /**
728 * Constructor from three numbers - scale factors in different directions.
729 */
730 Scale3D(double x, double y, double z)
731 : Transform3D(x,0,0,0, 0,y,0,0, 0,0,z,0) {}
732
733 /**
734 * Constructor from a number: sets uniform scaling in all directions. */
735 Scale3D(double sc)
736 : Transform3D(sc,0,0,0, 0,sc,0,0, 0,0,sc,0) {}
737 };
738
739 /**
740 * Constructs a scaling transformation in x-direction.
741 * This class provides additional constructors for Transform3D
742 * and should not be used as a separate class.
743 *
744 * Example of use:
745 * @code
746 * Transform3D m;
747 * m = ScaleX3D(2.);
748 * @endcode
749 *
750 * @author <[email protected]>
751 * @ingroup geometry
752 */
753 class ScaleX3D : public Scale3D {
754 public:
755 /**
756 * Default constructor: sets the Identity transformation. */
758
759 /**
760 * Constructor from a number (scale factor in x-direction). */
761 ScaleX3D(double x) : Scale3D(x, 1, 1) {}
762 };
763
764 /**
765 * Constructs a scaling transformation in y-direction.
766 * This class provides additional constructors for Transform3D
767 * and should not be used as a separate class.
768 *
769 * Example of use:
770 * @code
771 * Transform3D m;
772 * m = ScaleY3D(2.);
773 * @endcode
774 *
775 * @author <[email protected]>
776 * @ingroup geometry
777 */
778 class ScaleY3D : public Scale3D {
779 public:
780 /**
781 * Default constructor: sets the Identity transformation. */
783
784 /**
785 * Constructor from a number (scale factor in y-direction). */
786 ScaleY3D(double y) : Scale3D(1, y, 1) {}
787 };
788
789 /**
790 * Constructs a scaling transformation in z-direction.
791 * This class provides additional constructors for Transform3D
792 * and should not be used as a separate class.
793 *
794 * Example of use:
795 * @code
796 * Transform3D m;
797 * m = ScaleZ3D(2.);
798 * @endcode
799 *
800 * @author <[email protected]>
801 * @ingroup geometry
802 */
803 class ScaleZ3D : public Scale3D {
804 public:
805 /**
806 * Default constructor: sets the Identity transformation. */
808 /**
809 * Constructor from a number (scale factor in z-direction). */
810 ScaleZ3D(double z) : Scale3D(1, 1, z) {}
811 };
812} /* namespace HepGeom */
813
814#include "CLHEP/Geometry/Transform3D.icc"
815
816#endif /* HEP_TRANSFROM3D_H */
Reflect3D(const Normal3D< double > &normal, const Point3D< double > &point)
Reflect3D(double XX, double XY, double XZ, double DX, double YX, double YY, double YZ, double DY, double ZX, double ZY, double ZZ, double DZ)
ReflectX3D(double x=0)
ReflectY3D(double y=0)
ReflectZ3D(double z=0)
Rotate3D(double a, const Vector3D< double > &v)
Rotate3D(const Point3D< double > &fr1, const Point3D< double > &fr2, const Point3D< double > &to1, const Point3D< double > &to2)
Rotate3D(const CLHEP::HepRotation &mt)
Scale3D(double sc)
Scale3D(double x, double y, double z)
Transform3D_row(const Transform3D &, int)
double operator()(int, int) const
static DLL_API const Transform3D Identity
double dy() const
bool isNear(const Transform3D &t, double tolerance=2.2E-14) const
Transform3D operator*(const Transform3D &b) const
Transform3D & operator=(Transform3D &&mt)=default
double zz() const
double yz() const
bool operator==(const Transform3D &transform) const
double dz() const
bool operator!=(const Transform3D &transform) const
CLHEP::HepRotation getRotation() const
double dx() const
void getDecomposition(Scale3D &scale, Rotate3D &rotation, Translate3D &translation) const
double xy() const
CLHEP::Hep3Vector getTranslation() const
const Transform3D_row operator[](int) const
void setTransform(double XX, double XY, double XZ, double DX, double YX, double YY, double YZ, double DY, double ZX, double ZY, double ZZ, double DZ)
double zx() const
Transform3D(const Transform3D &mt)=default
double yx() const
Transform3D(const CLHEP::HepRotation &mt, const CLHEP::Hep3Vector &v)
Transform3D inverse() const
double zy() const
double xx() const
Transform3D & operator=(const Transform3D &mt)=default
double yy() const
Transform3D(double XX, double XY, double XZ, double DX, double YX, double YY, double YZ, double DY, double ZX, double ZY, double ZZ, double DZ)
double xz() const
Transform3D(Transform3D &&mt)=default
Translate3D(double x, double y, double z)
Translate3D(const CLHEP::Hep3Vector &v)
#define DLL_API
Definition defs.h:19