[Astar_algorithm06]技术文档_A_star
Posted AIplusX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Astar_algorithm06]技术文档_A_star相关的知识,希望对你有一定的参考价值。
-
file:A_star.cpp
-
brief:基于父节点搜索邻域格点
-
author:AIplusX
-
param[in|out] 输入:父节点内存的地址 | 输出:无
-
return:无
-
exception:无
-
note:首先根据数组索引父节点周围的格点,然后根据算法逻辑进行格点属性(G,F值)的更新
-
remarks:注意堆中内存的利用,如果申请的内存代表的坐标已经有了,或者是障碍物,那么就需要delete掉申请的内存
void A_star::search_env_block(Point* p)
{
int temp_cost(INT_MAX);
for (int i = 0; i < env_nums; i++) {
Point* search_p = new Point((*p).x + offset_x[i], (*p).y + offset_y[i]);
if (judge_env_legal(*search_p)) {
temp_cost = (*p).Gn + calcu_cost(*p, *search_p);
if (is_alread_set(obstacleset, search_p) || is_alread_set(fatherset, search_p)) {
delete search_p;
continue;
}
else {
user_trajectory.map[search_p->x][search_p->y] = SEARCH;
if (!is_alread_set(openset, search_p)) {
search_p->Gn = temp_cost;
search_p->Fn = search_p->Gn + calcu_Hn(*search_p);
search_p->pre_point = p;
add_openset(search_p);
}else if(search_p->Gn > temp_cost){
search_p->Gn = temp_cost;
search_p->Fn = search_p->Gn + calcu_Hn(*search_p);
search_p->pre_point = p;
}
}
}
else {delete search_p;}
}
}
以上是关于[Astar_algorithm06]技术文档_A_star的主要内容,如果未能解决你的问题,请参考以下文章
[Astar_algorithm04]A_star类与Astar_algorithm函数
[Astar_algorithm01]A*算法伪代码以及思路