Geant4
9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4AffineTransform.hh
Go to the documentation of this file.
1
//
2
// ********************************************************************
3
// * License and Disclaimer *
4
// * *
5
// * The Geant4 software is copyright of the Copyright Holders of *
6
// * the Geant4 Collaboration. It is provided under the terms and *
7
// * conditions of the Geant4 Software License, included in the file *
8
// * LICENSE and available at http://cern.ch/geant4/license . These *
9
// * include a list of copyright holders. *
10
// * *
11
// * Neither the authors of this software system, nor their employing *
12
// * institutes,nor the agencies providing financial support for this *
13
// * work make any representation or warranty, express or implied, *
14
// * regarding this software system or assume any liability for its *
15
// * use. Please see the license in the file LICENSE and URL above *
16
// * for the full disclaimer and the limitation of liability. *
17
// * *
18
// * This code implementation is the result of the scientific and *
19
// * technical work of the GEANT4 collaboration. *
20
// * By using, copying, modifying or distributing the software (or *
21
// * any work based on the software) you agree to acknowledge its *
22
// * use in resulting scientific publications, and indicate your *
23
// * acceptance of all terms of the Geant4 Software license. *
24
// ********************************************************************
25
//
26
//
27
// $Id$
28
//
29
//
30
// class G4AffineTransform
31
//
32
// Class description:
33
//
34
// A class for geometric affine transformations [see, eg. Foley & Van Dam]
35
// Supports efficient arbitrary rotation & transformation of vectors and the
36
// computation of compound & inverse transformations. A `rotation flag' is
37
// maintained internally for greater computational efficiency for transforms
38
// that do not involve rotation.
39
//
40
// Interfaces to the CLHEP classes G4ThreeVector & G4RotationMatrix
41
//
42
// For member function descriptions, see comments by declarations. For
43
// additional clarification, also check the `const' declarations for
44
// functions & their parameters.
45
//
46
// Member data:
47
//
48
// G4double rxx,rxy,rxz;
49
// G4double ryx,ryy,ryz; A 3x3 rotation matrix - net rotation
50
// G4double rzx,rzy,rzz;
51
// G4double tx,ty,tz; Net translation
52
53
// History:
54
// Paul R C Kent 6 Aug 1996 - initial version
55
//
56
// 19.09.96 E.Chernyaev:
57
// - direct access to the protected members of the G4RotationMatrix class
58
// replaced by access via public access functions
59
// - conversion of the rotation matrix to angle & axis used to get
60
// a possibility to remove "friend" from the G4RotationMatrix class
61
// --------------------------------------------------------------------
62
#ifndef G4AFFINETRANSFORM_HH
63
#define G4AFFINETRANSFORM_HH
64
65
#include "
G4Types.hh
"
66
#include "
G4ThreeVector.hh
"
67
#include "
G4RotationMatrix.hh
"
68
69
class
G4AffineTransform
70
{
71
72
public
:
73
74
G4AffineTransform
();
75
76
public
:
// with description
77
78
G4AffineTransform
(
const
G4ThreeVector
&tlate);
79
// Translation only: under t'form translate point at origin by tlate
80
81
G4AffineTransform
(
const
G4RotationMatrix
&rot);
82
// Rotation only: under t'form rotate by rot
83
84
G4AffineTransform
(
const
G4RotationMatrix
&rot,
85
const
G4ThreeVector
&tlate);
86
// Under t'form: rotate by rot then translate by tlate
87
88
G4AffineTransform
(
const
G4RotationMatrix
*rot,
89
const
G4ThreeVector
&tlate);
90
// Optionally rotate by *rot then translate by tlate - rot may be null
91
92
G4AffineTransform
operator *
(
const
G4AffineTransform
&tf)
const
;
93
// Compound Transforms:
94
// tf2=tf2*tf1 equivalent to tf2*=tf1
95
// Returns compound transformation of self*tf
96
97
G4AffineTransform
&
operator *=
(
const
G4AffineTransform
&tf);
98
// (Modifying) Multiplies self by tf; Returns self reference
99
// ie. A=AB for a*=b
100
101
102
G4AffineTransform
&
Product
(
const
G4AffineTransform
&tf1,
103
const
G4AffineTransform
&tf2);
104
// 'Products' for avoiding (potential) temporaries:
105
// c.Product(a,b) equivalent to c=a*b
106
// c.InverseProduct(a*b,b ) equivalent to c=a
107
// (Modifying) Sets self=tf1*tf2; Returns self reference
108
109
G4AffineTransform
&
InverseProduct
(
const
G4AffineTransform
&tf1,
110
const
G4AffineTransform
&tf2);
111
// (Modifying) Sets self=tf1*(tf2^-1); Returns self reference
112
113
G4ThreeVector
TransformPoint
(
const
G4ThreeVector
&vec)
const
;
114
// Transform the specified point: returns vec*rot+tlate
115
116
G4ThreeVector
TransformAxis
(
const
G4ThreeVector
&axis)
const
;
117
// Transform the specified axis: returns
118
119
void
ApplyPointTransform
(
G4ThreeVector
&vec)
const
;
120
// Transform the specified point (in place): sets vec=vec*rot+tlate
121
122
void
ApplyAxisTransform
(
G4ThreeVector
&axis)
const
;
123
// Transform the specified axis (in place): sets axis=axis*rot;
124
125
G4AffineTransform
Inverse
()
const
;
126
// Return inverse of current transform
127
128
G4AffineTransform
&
Invert
();
129
// (Modifying) Sets self=inverse of self; Returns self reference
130
131
G4AffineTransform
&
operator +=
(
const
G4ThreeVector
&tlate);
132
G4AffineTransform
&
operator -=
(
const
G4ThreeVector
&tlate);
133
// (Modifying) Adjust net translation by given vector;
134
// Returns self reference
135
136
G4bool
operator ==
(
const
G4AffineTransform
&tf)
const
;
137
G4bool
operator !=
(
const
G4AffineTransform
&tf)
const
;
138
139
G4double
operator []
(
const
G4int
n)
const
;
140
141
G4bool
IsRotated
()
const
;
142
// True if transform includes rotation
143
144
G4bool
IsTranslated
()
const
;
145
// True if transform includes translation
146
147
G4RotationMatrix
NetRotation
()
const
;
148
149
G4ThreeVector
NetTranslation
()
const
;
150
151
void
SetNetRotation
(
const
G4RotationMatrix
&rot);
152
153
void
SetNetTranslation
(
const
G4ThreeVector
&tlate);
154
155
private
:
156
157
G4AffineTransform
(
const
G4double
prxx,
const
G4double
prxy,
const
G4double
prxz,
158
const
G4double
pryx,
const
G4double
pryy,
const
G4double
pryz,
159
const
G4double
przx,
const
G4double
przy,
const
G4double
przz,
160
const
G4double
ptx,
const
G4double
pty,
const
G4double
ptz );
161
162
G4double
rxx,rxy,rxz;
163
G4double
ryx,ryy,ryz;
164
G4double
rzx,rzy,rzz;
165
G4double
tx,ty,tz;
166
};
167
168
#include "G4AffineTransform.icc"
169
170
#endif
G4RotationMatrix.hh
G4ThreeVector.hh
G4Types.hh
G4double
double G4double
Definition:
G4Types.hh:64
G4int
int G4int
Definition:
G4Types.hh:66
G4bool
bool G4bool
Definition:
G4Types.hh:67
CLHEP::Hep3Vector
Definition:
ThreeVector.h:41
CLHEP::HepRotation
Definition:
Rotation.h:47
G4AffineTransform
Definition:
G4AffineTransform.hh:70
G4AffineTransform::Product
G4AffineTransform & Product(const G4AffineTransform &tf1, const G4AffineTransform &tf2)
G4AffineTransform::G4AffineTransform
G4AffineTransform()
G4AffineTransform::G4AffineTransform
G4AffineTransform(const G4RotationMatrix &rot, const G4ThreeVector &tlate)
G4AffineTransform::IsRotated
G4bool IsRotated() const
G4AffineTransform::Inverse
G4AffineTransform Inverse() const
G4AffineTransform::SetNetRotation
void SetNetRotation(const G4RotationMatrix &rot)
G4AffineTransform::NetTranslation
G4ThreeVector NetTranslation() const
G4AffineTransform::G4AffineTransform
G4AffineTransform(const G4RotationMatrix *rot, const G4ThreeVector &tlate)
G4AffineTransform::operator+=
G4AffineTransform & operator+=(const G4ThreeVector &tlate)
G4AffineTransform::operator[]
G4double operator[](const G4int n) const
G4AffineTransform::Invert
G4AffineTransform & Invert()
G4AffineTransform::ApplyAxisTransform
void ApplyAxisTransform(G4ThreeVector &axis) const
G4AffineTransform::IsTranslated
G4bool IsTranslated() const
G4AffineTransform::NetRotation
G4RotationMatrix NetRotation() const
G4AffineTransform::InverseProduct
G4AffineTransform & InverseProduct(const G4AffineTransform &tf1, const G4AffineTransform &tf2)
G4AffineTransform::TransformPoint
G4ThreeVector TransformPoint(const G4ThreeVector &vec) const
G4AffineTransform::operator==
G4bool operator==(const G4AffineTransform &tf) const
G4AffineTransform::TransformAxis
G4ThreeVector TransformAxis(const G4ThreeVector &axis) const
G4AffineTransform::G4AffineTransform
G4AffineTransform(const G4RotationMatrix &rot)
G4AffineTransform::operator-=
G4AffineTransform & operator-=(const G4ThreeVector &tlate)
G4AffineTransform::operator*
G4AffineTransform operator*(const G4AffineTransform &tf) const
G4AffineTransform::ApplyPointTransform
void ApplyPointTransform(G4ThreeVector &vec) const
G4AffineTransform::G4AffineTransform
G4AffineTransform(const G4ThreeVector &tlate)
G4AffineTransform::operator*=
G4AffineTransform & operator*=(const G4AffineTransform &tf)
G4AffineTransform::SetNetTranslation
void SetNetTranslation(const G4ThreeVector &tlate)
G4AffineTransform::operator!=
G4bool operator!=(const G4AffineTransform &tf) const
geant4-v9.6.0
source
geometry
management
include
G4AffineTransform.hh
Generated by
1.9.6