// Generic Class used to represent 2d point in cartesian coordinates.
class Point2D <T>
{
public:
	// the x-axis value
	// the y-axis value
	T x, y;
 
	Point()
	Point( T x , T y)
	Point([IN] Point point)
	
	// @purpose : add fixed distance to current point axises
	void add( T distance );
	
	// @purpose : add point.x value to this.x value and point.y value to this.y value
	void add( [IN] Point2D other );
 
	// @purpose : subtract ...
	void sub( T distance );
	void sub( [IN] Point2D other );
 
	// @purpose: add p1 point to p2 point and return new point of those
	// @return: Point2D object.
	static Point2D<T> Add ( [IN] Point2D<T> p1, [IN]Point2D<T> p2 );
 
	// subtract p1 point from p2 point and return new point of those
	// return Point2D object, otherwise false
	static Point2D<T> Subtract ( [IN] Point2D<T>, [IN] Point2D<T> p2 );
 
	//Operators
	bool equal   ( [IN] Point2D<T> p );
	bool Notequal( [IN] Point2D<T> p );
};