// Point3d doxygen page /** \page Point3DPage Point3D Classes The following types of Point are defined by defaults:

Constructors and Assignment

The following declarations are available:
 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 = PI
Note 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)  

Coordinate Accessors and Setter Methods

For the Points classes we have the same methods as for the Vector classes. See the example for the \ref Vector3DPage.

Arithmetic Operations

The following operations are possible between Point3D and Vector3D classes: ( p is a one of the Point3D class, v is a Vector3D class )
p += v; 
p -= v;   
In addition between Point 3D classes, the following operations are possibles returning Points or Vectors ( points and vectors can be in different coordinate system but the returned type, p3 (v3) is the same type of p1 (v1) )
p3 = p1 + v2;   
p3 = v1 + p2;  
p3 = p1 - v2;   
p3 = v1 - p2;      
v3 = p1 - p2;    // difference between points returns a vector 
Note that additions between two points is NOT possible and the difference between points returns a vector. */