file: rrt_graph.h
brief:这个rrt_graph.h文件是为了绘制rrt的地图,主要内容是包括任意障碍物的绘制方法的功能实现
author:AIplusX
version:beta_v0.0
date:2021_12_01
update:2021_12_01
warning:记得在类的析构函数里面delete掉堆内申请的内存
remarks:无
todo:可以做为之后rrt改进算法绘图类的基类
#pragma once
#include "Graph.h"
class rrtGraph
{
public:
rrtGraph();
~rrtGraph();
void init_obs_start_end();
private:
rrtPara* rrt_graph_para = new rrtPara;
};
file:rrt_graph.h
brief:用户数据结构体
author:AIplusX
param:无
return:无
exception:无
note:无
remarks:无
typedef struct _rrt_para
{
int rrt_graph_width = 960;//可走地图宽度,窗口宽度
int rrt_graph_height = 480;//可走地图高度
int block = 16;//起点,终点方块
int rrt_graph_real_height = rrt_graph_height + block * 3;//窗口高度
int obstacle_r = 30;//绘制障碍物画笔半径
int separating_line = 5;//下方分割线宽度
int rrt_line_width = 3;//探索路径宽度
int rrt_edge_len = 20;//探索路径长度
float beta = 0.5;//随机点延伸和终点延伸的概率阈值
int avoid_obstacles_cnt = 5;//避障时的像素点要求
}rrtPara;
file:rrt_graph.cpp
brief:rrt地图的初始化,主要是可以绘制任意形状的障碍物
author:AIplusX
param:私有成员变量
return:无
exception:无
note:主要逻辑在上一篇文章中已经写过了,在此不再赘述,请移步阅读
remarks:无
rrtGraph::rrtGraph()
{
init_obs_start_end();
//while (1) {
// HWND wnd = GetHWnd();
// if (MessageBox(wnd, _T("rrt is over.\ndo it again?"), _T("ask"), MB_YESNO | MB_ICONQUESTION) == IDYES)
// init_obs_start_end();
//}
//else
// Quit();
}
void rrtGraph::init_obs_start_end()
{
initgraph(rrt_graph_para->rrt_graph_width, rrt_graph_para->rrt_graph_real_height);
settextstyle(16, 8, _T("Consolas"));
setbkcolor(WHITE);
settextcolor(BLACK);
setlinestyle(PS_DASHDOT, rrt_graph_para->separating_line);
setlinecolor(BLACK);
setfillstyle(BS_SOLID);
cleardevice();
setfillcolor(RED);
solidrectangle(0, 0, rrt_graph_para->block, rrt_graph_para->block);
setfillcolor(GREEN);
solidrectangle(rrt_graph_para->rrt_graph_width - rrt_graph_para->block,
rrt_graph_para->rrt_graph_height - rrt_graph_para->block,
rrt_graph_para->rrt_graph_width, rrt_graph_para->rrt_graph_height);
setfillcolor(BLACK);
line(0, rrt_graph_para->rrt_graph_height + rrt_graph_para->separating_line,
rrt_graph_para->rrt_graph_width,
rrt_graph_para->rrt_graph_height + rrt_graph_para->separating_line);
bool mouse_down_flag = false;
ExMessage mse;
while (1) {
mse = getmessage(EM_MOUSE | EM_KEY);
if (mouse_down_flag == false && mse.message == WM_RBUTTONDOWN) {
mouse_down_flag = true;
while (1) {
mse = getmessage(EM_MOUSE);
if (mse.message == WM_RBUTTONUP) {
mouse_down_flag = false;
break;
}
else {solidcircle(mse.x, mse.y, rrt_graph_para->obstacle_r);}
}
}
else if (mse.message == WM_LBUTTONUP) {
setfillcolor(GREEN);
solidcircle(0 + rrt_graph_para->block, rrt_graph_para->rrt_graph_height+block,
rrt_graph_para->obstacle_r/4);
break;
}
}
}
file:rrt_graph.cpp
brief:析构函数
author:AIplusX
param:无
return:无
exception:无
note:释放掉堆里的内存
remarks:以后设计类的时候记得要把类的析构函数设计成virtual的
rrtGraph::~rrtGraph()
{
delete rrt_graph_para;
}
评论(0)
您还未登录,请登录后发表或查看评论