最近在做一个2D界面的开发,其中会用到很多几何运算,不胜其烦。痛定思痛,不如自己写几个类吧,希望把关于点、线、矩形的操作包含进去,我用三个类表达他们,分别是CPoint2D、CLine2D、CRect2D。
CPoint2D
表示一个点,有两个数据成员,double x,double y分别表示x和y坐标。
构造函数
用一个点构造另一个点:
CPoint2D(CPoint2D pt);
用坐标x和y构造一个点。
CPoint2D(double x,double y);
析构函数
不需要做什么
~CPoint2D();
关于点的操作
平移
void Offset(double x,double y);
将点视为向量旋转,得到新的点
void Rotate(double angle);
计算一个点到另一个点的距离
double Distance(CPoint2D pt);
CLine2D
CLine2D定义了一条线段,同时也定义了一个向量。数据成员包含:
起点坐标
double x1;
double y1;
终点坐标
double x2;
double y2;
构造函数
用一条线段构造另一条线段
CLine2D(CLine2D line)
从两个点构造一条线段
CLine2D(CPoint2D pt1,CPoint2D pt2);
用两个点的坐标一条构造一条线段
CLine2D(double x1,double y1,double x2,double y2);
关于线的操作
计算线的长度
double GetLength();
将线的起点平移到一个点,默认将起点平移到原点
void Offset(CPoint2D pt={0,0})
void Offset(double x=0,double y=0)
线段与点
计算一个点到本线段的距离
double PointDistance(CPoint2D pt);
计算一个点到本线段的垂线
CLine2D PointVertLine(CPoint pt);
点的位置:返回0在线段上,返回1正向延长线,返回-1反向延长线,返回2左侧,返回-2右侧。
int PointPosition(CPoint2D pt)
线段与线段
计算一条线段在垂直于本线段方向的投影长度
double LineVertDist(CLine2D line)
计算一条线段在平行于本线段方向的投影长度
double LineParaDist(CLine2D line)
取得一条线段在垂直于本线段方向的投影线段
CLine2D LineParaLine(CLine2D line)
取得一条线段在平行于本线段方向的投影线段
CLine2D LinePara(CLine2D line)