17#ifndef ROOT_Math_GenVector_Plane3D 
   18#define ROOT_Math_GenVector_Plane3D  1 
   50template <
typename T = 
double>
 
   93   template <
class T1, 
class T2, 
class U>
 
  113   template <
class T1, 
class T2, 
class T3, 
class U>
 
  176   template <
class T1, 
class U>
 
  196   template <
class T1, 
class U>
 
  215   template <typename SCALAR = T, typename std::enable_if<std::is_arithmetic<SCALAR>::value>
::type * = 
nullptr>
 
  221      if (
s == SCALAR(0)) {
 
  224         const SCALAR w = 
Scalar(1) / 
s;
 
  235   template <typename SCALAR = T, typename std::enable_if<!std::is_arithmetic<SCALAR>::value>
::type * = 
nullptr>
 
  241      const auto m = (
s == SCALAR(0));
 
  245      const SCALAR w = SCALAR(1) / 
s;
 
  291   template <
typename T>
 
DefaultCoordinateSystemTag Default tag for identifying any coordinate system.
 
Class describing a generic displacement vector in 3 dimensions.
 
Scalar X() const
Cartesian X, converting if necessary from internal coordinate system.
 
Scalar Y() const
Cartesian Y, converting if necessary from internal coordinate system.
 
Scalar Z() const
Cartesian Z, converting if necessary from internal coordinate system.
 
Class describing a geometrical plane in 3 dimensions.
 
Plane3D(const Scalar &a, const Scalar &b, const Scalar &c, const Scalar &d)
generic constructors from the four scalar values describing the plane according to the equation ax + ...
 
Vector Normal() const
Return normal vector to the plane as Cartesian DisplacementVector.
 
Plane3D & operator=(const Plane3D &)=default
Assignment operator from other Plane3D class.
 
Plane3D()
default constructor create plane z = 0
 
bool operator!=(const Plane3D &rhs) const
 
DisplacementVector3D< Cartesian3D< T >, DefaultCoordinateSystemTag > Vector
 
Point ProjectOntoPlane(const Point &p) const
Return the projection of a Cartesian point to a plane.
 
PositionVector3D< T1, U > ProjectOntoPlane(const PositionVector3D< T1, U > &p) const
Return the projection of a point to a plane.
 
Scalar HesseDistance() const
Return the Hesse Distance (distance from the origin) of the plane or the d coefficient expressed in n...
 
Scalar C() const
Return the c coefficient of the plane equation .
 
Plane3D(const Vector &n, const Point &p)
constructor a Plane3D from a normal vector and a point coplanar to the plane
 
Plane3D(const PositionVector3D< T1, U > &p1, const PositionVector3D< T2, U > &p2, const PositionVector3D< T3, U > &p3)
constructor from three generic point belonging to the plane
 
Scalar A() const
Return the a coefficient of the plane equation .
 
Scalar D() const
Return the d coefficient of the plane equation .
 
Scalar Distance(const Point &p) const
Return the signed distance to a Point.
 
Scalar B() const
Return the b coefficient of the plane equation .
 
void Normalize()
Normalize the normal (a,b,c) plane components.
 
PositionVector3D< Cartesian3D< T >, DefaultCoordinateSystemTag > Point
 
bool operator==(const Plane3D &rhs) const
Exact equality.
 
void BuildFromVecAndPoint(const Vector &n, const Point &p)
 
Plane3D(const Plane3D &)=default
 
Plane3D(const DisplacementVector3D< T1, U > &n, const PositionVector3D< T2, U > &p)
Construct from a generic DisplacementVector3D (normal vector) and PositionVector3D (point coplanar to...
 
void BuildFrom3Points(const Point &p1, const Point &p2, const Point &p3)
 
Plane3D(const Point &p1, const Point &p2, const Point &p3)
constructor from three Cartesian point belonging to the plane
 
Scalar Distance(const PositionVector3D< T1, U > &p) const
Return the distance to a Point described with generic coordinates.
 
Class describing a generic position vector (point) in 3 dimensions.
 
Scalar Y() const
Cartesian Y, converting if necessary from internal coordinate system.
 
Scalar Z() const
Cartesian Z, converting if necessary from internal coordinate system.
 
Scalar X() const
Cartesian X, converting if necessary from internal coordinate system.
 
SVector< T, 3 > Cross(const SVector< T, 3 > &lhs, const SVector< T, 3 > &rhs)
Vector Cross Product (only for 3-dim vectors) .
 
Namespace for new Math classes and functions.
 
std::ostream & operator<<(std::ostream &os, const Plane3D< T > &p)
Stream Output and Input.
 
Impl::Plane3D< double > Plane3D
 
PositionVector3D< Cartesian3D< double >, DefaultCoordinateSystemTag > XYZPoint
3D Point based on the cartesian coordinates x,y,z in double precision
 
VecExpr< UnaryOp< Sqrt< T >, VecExpr< A, T, D >, T >, T, D > sqrt(const VecExpr< A, T, D > &rhs)
 
Impl::Plane3D< float > Plane3DF
 
static constexpr double s