?? pathplan.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 + -