// Point3d doxygen page /** \page Point3DPage Point3D Classes To avoid exposing templated parameter to the users, typedefs are defined for all types of vectors based an double's and float's. To use them, one must include the header file Math/Point3D.h. The following typedef's, defined in the header file Math/Point3Dfwd.h, are available for the different instantiations of the template class ROOT::Math::PositionVector3D:
XYZPoint p1; // create an empty vector (x = 0, y = 0, z = 0) XYZPoint p2( 1,2,3); // create a vector with x=1, y = 2, z = 3; Polar3DPoint p3( 1, PI/2, PI); // create a vector with r = 1, theta = PI/2 and phi=PI RhoEtaPHiPoint p4( 1, 2, PI) // create a vector with rho= 1, eta = 2, phi = PINote that each type of vector is constructed by passing its coordinates representations, so a XYZPoint(1,2,3) is different from a Polar3DPoint(1,2,3).
In addition the Point classes can be constructed by any vector, which implements the accessors x(), y() and z(). This con be another Point3D based on a different coordinate system types or even any vector of a different package, like the CLHEP HepThreePoint that implements the required signatures.
XYZPoint p1(1,2,3); RhoEtaPHiPoint r2(v1); CLHEP::HepThreePoint q(1,2,3); XYZPoint p3(q)
p1 += v1; p1 -= v1; p3 = p1 + v1; // p1 and p3 are the same type p3 = v1 + p1; // p3 is based on the same coordinate system as v1 p3 = p1 - v1; p3 = v1 - p1; v2 = p1 - p2; // difference between points returns a vector v2 based on the same coordinate system as p1Note that additions between two points is NOT possible and the difference between points returns a vector.