You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
2.3 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#ifndef XJ_POINT2D_
#define XJ_POINT2D_
#include "dllExport.h"
#include "Common.h"
#include <math.h>
//2维点
class XJ_ALGO_EXPORT Point2D
{
public:
Point2D() : _x(0.0), _y(0.0){}
~Point2D() {}
typedef double Standard_Real;
Point2D(Standard_Real X, Standard_Real Y) : _x(X), _y(Y){}
inline Standard_Real& x() {return _x;}
inline Standard_Real& y() {return _y;}
inline Standard_Real x() const { return _x; }
inline Standard_Real y() const { return _y; }
bool IsZero() {return (xjdef::equivalent(_x, 0.0) && xjdef::equivalent(_y, 0.0));}
void set(Standard_Real X, Standard_Real Y) {_x = X; _y = Y;}
inline Point2D& operator = (const Point2D& rhs)
{
set(rhs.x(), rhs.y());
return *this;
}
//加法运算
inline Point2D operator + (const Point2D& rhs) const
{
return Point2D(_x + rhs.x(), _y + rhs.y());
}
inline Point2D& operator += (const Point2D& rhs)
{
_x += rhs.x();
_y += rhs.y();
return *this;
}
//减法运算
inline Point2D operator - ( const Point2D& rhs) const //后面加const则对于const 对象也能使用-操作符,否则编译不通过
{
return Point2D(_x-rhs.x(), _y-rhs.y());
}
inline Point2D& operator -= (const Point2D& rhs)
{
_x -= rhs.x();
_y -= rhs.y();
return *this;
}
//乘法运算
inline double operator * (const Point2D& rhs) const
{
return _x*rhs.x() + _y*rhs.y();
}
inline Point2D operator * (double rhs) const
{
return Point2D(_x*rhs, _y*rhs);
}
inline Point2D& operator *= (double rhs)
{
_x *= rhs;
_y *= rhs;
return *this;
}
inline Point2D operator / (double rhs) const
{
return Point2D(_x/rhs, _y/rhs);
}
inline bool operator == (const Point2D& rhs) const {return _x == rhs.x() && _y == rhs.y();}
//求二维向量的模
inline double Magnitude() const
{
return sqrt(_x * _x + _y * _y);
}
inline void Normalize()
{
double length = Magnitude();
if(length == 0.0)
return;
_x = _x / length;
_y = _y / length;
}
//求二维空间中的两点之间的距离
double Distance(const Point2D& other) const;
//二维点到二维线上的投影点
Point2D Perpendicular(Point2D lineBase, Point2D linedir) const;
private:
Standard_Real _x;
Standard_Real _y;
};
//global functions
/// Multiplication of scalar with vector.
inline Point2D operator * (float rhs, const Point2D& rvs)
{
return Point2D(rvs.x()*rhs, rvs.y()*rhs);
}
#endif