Geant4
10.03.p02
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
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: G4AffineTransform.hh 98309 2016-07-06 10:30:15Z gcosmo $
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
#include "
G4Transform3D.hh
"
69
70
class
G4AffineTransform
71
{
72
73
public
:
74
75
inline
G4AffineTransform
();
76
77
public
:
// with description
78
79
inline
G4AffineTransform
(
const
G4ThreeVector
& tlate);
80
// Translation only: under t'form translate point at origin by tlate
81
82
inline
G4AffineTransform
(
const
G4RotationMatrix
& rot);
83
// Rotation only: under t'form rotate by rot
84
85
inline
G4AffineTransform
(
const
G4RotationMatrix
& rot,
86
const
G4ThreeVector
& tlate);
87
// Under t'form: rotate by rot then translate by tlate
88
89
inline
G4AffineTransform
(
const
G4RotationMatrix
* rot,
90
const
G4ThreeVector
& tlate);
91
// Optionally rotate by *rot then translate by tlate - rot may be null
92
93
inline
G4AffineTransform
operator *
(
const
G4AffineTransform
& tf)
const
;
94
// Compound Transforms:
95
// tf2=tf2*tf1 equivalent to tf2*=tf1
96
// Returns compound transformation of self*tf
97
98
inline
G4AffineTransform
&
operator *=
(
const
G4AffineTransform
& tf);
99
// (Modifying) Multiplies self by tf; Returns self reference
100
// ie. A=AB for a*=b
101
102
103
inline
G4AffineTransform
&
Product
(
const
G4AffineTransform
& tf1,
104
const
G4AffineTransform
& tf2);
105
// 'Products' for avoiding (potential) temporaries:
106
// c.Product(a,b) equivalent to c=a*b
107
// c.InverseProduct(a*b,b ) equivalent to c=a
108
// (Modifying) Sets self=tf1*tf2; Returns self reference
109
110
inline
G4AffineTransform
&
InverseProduct
(
const
G4AffineTransform
& tf1,
111
const
G4AffineTransform
& tf2);
112
// (Modifying) Sets self=tf1*(tf2^-1); Returns self reference
113
114
inline
G4ThreeVector
TransformPoint
(
const
G4ThreeVector
& vec)
const
;
115
// Transform the specified point: returns vec*rot+tlate
116
117
inline
G4ThreeVector
TransformAxis
(
const
G4ThreeVector
& axis)
const
;
118
// Transform the specified axis: returns
119
120
inline
void
ApplyPointTransform
(
G4ThreeVector
& vec)
const
;
121
// Transform the specified point (in place): sets vec=vec*rot+tlate
122
123
inline
void
ApplyAxisTransform
(
G4ThreeVector
& axis)
const
;
124
// Transform the specified axis (in place): sets axis=axis*rot;
125
126
inline
G4AffineTransform
Inverse
()
const
;
127
// Return inverse of current transform
128
129
inline
G4AffineTransform
&
Invert
();
130
// (Modifying) Sets self=inverse of self; Returns self reference
131
132
inline
G4AffineTransform
&
operator +=
(
const
G4ThreeVector
& tlate);
133
inline
G4AffineTransform
&
operator -=
(
const
G4ThreeVector
& tlate);
134
// (Modifying) Adjust net translation by given vector;
135
// Returns self reference
136
137
inline
G4bool
operator ==
(
const
G4AffineTransform
& tf)
const
;
138
inline
G4bool
operator !=
(
const
G4AffineTransform
& tf)
const
;
139
140
inline
G4double
operator []
(
const
G4int
n
)
const
;
141
142
inline
G4bool
IsRotated
()
const
;
143
// True if transform includes rotation
144
145
inline
G4bool
IsTranslated
()
const
;
146
// True if transform includes translation
147
148
inline
G4RotationMatrix
NetRotation
()
const
;
149
150
inline
G4ThreeVector
NetTranslation
()
const
;
151
152
inline
void
SetNetRotation
(
const
G4RotationMatrix
& rot);
153
154
inline
void
SetNetTranslation
(
const
G4ThreeVector
& tlate);
155
156
inline
operator
G4Transform3D
()
const
;
157
// Conversion operator (cast) to G4Transform3D
158
159
private
:
160
161
inline
G4AffineTransform
(
162
const
G4double
prxx,
const
G4double
prxy,
const
G4double
prxz,
163
const
G4double
pryx,
const
G4double
pryy,
const
G4double
pryz,
164
const
G4double
przx,
const
G4double
przy,
const
G4double
przz,
165
const
G4double
ptx,
const
G4double
pty,
const
G4double
ptz);
166
167
G4double
rxx,rxy,rxz;
168
G4double
ryx,ryy,ryz;
169
G4double
rzx,rzy,rzz;
170
G4double
tx,ty,tz;
171
};
172
173
std::ostream&
operator <<
(std::ostream& os,
const
G4AffineTransform
& transf);
174
175
#include "G4AffineTransform.icc"
176
177
#endif
G4AffineTransform::operator==
G4bool operator==(const G4AffineTransform &tf) const
CLHEP::Hep3Vector
Definition:
ThreeVector.h:41
G4AffineTransform::operator*=
G4AffineTransform & operator*=(const G4AffineTransform &tf)
G4Types.hh
G4AffineTransform::Inverse
G4AffineTransform Inverse() const
G4AffineTransform::IsRotated
G4bool IsRotated() const
G4AffineTransform::NetTranslation
G4ThreeVector NetTranslation() const
G4AffineTransform::ApplyAxisTransform
void ApplyAxisTransform(G4ThreeVector &axis) const
G4int
int G4int
Definition:
G4Types.hh:78
G4AffineTransform::operator*
G4AffineTransform operator*(const G4AffineTransform &tf) const
G4AffineTransform
Definition:
G4AffineTransform.hh:70
G4AffineTransform::Invert
G4AffineTransform & Invert()
G4AffineTransform::InverseProduct
G4AffineTransform & InverseProduct(const G4AffineTransform &tf1, const G4AffineTransform &tf2)
G4AffineTransform::SetNetTranslation
void SetNetTranslation(const G4ThreeVector &tlate)
G4AffineTransform::SetNetRotation
void SetNetRotation(const G4RotationMatrix &rot)
G4AffineTransform::operator!=
G4bool operator!=(const G4AffineTransform &tf) const
G4bool
bool G4bool
Definition:
G4Types.hh:79
G4AffineTransform::IsTranslated
G4bool IsTranslated() const
G4Transform3D
HepGeom::Transform3D G4Transform3D
Definition:
G4Transform3D.hh:35
G4Transform3D.hh
n
const G4int n
Definition:
G4UrQMD1_3Interface.hh:144
G4AffineTransform::NetRotation
G4RotationMatrix NetRotation() const
G4AffineTransform::TransformPoint
G4ThreeVector TransformPoint(const G4ThreeVector &vec) const
G4RotationMatrix.hh
G4AffineTransform::TransformAxis
G4ThreeVector TransformAxis(const G4ThreeVector &axis) const
HepGeom::BasicVector3D::operator<<
std::ostream & operator<<(std::ostream &, const BasicVector3D< float > &)
Definition:
BasicVector3D.cc:107
G4AffineTransform::Product
G4AffineTransform & Product(const G4AffineTransform &tf1, const G4AffineTransform &tf2)
G4AffineTransform::operator+=
G4AffineTransform & operator+=(const G4ThreeVector &tlate)
CLHEP::HepRotation
Definition:
Rotation.h:47
G4double
double G4double
Definition:
G4Types.hh:76
G4AffineTransform::operator[]
G4double operator[](const G4int n) const
G4ThreeVector.hh
G4AffineTransform::G4AffineTransform
G4AffineTransform()
G4AffineTransform::operator-=
G4AffineTransform & operator-=(const G4ThreeVector &tlate)
G4AffineTransform::ApplyPointTransform
void ApplyPointTransform(G4ThreeVector &vec) const
source
geant4.10.03.p02
source
geometry
management
include
G4AffineTransform.hh
Generated on Tue Nov 28 2017 21:43:20 for Geant4 by
1.8.5