46 memcpy(param, p, 3*
sizeof(
Double_t));
47 memcpy(¶m[3], n, 3*
sizeof(
Double_t));
75 if (norm[0]*dir[0]+norm[1]*dir[1]+norm[2]*dir[2]<0) {
88 r[0] =
fP[0]-point[0];
89 r[1] =
fP[1]-point[1];
90 r[2] =
fP[2]-point[2];
92 if (rdotn < 0)
return kFALSE;
110 r[0] =
fP[0]-point[0];
111 r[1] =
fP[1]-point[1];
112 r[2] =
fP[2]-point[2];
114 if (iact<3 && safe) {
121 Double_t ddotn = dir[0]*fN[0]+dir[1]*fN[1]+dir[2]*fN[2];
134 r[0] =
fP[0]-point[0];
135 r[1] =
fP[1]-point[1];
136 r[2] =
fP[2]-point[2];
138 if (iact<3 && safe) {
145 Double_t ddotn = dir[0]*fN[0]+dir[1]*fN[1]+dir[2]*fN[2];
158 Error(
"Divide",
"Half-spaces cannot be divided");
178 printf(
" Point : %11.5f, %11.5f, %11.5f\n",
fP[0],
fP[1],
fP[2]);
179 printf(
" Normal : %11.5f, %11.5f, %11.5f\n",
fN[0],
fN[1],
fN[2]);
189 r[0] =
fP[0]-point[0];
190 r[1] =
fP[1]-point[1];
191 r[2] =
fP[2]-point[2];
203 out <<
" point[0] = " <<
fP[0] <<
";" << std::endl;
204 out <<
" point[1] = " <<
fP[1] <<
";" << std::endl;
205 out <<
" point[2] = " <<
fP[2] <<
";" << std::endl;
206 out <<
" norm[0] = " <<
fN[0] <<
";" << std::endl;
207 out <<
" norm[1] = " <<
fN[1] <<
";" << std::endl;
208 out <<
" norm[2] = " <<
fN[2] <<
";" << std::endl;
209 out <<
" TGeoShape *" <<
GetPointerName() <<
" = new TGeoHalfSpace(\"" <<
GetName() <<
"\", point,norm);" << std::endl;
233 for (
Int_t i=0; i<vecsize; i++) inside[i] =
Contains(&points[3*i]);
251 for (
Int_t i=0; i<vecsize; i++) dists[i] =
DistFromInside(&points[3*i], &dirs[3*i], 3, step[i]);
259 for (
Int_t i=0; i<vecsize; i++) dists[i] =
DistFromOutside(&points[3*i], &dirs[3*i], 3, step[i]);
269 for (
Int_t i=0; i<vecsize; i++) safe[i] =
Safety(&points[3*i], inside[i]);
virtual void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize)
Compute the normal for an array o points so that norm.dot.dir is positive Input: Arrays of point coor...
virtual void InspectShape() const
print shape parameters
virtual void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const
Compute distance from array of input points having directions specisied by dirs. Store output in dist...
ClassImp(TGeoHalfSpace) TGeoHalfSpace
Dummy constructor.
virtual void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const
Compute distance from array of input points having directions specisied by dirs. Store output in dist...
virtual void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const
Returns numbers of vertices, segments and polygons composing the shape mesh.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t Contains(const Double_t *point) const
test if point is inside the half-space
virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm)
Compute normal to closest surface from POINT.
static Double_t Tolerance()
virtual Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact=1, Double_t step=TGeoShape::Big(), Double_t *safe=0) const
compute distance from inside point to the plane
virtual void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const
Compute safe distance from each of the points in the input array.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const
computes the closest distance from given point to this shape, according to option.
virtual void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const
Check the inside status for each of the points in the array.
virtual const char * ClassName() const
Returns name of class to which the object belongs.
Bool_t TestBit(UInt_t f) const
virtual Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact=1, Double_t step=TGeoShape::Big(), Double_t *safe=0) const
compute distance from inside point to the plane
virtual void SetDimensions(Double_t *param)
Set half-space parameters as stored in an array.
virtual const char * GetName() const
Get the shape name.
virtual ~TGeoHalfSpace()
destructor
ClassImp(TMCParticle) void TMCParticle printf(": p=(%7.3f,%7.3f,%9.3f) ;", fPx, fPy, fPz)
virtual TGeoVolume * Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step)
Divide the shape along one axis.
const char * GetPointerName() const
Provide a pointer name containing uid.
void SetShapeBit(UInt_t f, Bool_t set)
Equivalent of TObject::SetBit.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py)
A half-space does not have a mesh primitive.
Double_t Sqrt(Double_t x)
double norm(double *x, double *p)