📄 base.cpp
字号:
#include "stdafx.h"
#include "math.h"
#include "base.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//
// for class Position;
//
Position::Position()
{
x = y = 0;
}
Position::Position(int ox, int oy )
{
x = ox, y = oy;
}
Position::Position(const int *pnt)
{
x = pnt[0], y = pnt[1];
}
Position::Position(const Position& positionSrc)
{
x = positionSrc.x, y = positionSrc.y ;
}
Position::~Position()
{
}
void Position::Init()
{
x = y = 0;
}
//操作符重载
int&
Position::operator[](const int& i)
{
if(i==0) return x;
else if(i==1) return y;
else return x;
}
Position::operator const int *() const // as a point arrsy
{
return &x;
}
Position::operator int *() // as a point arrsy
{
return &x;
}
const Position&
Position::operator=(const Position& positionSrc)
{
x=positionSrc.x, y=positionSrc.y;
return *this;
}
BOOL operator==(const Position& positionSrc1,const Position& positionSrc2)
{
Position pnt1(positionSrc1),pnt2(positionSrc2);
if(pnt1.Distance(pnt2) < DISTANCE_ZERO*100) return TRUE;
return FALSE;
}
Position operator+(const Position& position1,const Position& position2)
{
Position p(position1.x+position2.x, position1.y+position2.y);
return p;
}
Position operator-(const Position& position1,const Position& position2)
{
Position p(position1.x-position2.x, position1.y-position2.y);
return p;
}
Position operator*(const Position& position, const double& scale)
{
Position p(int(position.x*scale), int(position.y*scale));
return p;
}
Position operator*(const double& scale, const Position& position)
{
Position p(int(position.x*scale), int(position.y*scale));
return p;
}
const Position&
Position::operator+=(const Position& positionSrc)
{
x+=positionSrc.x, y+=positionSrc.y;
return *this;
}
const Position&
Position::operator-=(const Position& positionSrc)
{
x-=positionSrc.x, y-=positionSrc.y;
return *this;
}
//计算两个位置类对象的距离
double Position::Distance(const Position& pnt)
{
double dis = sqrt( (x-pnt.x)*(x-pnt.x) + (y-pnt.y)*(y-pnt.y));
return dis;
}
//比较两个位置类对象是否相等
BOOL Position::IsSame(const Position& pointSrc)
{
if(Distance(pointSrc) < DISTANCE_ZERO*100) return TRUE;
return FALSE;
}
//判断是否在包围盒内
BOOL Position::IsInBox(const BOX2D& box)
{
if( x > box.min[0] && x < box.max[0]
&& y > box.min[0] && y < box.max[1] )
return TRUE;
return FALSE;
}
//实现位置类的存储
void Position::Serialize(CArchive &ar)
{
if(ar.IsStoring())
ar << x << y ;
else
ar >> x >> y ;
}
//位置类对象的平移操作
Position Position::Offset(const int & deltax,const int & deltay)
{
Position pnt(x + deltax, y + deltay);
return pnt;
}
//位置类对象的平移操作
Position Position::Offset(const Position& off)
{
Position pnt(x + off.x, y + off.y);
return pnt;
}
//位置类对象的旋转操作
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -