1 #ifndef __JCYLINDER3D__ 
    2 #define __JCYLINDER3D__ 
   93       if (__begin != __end) {
 
   95         zmin = std::numeric_limits<double>::max();
 
   96         zmax = std::numeric_limits<double>::lowest();
 
   98         for (T i = __begin; i != __end; ++i) {
 
   99           if (i->getZ() < 
zmin) 
zmin = i->getZ();
 
  100           if (i->getZ() > 
zmax) 
zmax = i->getZ();
 
  236         if      (pos.
getZ() > this->getZmax())
 
  238         else if (pos.
getZ() < this->getZmin())
 
  243         return sqrt(R*R + dz*dz);
 
  247         if      (pos.
getZ() > this->getZmax())
 
  249         else if (pos.
getZ() < this->getZmin())
 
  279       double path[] = { 0.0, 0.0 };
 
  281       if (fabs(axis.
getDZ()) != 0.0) {
 
  290         for (
int i = 0; i != 2; ++i) {
 
  292           const double u = (Z[i] - axis.
getZ()) / axis.
getDZ();
 
  302       if (fabs(axis.
getDZ()) != 1.0) {
 
  306         const double x  = axis.
getX() - this->
getX();
 
  307         const double y  = axis.
getY() - this->
getY();
 
  308         const double dx = axis.
getDX();
 
  309         const double dy = axis.
getDY();
 
  312         const double a  =   (dx * dx +  dy * dy);
 
  313         const double b  = 2*(dx * 
x  +  dy * 
y);
 
  314         const double c  =   (
x  * 
x  +  
y  * 
y)  -  R * R;
 
  316         const double q  = b*b - 4*
a*c;
 
  321             (-b - sqrt(q)) / (2*
a),
 
  322             (-b + sqrt(q)) / (2*
a)
 
  325           for (
int i = 0; i != 2; ++i) {
 
  327             const double z = axis.
getZ() + 
u[i] * axis.
getDZ();
 
  336       return std::minmax(path[0], path[1]);
 
  350       in >> cylinder.
zmin >> cylinder.
zmax;
 
  365       const JFormat format(out, getFormat<JCylinder3D>(
JFormat_t(9, 3, std::ios::fixed | std::ios::showpos)));
 
  367       out << static_cast<const JCircle2D&>(cylinder);
 
  369       out << format << cylinder.
zmin;
 
  371       out << format << cylinder.
zmax;
 
  387       in >> cylinder.
zmin >> cylinder.
zmax;
 
  402       out << static_cast<const JCircle2D&>(cylinder);
 
  403       out << cylinder.
zmin << cylinder.
zmax;
 
Data structure for circle in two dimensions.
 
bool is_inside(const JVector2D &pos, const double precision=std::numeric_limits< double >::min()) const
Check whether given point is inside circle.
 
double getRadius() const
Get radius.
 
const JPosition2D & getPosition() const
Get position.
 
JPosition2D()
Default constructor.
 
Data structure for vector in two dimensions.
 
JVector2D & sub(const JVector2D &vector)
Subtract vector.
 
double getY() const
Get y position.
 
double getX() const
Get x position.
 
JVector2D()
Default constructor.
 
double getLength() const
Get length.
 
JCylinder3D(const JCircle2D &circle, const double zmin, const double zmax)
Constructor.
 
JCylinder3D(T __begin, T __end, const double precision=std::numeric_limits< double >::epsilon())
Constructor.
 
std::pair< double, double > intersection_type
Type definition of intersection.
 
friend std::istream & operator>>(std::istream &in, JCylinder3D &cylinder)
Read cylinder from input stream.
 
double getDistanceSquared(const JVector3D &pos) const
Get square of distance between cylinder wall and given position.
 
friend std::ostream & operator<<(std::ostream &out, const JCylinder3D &cylinder)
Write cylinder to output stream.
 
double getZmin() const
Get minimal z position.
 
double getVolume() const
Get volume.
 
bool is_inside(const JVector3D &pos) const
Check whether given point is inside cylinder.
 
intersection_type getIntersection(const JAxis3D &axis) const
Get intersection points of axis with cylinder.
 
JCylinder3D & add(const JVector3D &pos)
Add position.
 
void setZmax(const double zmax)
Set maximal z position.
 
friend JWriter & operator<<(JWriter &out, const JCylinder3D &cylinder)
Write cylinder to output.
 
void setZmin(const double zmin)
Set minimal z position.
 
void addMargin(const double D)
Add (safety) margin.
 
JCylinder3D()
Default constructor.
 
double getDistance(const JVector3D &pos) const
Get distance between cylinder wall and given position.
 
friend JReader & operator>>(JReader &in, JCylinder3D &cylinder)
Read cylinder from input.
 
JPosition3D getCenter() const
Get centre.
 
double getZmax() const
Get maximal z position.
 
Data structure for position in three dimensions.
 
Data structure for vector in three dimensions.
 
double getY() const
Get y position.
 
double getZ() const
Get z position.
 
double getX() const
Get x position.
 
double getDY() const
Get y direction.
 
double getDX() const
Get x direction.
 
double getDZ() const
Get z direction.
 
Interface for binary input.
 
Interface for binary output.
 
Auxiliary classes and methods for 3D geometrical objects and operations.
 
static const double PI
Mathematical constants.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).