📄 gridcalculate.cpp
字号:
#include "stdafx.h"
#include <boost/lexical_cast.hpp>
#include "GridCalculate.h"
CGridCalculate::CGridCalculate(void)
{
intGrid[0][0]=1;
intGrid[0][1]=2;
intGrid[0][2]=3;
intGrid[1][0]=8;
intGrid[1][1]=9;
intGrid[1][2]=4;
intGrid[2][0]=7;
intGrid[2][1]=6;
intGrid[2][2]=5;
FirstMapX=116.0;
FirstMapY=39.5;
FirstGridX=48;
FirstGridY=42;
//InitCenter();
}
CGridCalculate::~CGridCalculate(void)
{
}
void CGridCalculate::InitCenter(double x,double y,int gx,int gy)
{
FirstMapX=x;
FirstMapY=y;
FirstGridX=gx;
FirstGridY=gy;
}
void CGridCalculate::CalculateGrid(string& grid,double pos1x,double pos1y,double pos2x,double pos2y,int level)
{
double stepx=1.0;
double stepy=0.5;
double distencex=pos2x-pos1x;
double distencey=pos1y-pos2y;
int gridsize=grid.size();
for(int i=1;i<=(gridsize-3);i++)
{
stepx=stepx/3.0;
stepy=stepy/3.0;
}
if(level==1)
{
int gx=static_cast<int>(distencex/stepx);
int gy=static_cast<int>(distencey/stepy);
ASSERT(gx<=2);
ASSERT(gy<=2);
ASSERT(gx>=0);
ASSERT(gy>=0);
grid=grid+boost::lexical_cast<std::string>(intGrid[gy][gx]);
}
else
{
int gx=static_cast<int>(distencex/stepx);
int gy=static_cast<int>(distencey/stepy);
ASSERT(gx<=2);
ASSERT(gy<=2);
ASSERT(gx>=0);
ASSERT(gy>=0);
grid=grid+boost::lexical_cast<std::string>(intGrid[gy][gx]);
double nextx=pos1x+gx*stepx;
double nexty=pos1y-gy*stepy;
--level;
CalculateGrid(grid,nextx,nexty,pos2x,pos2y,level);
}
}
string CGridCalculate::GetGrid(double posx,double posy,int level)
{
double distencex=posx-FirstMapX;
double distencey=FirstMapY-posy;
int grid2x,grid2y;
double pos1x,pos1y;
if(distencex<0)
{
grid2y=FirstGridY+static_cast<int>(distencex)-1;
pos1x=FirstMapX+static_cast<int>(distencex)-1;
}
else
{
grid2y=FirstGridY+static_cast<int>(distencex);
pos1x=FirstMapX+static_cast<int>(distencex);
}
if(distencey<0)
{
grid2x=FirstGridX+static_cast<int>(distencey/0.5);
pos1y=FirstMapY-static_cast<int>(distencey/0.5)*0.5+0.5;
}
else
{
grid2x=FirstGridX+static_cast<int>(distencey/0.5)+1;
pos1y=FirstMapY-static_cast<int>(distencey/0.5)*0.5;
}
string grid=boost::lexical_cast<std::string>(grid2x)+boost::lexical_cast<std::string>(grid2y);
if(level==0)
return grid;
CalculateGrid(grid,pos1x,pos1y,posx,posy,level);
return grid;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -