#ifndef _POINT_HPP_ #define _POINT_HPP_ #define NAMESPACE_POINT op #define NAMESPACE_POINT_BEGIN(x) namespace x { #define NAMESPACE_POINT_END(x) }; #include NAMESPACE_POINT_BEGIN (NAMESPACE_POINT) struct point { point(); point(double x_,double y_) :x(x_) ,y(y_) { } static point min_(const point&a,const point&b); static point max_(const point&a,const point&b); void set(const point&p); void set(double,double); void swap(point&p); bool operator<(const point&p)const; static bool eq(double l,double r,double deta); bool empty()const; bool invalid()const; bool operator==(const point&r)const; double dist_direct(const point&o)const; double dist_direct(double x,double y)const; double dist(const point&o)const; double dist(double x,double y)const; double cos_k(const point&o)const; double sin_k(const point&o)const; point middle(const point&o)const; std::tuple get_abc(const point&o)const; public: double x,y; }; NAMESPACE_POINT_END(NAMESPACE_POINT) #endif