Go to the documentation of this file. 1 #ifndef __JCYLINDER3D__
2 #define __JCYLINDER3D__
83 if (__begin != __end) {
85 zmin = +std::numeric_limits<double>::max();
86 zmax = -std::numeric_limits<double>::max();
88 for (T i = __begin; i != __end; ++i) {
89 if (i->getZ() <
zmin)
zmin = i->getZ();
90 if (i->getZ() >
zmax)
zmax = i->getZ();
234 return sqrt(R*R + dz*dz);
270 double path[] = { 0.0, 0.0 };
272 if (fabs(axis.
getDZ()) != 0.0) {
281 for (
int i = 0; i != 2; ++i) {
283 const double u = (Z[i] - axis.
getZ()) / axis.
getDZ();
293 if (fabs(axis.
getDZ()) != 1.0) {
297 const double x = axis.
getX() - this->
getX();
298 const double y = axis.
getY() - this->
getY();
299 const double dx = axis.
getDX();
300 const double dy = axis.
getDY();
303 const double a = (dx * dx + dy * dy);
304 const double b = 2*(dx * x + dy * y);
305 const double c = (x * x + y * y) - R * R;
307 const double q = b*b - 4*a*c;
312 (-b - sqrt(q)) / (2*a),
313 (-b + sqrt(q)) / (2*a)
316 for (
int i = 0; i != 2; ++i) {
318 const double z = axis.
getZ() +
u[i] * axis.
getDZ();
327 return std::make_pair(path[0], path[1]);
340 in >> static_cast<JCircle2D&>(cylinder);
341 in >> cylinder.
zmin >> cylinder.
zmax;
356 out << static_cast<const JCircle2D&>(cylinder);
358 out << cylinder.
zmin;
360 out << cylinder.
zmax;
375 in >> static_cast<JCircle2D&>(cylinder);
376 in >> cylinder.
zmin >> cylinder.
zmax;
391 out << static_cast<const JCircle2D&>(cylinder);
392 out << cylinder.
zmin << cylinder.
zmax;
double getDZ() const
Get z direction.
JCylinder3D(T __begin, T __end)
Constructor.
void setZmax(const double zmax)
Set maximal z position.
Interface for binary input.
friend JWriter & operator<<(JWriter &out, const JCylinder3D &cylinder)
Write cylinder to output.
const JPosition2D & getPosition() const
Get position.
double getDistance(const JVector3D &pos) const
Get distance between cylinder wall and given position.
double getZmin() const
Get minimal z position.
std::pair< double, double > getIntersection(const JAxis3D &axis) const
Get intersection points of axis with cylinder.
Data structure for circle in two dimensions.
double getZ() const
Get z position.
friend std::ostream & operator<<(std::ostream &out, const JCylinder3D &cylinder)
Write cylinder to output stream.
double getVolume() const
Get volume.
bool is_inside(const JVector3D &pos) const
Check whether given point is inside cylinder.
JCylinder3D & add(const JVector3D &pos)
Add position.
double getRadius() const
Get radius.
JPosition2D()
Default constructor.
void addMargin(const double D)
Add (safety) margin.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
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.
Data structure for vector in three dimensions.
Data structure for position in three dimensions.
Interface for binary output.
double getDX() const
Get x direction.
double getDY() const
Get y direction.
JCylinder3D()
Default constructor.
bool is_inside(const JVector2D &pos) const
Check whether given point is inside circle.
friend JReader & operator>>(JReader &in, JCylinder3D &cylinder)
Read cylinder from input.
JVector2D & sub(const JVector2D &vector)
Subtract vector.
double getZmax() const
Get maximal z position.
JVector2D()
Default constructor.
double getY() const
Get y position.
JCylinder3D(const JCircle2D &circle, const double zmin, const double zmax)
Constructor.
double getX() const
Get x position.
Auxiliary classes and methods for 3D geometrical objects and operations.
void setZmin(const double zmin)
Set minimal z position.
double getLength() const
Get length.
double getX() const
Get x position.
double getY() const
Get y position.
JPosition3D getCenter() const
Get centre.
Data structure for vector in two dimensions.