Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Member Functions
G4LineSection Class Reference

#include <G4LineSection.hh>

Public Member Functions

 G4LineSection (const G4ThreeVector &PntA, const G4ThreeVector &PntB)
 
G4double Dist (G4ThreeVector OtherPnt) const
 
G4double GetABdistanceSq () const
 

Static Public Member Functions

static G4double Distline (const G4ThreeVector &OtherPnt, const G4ThreeVector &LinePntA, const G4ThreeVector &LinePntB)
 

Detailed Description

Definition at line 47 of file G4LineSection.hh.

Constructor & Destructor Documentation

G4LineSection::G4LineSection ( const G4ThreeVector PntA,
const G4ThreeVector PntB 
)

Definition at line 33 of file G4LineSection.cc.

References CLHEP::Hep3Vector::mag2().

35  : EndpointA(PntA),
36  VecAtoB(PntB-PntA)
37 {
38  fABdistanceSq = VecAtoB.mag2() ;
39  /*
40  G4double distABsquared = VecAtoB.mag2() ;
41  if ( distABsquared == 0.0)
42  {
43  G4Exception("G4LineSection::G4LineSection()", "GeomField0002",
44  FatalException, "Equal points in input (line->point) ?") ;
45  }
46  else
47  {
48  inverse_square_distAB=1.0 / distABsquared ;
49  }
50  */
51 }
double mag2() const

Member Function Documentation

G4double G4LineSection::Dist ( G4ThreeVector  OtherPnt) const

Definition at line 53 of file G4LineSection.cc.

References CLHEP::Hep3Vector::dot(), and CLHEP::Hep3Vector::mag2().

Referenced by Distline().

54 {
55  G4double dist_sq;
56  G4ThreeVector VecAZ;
57  G4double sq_VecAZ, inner_prod, unit_projection ;
58 
59  VecAZ= OtherPnt - EndpointA;
60  sq_VecAZ = VecAZ.mag2();
61 
62  inner_prod= VecAtoB.dot( VecAZ );
63 
64  // Determine Projection(AZ on AB) / Length(AB)
65  //
66  if( fABdistanceSq != 0.0 )
67  {
68  // unit_projection= inner_prod * InvsqDistAB();
69  unit_projection = inner_prod/fABdistanceSq;
70 
71  if( (0. <= unit_projection ) && (unit_projection <= 1.0 ) )
72  {
73  dist_sq= sq_VecAZ - unit_projection * inner_prod ;
74  }
75  else
76  {
77  // The perpendicular from the point to the line AB meets the line
78  // in a point outside the line segment!
79 
80  if( unit_projection < 0. ) // A is the closest point
81  {
82  dist_sq= sq_VecAZ;
83  }
84  else // B is the closest point
85  {
86  G4ThreeVector EndpointB = EndpointA + VecAtoB;
87  G4ThreeVector VecBZ = OtherPnt - EndpointB;
88  dist_sq = VecBZ.mag2();
89  }
90  }
91  }
92  else
93  {
94  dist_sq = (OtherPnt - EndpointA).mag2() ;
95  }
96  if( dist_sq < 0.0 ) dist_sq = 0.0 ;
97 
98  return std::sqrt(dist_sq) ;
99 }
double dot(const Hep3Vector &) const
double mag2() const
double G4double
Definition: G4Types.hh:76
G4double G4LineSection::Distline ( const G4ThreeVector OtherPnt,
const G4ThreeVector LinePntA,
const G4ThreeVector LinePntB 
)
static

Definition at line 101 of file G4LineSection.cc.

References Dist().

Referenced by G4ConstRK4::DistChord(), G4RKG3_Stepper::DistChord(), G4CashKarpRKF45::DistChord(), and G4MagErrorStepper::DistChord().

104 {
105  G4LineSection LineAB( LinePntA, LinePntB ); // Line from A to B
106 
107  return LineAB.Dist( OtherPnt );
108 }
G4double G4LineSection::GetABdistanceSq ( ) const
inline

Definition at line 55 of file G4LineSection.hh.

55 { return fABdistanceSq ; }

The documentation for this class was generated from the following files: