A*寻路(一) 顽皮猫详解A*算法的工作原理

最近在学习U3D人工智能的A*寻路,相信只要是对游戏开发有所了解或者对算法有一定研究的同学,一定都听说过A*算法。那么A*算法究竟是什么原理能,下面我来进行详细的解答。

在讲解A*之前,我们先来了解一下,A*算法是要建立在一个“地图”上的,这个所谓的“图”主要分为3类:1.基于单元的导航图 2.可视点导航图 3.导航网格

单元的导航图简单的说,就像是纱窗一样,由一些形状一样的规整的图形组成的图,这些图形一般是正方形或者六边形,例如下面的图形:

 其他两种图由于和我这篇讲的不相关,我就不展开了,感兴趣的同学可以自己查资料。

我们接下来要讲解的A*算法就是建立在此单元导航图上的。


A*算法是为了寻找从起点到终点的最短路径,并且有障碍物的时候会避开障碍物。为了达到此目的,我们必须要有三个参数:1.记录起点到当前位置的距离 2.当前位置到终点的最小距离 3.从起点开始经过此节点,并且加上从当前节点到达终点的最小距离(听上去有点拗口,不过意思很简单,就是 从起点开始,经过此节点,到达终点)

这里我们分别用:

g表示从起点出发,到达当前位置的距离。

h表示从当前节点出发到达终点的估计最小距离。(注意这里的h一般是通过某种算法得到的估计值,不一定准确,但是可以作为A*算法的参考)

f表示 g+h


当然,我们还需要一个记录当前节点是从何处走来的,即:当前节点的父节点parent。这下,计算A*的数据结构就出来了,每个节点包括以上4个属性,代码表示如下:

struct StartNode

{

float g=0;

float h=估算当前与终点的距离;

float f=g+h;

StartNode parent =null;

}


在上面的单元导航图中,每一个格子周围有8个相邻的格子,每次移动的时候,只能移动到这8个相邻的格子上面。(这里说明一下,格子分的越多,寻找的路径为好(越短),但是寻路的时间也越长)

A*算法还需要用到两张表:1.Open表由待考察的节点组成。 2.Closed表由已经考察过的节点组成。(以考察过&#x

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值