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

📄 gridcalculate.cpp

📁 经纬度坐标转和99方格坐标互相转换的小程序。
💻 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 + -