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

📄 pathplan.h

📁 操作说明: 1. 双击RobotView.exe
💻 H
字号:
// Pathplan.h: interface for the Pathplan class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PATHPLAN_H__BFAEA81F_F76C_4EF5_AE02_9520E82CCD59__INCLUDED_)
#define AFX_PATHPLAN_H__BFAEA81F_F76C_4EF5_AE02_9520E82CCD59__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


#include<math.h>
//using namespace move;

#define MAX  200
#define MH    12
#define NW    20





//////////////////////////////////////////////////////////////////////////////////////////
/*地图中的位置环境信息,x为栅格的中心横坐标,y为栅格的中心纵坐标,height表示此位置的高度*/
//////////////////////////////////////////////////////////////////////////////////////////
struct position{
    int    x ;
    int    y ;
    int    height;
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////
/*路径结构,pos[]为路径所经过的栅格组合,用位置数组表示,pathlength表示路径所经过的栅格个数,即路径长度。*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////
struct path{
    position  pos[100];
    int       pathlength;
};

class Pathplan{

private:
	//mapBase *pmapbase;  //存放地图指针
	//dataBase *pdatabase; //存放数据库指针
	int m_VMap[MH][NW];                 //放置虚拟地图
	position m_aimpos;                //目标位置
	position m_Oposition[MH*NW];        //用来存放有障碍物的栅格
	int m_onum;                       //有障碍物的栅格的个数
	int m_Kvh;                        //危险临界值
	float m_kg;                         //为一个常数,用来计算虚拟高度时用到
	float m_r;                          //为一个常数,用来计算虚拟高度时用到
	position m_robotpos;              //机器人的初始位置
	path m_S[MAX];                    //路径表
	path m_F[MAX];                    //路径表
	path m_MI[MAX];                    //路径表
	int m_Spathnum;                   //S表中路径的条数
	int m_Fpathnum;                   //F表中路径的条数
	int m_Mpathnum;                   //M表中路径的条数
	position m_pos[MAX];              //一个栅格周围的栅格坐标
	int m_posnum;                     //一个栅格周围的栅格个数
	position m_Midpos[MAX];           //符合分流条件的栅格位置
	int m_midnum;                     //符合分流条件的栅格个数
	path m_midpath[MAX];              //保存分流的结果
	path m_intopath;                  //保存汇流结果
	path m_resultpath;                //最终得到的最优路径
	position m_nextstep;              //下一步机器人要到达的位置
	int m_removeItem[MAX];
	int m_removeNum;

public:
    //把数据库中指针传到自己定义的指针中去
	//void setDatabase(dataBase *pdata);
	path GetPath();
	//把图库中的指针传到自己定义的指针中去
	//void setMapbase(mapBase *pmap);
	void GetVmap(int map[MH][NW]);
	//利用从图库传来的指针,把地图库中的相关信息传给m_VMap,m_VMap中就得到了初始的地图。
	void plan(int map[MH][NW]);

    //设置初始地图中所有障碍物的位置,放入一数组中,并把障碍物的个数放入m_onum
	void setOposition(/*int map[MH][NW]*/);

	//把初始地图转化为具有虚拟高度的虚拟地图
	void setVmap(float Kg, float r, int onum, position Oposition[NW*MH]);

	//从虚拟地图中得到危险临界值
	int getKVH(position Oposition[MH*NW]); 

	//设置机器人目前的位置,根据定位模块得到的接口
	void setRobotPos(int x,int y); 

	//把一条路径放入路径表中
	void pathIntoPlist(path S[MAX], path p ,int &num);

	//得到一个栅格周围的栅格及个数
	void getAround(position u);

	//得到一个栅格周围栅格的最小虚拟高度
	int getMinHeight(position u);

	//对一栅格进行储水操作
	void reserveWater(position &u, int  min);

	//得到一栅格u周围的某些栅格,这些栅格具有以下性质:虚拟高度小于m_Kvh,也小于u的虚拟高度,保存在midpos[]中,个数保存在midnum中
	void setMidPos(position u);

	//测试一个栅格是否在一条路径中
	int testPosInPath(position u,path l);

	//得到分流后的各路径
	void  getMidPath(path p, position pos[MAX]);

	//得到汇流后的路径
	void getIntoPath(path p, path q, position s);

	//把一条路径从路径表中删除
	void removePath(int  n, path  s[MAX],int &num);

	//进行消环操作
	void removeCircle(path &p);

	//得到最短路径
	void getShortest(path s[MAX],int num);

	//设置机器人下一步要到达的位置
	void setNextStep(path  p);

	//根据以上的方法调用进行路径规划
	void pathPlanAll(/*mapBase *pmap,dataBase *pdata,*/int aimx,int aimy);
	void removeOfItem(int i);//如果m_removeItem中没有元素与i相等,则把i放到次数组的最后
	int pathEqual(path p,path q);//测试p和q两条路径是否相同
public:
	Pathplan();
	virtual ~Pathplan();
};

#endif // !defined(AFX_PATHPLAN_H__BFAEA81F_F76C_4EF5_AE02_9520E82CCD59__INCLUDED_)

⌨️ 快捷键说明

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