Geant4
11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4GeomTools.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
// G4GeomTools
27
//
28
// Class description:
29
//
30
// A collection of utilities which can be helpfull for a wide range
31
// of geometry-related tasks
32
33
// 10.10.2016, E.Tcherniaev: Initial version.
34
// --------------------------------------------------------------------
35
#ifndef G4GEOMTOOLS_HH
36
#define G4GEOMTOOLS_HH
37
38
#include <vector>
39
#include "
G4TwoVector.hh
"
40
#include "
G4ThreeVector.hh
"
41
42
using
G4TwoVectorList
= std::vector<G4TwoVector>;
43
using
G4ThreeVectorList
= std::vector<G4ThreeVector>;
44
45
class
G4GeomTools
46
{
47
public
:
48
49
// ==================================================================
50
// 2D Utilities
51
// ------------------------------------------------------------------
52
53
static
G4double
TriangleArea
(
G4double
Ax,
G4double
Ay,
54
G4double
Bx,
G4double
By,
55
G4double
Cx,
G4double
Cy);
56
57
static
G4double
TriangleArea
(
const
G4TwoVector
&
A
,
58
const
G4TwoVector
&
B
,
59
const
G4TwoVector
& C);
60
// Calculate area of 2D triangle, return value is positive if
61
// vertices of the triangle are given in anticlockwise order,
62
// otherwise it is negative
63
64
static
G4double
QuadArea
(
const
G4TwoVector
&
A
,
65
const
G4TwoVector
&
B
,
66
const
G4TwoVector
& C,
67
const
G4TwoVector
&
D
);
68
// Calculate area of 2D quadrilateral, return value is positive if
69
// vertices of the quadrilateral are given in anticlockwise order,
70
// otherwise it is negative
71
72
static
G4double
PolygonArea
(
const
G4TwoVectorList
& polygon);
73
// Calculate area of 2D polygon, return value is positive if
74
// vertices of the polygon are defined in anticlockwise order,
75
// otherwise it is negative
76
77
static
G4bool
PointInTriangle
(
G4double
Px,
G4double
Py,
78
G4double
Ax,
G4double
Ay,
79
G4double
Bx,
G4double
By,
80
G4double
Cx,
G4double
Cy);
81
// Decide if point (Px,Py) is inside triangle (Ax,Ay)(Bx,By)(Cx,Cy)
82
83
static
G4bool
PointInTriangle
(
const
G4TwoVector
& P,
84
const
G4TwoVector
&
A
,
85
const
G4TwoVector
&
B
,
86
const
G4TwoVector
& C);
87
// Decide if point P is inside triangle ABC
88
89
static
G4bool
PointInPolygon
(
const
G4TwoVector
& P,
90
const
G4TwoVectorList
& Polygon);
91
// Decide if point P is inside Polygon
92
93
static
G4bool
IsConvex
(
const
G4TwoVectorList
& polygon);
94
// Decide if 2D polygon is convex, i.e. all internal angles are
95
// less than pi
96
97
static
G4bool
TriangulatePolygon
(
const
G4TwoVectorList
& polygon,
98
G4TwoVectorList
& result);
99
100
static
G4bool
TriangulatePolygon
(
const
G4TwoVectorList
& polygon,
101
std::vector<G4int>& result);
102
// Simple implementation of "ear clipping" algorithm for
103
// triangulation of a simple contour/polygon, it places results
104
// in a std::vector as triplets of vertices. If triangulation
105
// is sucsessfull then the function returns true, otherwise false
106
107
static
void
RemoveRedundantVertices
(
G4TwoVectorList
& polygon,
108
std::vector<G4int>& iout,
109
G4double
tolerance = 0.0);
110
// Remove collinear and coincident points from 2D polygon.
111
// Indices of removed points are available in iout.
112
113
static
G4bool
DiskExtent
(
G4double
rmin,
G4double
rmax,
114
G4double
startPhi,
G4double
delPhi,
115
G4TwoVector
& pmin,
G4TwoVector
& pmax);
116
// Calculate bounding rectangle of a disk sector,
117
// it returns false if input parameters do not meet the following:
118
// rmin >= 0
119
// rmax > rmin + kCarTolerance
120
// delPhi > 0 + kCarTolerance
121
122
static
void
DiskExtent
(
G4double
rmin,
G4double
rmax,
123
G4double
sinPhiStart,
G4double
cosPhiStart,
124
G4double
sinPhiEnd,
G4double
cosPhiEnd,
125
G4TwoVector
& pmin,
G4TwoVector
& pmax);
126
// Calculate bounding rectangle of a disk sector,
127
// faster version without check of parameters
128
129
static
G4double
EllipsePerimeter
(
G4double
a,
130
G4double
b);
131
// Compute the circumference (perimeter) of an ellipse
132
133
static
G4double
EllipticConeLateralArea
(
G4double
a,
134
G4double
b,
135
G4double
h);
136
// Compute the lateral surface area of an elliptic cone
137
138
// ==================================================================
139
// 3D Utilities
140
// ------------------------------------------------------------------
141
142
static
G4ThreeVector
TriangleAreaNormal
(
const
G4ThreeVector
&
A
,
143
const
G4ThreeVector
&
B
,
144
const
G4ThreeVector
& C);
145
// Find the normal to the plane of 3D triangle ABC,
146
// length of the normal is equal to the area of the triangle
147
148
static
G4ThreeVector
QuadAreaNormal
(
const
G4ThreeVector
&
A
,
149
const
G4ThreeVector
&
B
,
150
const
G4ThreeVector
& C,
151
const
G4ThreeVector
&
D
);
152
// Find normal to the plane of 3D quadrilateral ABCD,
153
// length of the normal is equal to the area of the quadrilateral
154
155
static
G4ThreeVector
PolygonAreaNormal
(
const
G4ThreeVectorList
& polygon);
156
// Find normal to the plane of 3D polygon
157
// length of the normal is equal to the area of the polygon
158
159
/*
160
static G4bool IsPlanar(const G4ThreeVector& A,
161
const G4ThreeVector& B,
162
const G4ThreeVector& C,
163
const G4ThreeVector& D);
164
// Decide if 3D quadrilateral ABCD is planar
165
166
static G4bool IsPlanar(const G4ThreeVectorList& polygon
167
const G4ThreeVector& normal);
168
// Decide if 3D polygon is planar
169
*/
170
171
static
G4double
DistancePointSegment
(
const
G4ThreeVector
& P,
172
const
G4ThreeVector
&
A
,
173
const
G4ThreeVector
&
B
);
174
// Calculate distance between point P and line segment AB in 3D
175
176
static
G4ThreeVector
ClosestPointOnSegment
(
const
G4ThreeVector
& P,
177
const
G4ThreeVector
&
A
,
178
const
G4ThreeVector
&
B
);
179
// Find point on 3D line segment AB closest to point P
180
181
static
G4ThreeVector
ClosestPointOnTriangle
(
const
G4ThreeVector
& P,
182
const
G4ThreeVector
&
A
,
183
const
G4ThreeVector
&
B
,
184
const
G4ThreeVector
& C);
185
// Find point on 3D triangle ABC closest to point P
186
187
static
G4bool
SphereExtent
(
G4double
rmin,
G4double
rmax,
188
G4double
startTheta,
G4double
delTheta,
189
G4double
startPhi,
G4double
delPhi,
190
G4ThreeVector
& pmin,
G4ThreeVector
& pmax);
191
// Calculate bounding box of a spherical sector,
192
// it returns false if input parameters do not meet the following:
193
// rmin >= 0
194
// rmax > rmin + kCarTolerance
195
// startTheta >= 0 && <= pi;
196
// delTheta > 0 + kCarTolerance
197
// delPhi > 0 + kCarTolerance
198
199
private
:
200
201
static
G4bool
CheckSnip(
const
G4TwoVectorList
& contour,
202
G4int
a,
G4int
b,
G4int
c,
203
G4int
n,
const
G4int
* V);
204
// Helper function for TriangulatePolygon()
205
206
static
G4double
comp_ellint_2(
G4double
e);
207
// Complete Elliptic Integral of the Second Kind
208
};
209
210
#endif
// G4GEOMTOOLS_HH
G4ThreeVectorList
std::vector< G4ThreeVector > G4ThreeVectorList
Definition:
G4BoundingEnvelope.hh:54
B
G4double B(G4double temperature)
Definition:
G4DNAElectronHoleRecombination.cc:68
D
G4double D(G4double temp)
Definition:
G4DNAElectronHoleRecombination.cc:90
G4ThreeVectorList
std::vector< G4ThreeVector > G4ThreeVectorList
Definition:
G4GeomTools.hh:43
G4TwoVectorList
std::vector< G4TwoVector > G4TwoVectorList
Definition:
G4GeomTools.hh:42
G4ThreeVector.hh
G4TwoVector.hh
G4double
double G4double
Definition:
G4Types.hh:83
G4bool
bool G4bool
Definition:
G4Types.hh:86
G4int
int G4int
Definition:
G4Types.hh:85
A
const G4double A[17]
Definition:
G4WaterStopping.cc:53
CLHEP::Hep2Vector
Definition:
TwoVector.h:44
CLHEP::Hep3Vector
Definition:
ThreeVector.h:36
G4GeomTools
Definition:
G4GeomTools.hh:46
G4GeomTools::PointInPolygon
static G4bool PointInPolygon(const G4TwoVector &P, const G4TwoVectorList &Polygon)
Definition:
G4GeomTools.cc:145
G4GeomTools::QuadAreaNormal
static G4ThreeVector QuadAreaNormal(const G4ThreeVector &A, const G4ThreeVector &B, const G4ThreeVector &C, const G4ThreeVector &D)
Definition:
G4GeomTools.cc:609
G4GeomTools::SphereExtent
static G4bool SphereExtent(G4double rmin, G4double rmax, G4double startTheta, G4double delTheta, G4double startPhi, G4double delPhi, G4ThreeVector &pmin, G4ThreeVector &pmax)
Definition:
G4GeomTools.cc:790
G4GeomTools::PointInTriangle
static G4bool PointInTriangle(G4double Px, G4double Py, G4double Ax, G4double Ay, G4double Bx, G4double By, G4double Cx, G4double Cy)
Definition:
G4GeomTools.cc:92
G4GeomTools::DiskExtent
static G4bool DiskExtent(G4double rmin, G4double rmax, G4double startPhi, G4double delPhi, G4TwoVector &pmin, G4TwoVector &pmax)
Definition:
G4GeomTools.cc:390
G4GeomTools::TriangulatePolygon
static G4bool TriangulatePolygon(const G4TwoVectorList &polygon, G4TwoVectorList &result)
Definition:
G4GeomTools.cc:193
G4GeomTools::EllipticConeLateralArea
static G4double EllipticConeLateralArea(G4double a, G4double b, G4double h)
Definition:
G4GeomTools.cc:546
G4GeomTools::DistancePointSegment
static G4double DistancePointSegment(const G4ThreeVector &P, const G4ThreeVector &A, const G4ThreeVector &B)
Definition:
G4GeomTools.cc:637
G4GeomTools::ClosestPointOnTriangle
static G4ThreeVector ClosestPointOnTriangle(const G4ThreeVector &P, const G4ThreeVector &A, const G4ThreeVector &B, const G4ThreeVector &C)
Definition:
G4GeomTools.cc:687
G4GeomTools::RemoveRedundantVertices
static void RemoveRedundantVertices(G4TwoVectorList &polygon, std::vector< G4int > &iout, G4double tolerance=0.0)
Definition:
G4GeomTools.cc:305
G4GeomTools::TriangleArea
static G4double TriangleArea(G4double Ax, G4double Ay, G4double Bx, G4double By, G4double Cx, G4double Cy)
Definition:
G4GeomTools.cc:41
G4GeomTools::QuadArea
static G4double QuadArea(const G4TwoVector &A, const G4TwoVector &B, const G4TwoVector &C, const G4TwoVector &D)
Definition:
G4GeomTools.cc:64
G4GeomTools::EllipsePerimeter
static G4double EllipsePerimeter(G4double a, G4double b)
Definition:
G4GeomTools.cc:532
G4GeomTools::PolygonArea
static G4double PolygonArea(const G4TwoVectorList &polygon)
Definition:
G4GeomTools.cc:76
G4GeomTools::ClosestPointOnSegment
static G4ThreeVector ClosestPointOnSegment(const G4ThreeVector &P, const G4ThreeVector &A, const G4ThreeVector &B)
Definition:
G4GeomTools.cc:658
G4GeomTools::IsConvex
static G4bool IsConvex(const G4TwoVectorList &polygon)
Definition:
G4GeomTools.cc:165
G4GeomTools::PolygonAreaNormal
static G4ThreeVector PolygonAreaNormal(const G4ThreeVectorList &polygon)
Definition:
G4GeomTools.cc:621
G4GeomTools::TriangleAreaNormal
static G4ThreeVector TriangleAreaNormal(const G4ThreeVector &A, const G4ThreeVector &B, const G4ThreeVector &C)
Definition:
G4GeomTools.cc:598
geant4-v11.1.1
source
geometry
management
include
G4GeomTools.hh
Generated by
1.9.6