289 xoff = (xoffset < xMin) ? (xMin-xoffset)
290 : (xoffset > xMax) ? (xoffset-xMax) : 0.0;
291 yoff = (yoffset < yMin) ? (yMin-yoffset)
292 : (yoffset > yMax) ? (yoffset-yMax) : 0.0;
314 maxDiff= 1.0-
sqr(yoff/ySemiAxis);
315 if (maxDiff < 0.0) {
return false; }
316 maxDiff= xSemiAxis * std::sqrt(maxDiff);
317 newMin=xoffset-maxDiff;
318 newMax=xoffset+maxDiff;
319 pMin=(newMin<xMin) ? xMin : newMin;
320 pMax=(newMax>xMax) ? xMax : newMax;
336 maxDiff= 1.0-
sqr(xoff/xSemiAxis);
337 if (maxDiff < 0.0) {
return false; }
338 maxDiff= ySemiAxis * std::sqrt(maxDiff);
339 newMin=yoffset-maxDiff;
340 newMax=yoffset+maxDiff;
341 pMin=(newMin<yMin) ? yMin : newMin;
342 pMax=(newMax>yMax) ? yMax : newMax;
359 G4int i,j,noEntries,noBetweenSections;
360 G4bool existsAfterClip=
false;
364 G4int noPolygonVertices=0;
371 noEntries=vertices->size();
372 noBetweenSections=noEntries-noPolygonVertices;
375 for (i=0;i<noEntries;i+=noPolygonVertices)
377 for(j=0;j<(noPolygonVertices/2)-1;j++)
379 ThetaPolygon.push_back((*vertices)[i+j]);
380 ThetaPolygon.push_back((*vertices)[i+j+1]);
381 ThetaPolygon.push_back((*vertices)[i+noPolygonVertices-2-j]);
382 ThetaPolygon.push_back((*vertices)[i+noPolygonVertices-1-j]);
384 ThetaPolygon.clear();
387 for (i=0;i<noBetweenSections;i+=noPolygonVertices)
389 for(j=0;j<noPolygonVertices-1;j++)
391 ThetaPolygon.push_back((*vertices)[i+j]);
392 ThetaPolygon.push_back((*vertices)[i+j+1]);
393 ThetaPolygon.push_back((*vertices)[i+noPolygonVertices+j+1]);
394 ThetaPolygon.push_back((*vertices)[i+noPolygonVertices+j]);
396 ThetaPolygon.clear();
398 ThetaPolygon.push_back((*vertices)[i+noPolygonVertices-1]);
399 ThetaPolygon.push_back((*vertices)[i]);
400 ThetaPolygon.push_back((*vertices)[i+noPolygonVertices]);
401 ThetaPolygon.push_back((*vertices)[i+2*noPolygonVertices-1]);
403 ThetaPolygon.clear();
407 existsAfterClip=
true;
429 existsAfterClip=
true;
435 return existsAfterClip;
G4double GetMinXExtent() const
static const G4double kInfinity
G4double GetMinYExtent() const
G4ThreeVectorList * CreateRotatedVertices(const G4AffineTransform &pT, G4int &noPV) const
G4double GetMinZExtent() const
G4bool IsYLimited() const
G4bool IsXLimited() const
G4double GetMaxZExtent() const
EInside Inside(const G4ThreeVector &p) const
G4double GetMaxXExtent() const
std::vector< G4ThreeVector > G4ThreeVectorList
G4double GetMinExtent(const EAxis pAxis) const
G4bool IsZLimited() const
G4double GetMaxExtent(const EAxis pAxis) const
void CalculateClippedPolygonExtent(G4ThreeVectorList &pPolygon, const G4VoxelLimits &pVoxelLimit, const EAxis pAxis, G4double &pMin, G4double &pMax) const
G4double GetMaxYExtent() const