⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 base.cpp

📁 通过可执行文件中的菜单“绘图”
💻 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(double ox, double oy )
{
	x = ox, y = oy;
}
	
Position::Position(const double *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.;
}

void Position::Set(double ox, double oy)
{
	x = ox, y = oy;
}

void Position::Set(const double *pnt)
{
	x = pnt[0], y = pnt[1];
}

//操作符重载
double&
Position::operator[](const  int& i)
{
	if(i==0) return x;
	else if(i==1) return y;
	else return x;
}
// 作为点的矩阵
Position::operator const double *() const
{
	return	&x;
}
// 作为点的矩阵
Position::operator double *()
{
	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(position.x*scale, position.y*scale);
	return p;
}

Position operator*(const double& scale,	const Position& position)
{
	Position p(position.x*scale, 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;
}

const	Position&
Position::operator*=(const double& scale)
{
	x *= scale, y *= scale;
	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 ;
}

// 全局函数:计算两点posSrc1 和 posSrc2连线与x轴的夹角
double GetAngleToXAxis(const Position& posSrc1,const Position& posSrc2)
{
	Position pos1(posSrc1),pos2(posSrc2);
	double len = pos1.Distance(pos2) ;
	if(len < DISTANCE_ZERO) 
		return	0 ;
	Position dp = pos2 - pos1;
	double cosv = dp.x/len ;
	double sinv = dp.y/len ;
	if(sinv >= 0)
		return acos(cosv) ;
	else if(sinv < 0)
		return 2.*PI-acos(cosv) ;
	return 0 ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -