A_star算法(A算法经典译文).docVIP

  • 23
  • 0
  • 约2.64万字
  • 约 10页
  • 2022-05-07 发布于天津
  • 举报
GameRes游戏开发资源网 AmitsAstarPage中译文 译序 这篇文章很适合A*算法的初学者,可惜网上没找到翻译版的。本着好东西不敢独享的想法,也为了锻炼一下英文,本人译了这篇文章。 由于本人英文水平非常有限,六级考了两次加一块不超过370分,因此本译文难免存在问题。不过也算是抛砖引玉,希望看到有更多的游戏开发方面的优秀译作出现,毕竟中文的优秀资料太少了,中国的游戏开发者的路不好走。 本人能力有限,译文中有小部分词句实在难以翻译,因此暂时保留英文原文放在译文中。对于不敢确定翻译是否准确的词句,本人用圆括号保留了英文原文,读者可以对照着加以理解。 A*算法本身是很简单的,因此原文中并没有过多地讨论A*算法本身,而是花了较大的篇幅讨论了用于保存OPEN和CLOSED集的数据结构,以及A*算法的变种和扩展。 编程实现A*是简单的,读者可以用STL对本文中的伪代码加以实现(本人已花一天时间实验过基本的A*搜索)。但是最重要的还是对A*本身的理解,这样才可以在自己的游戏中处理各种千变万化的情况。 翻译本文的想法产生于2006年5月,实际完成于2007年4月到6月,非常惭愧。 最后,本译文仅供交流和参考,对于因本译文放到网上而产生的任何问题,本人不负任何责任。 蔡鸿于南开大学软件学院2007年6月9日 原文地址:/~amitp/GameProgramming/ 相关链接:/%7Eamitp/gameprog.html#Paths 我们尝试解决的问题是把一个游戏对象(gameobject)从出发点移动到目的地。路径搜索(Pathfinding)的目标是找到一条好的路径一一避免障碍物、敌人,并把代价(燃料,时间,距离,装备,金钱等)最小化。运动(Movement)的目标是找到一条路径并且沿着它行进。把关注的焦点仅集中于其中的一种方法是可能的。一种极端情况是,当游戏对象开始移动时,一个老练的路径搜索器(pathfinder)外加一个琐细的运动算法(movementalgorithm)可以找到一条路径,游戏对象将会沿着该路径移动而忽略其它的一切。另一种极端情况是,一个单纯的运动系统(movement-onlysystem)将不会搜索一条路径(最初的“路径”将被一条直线取代),取而代之的是在每一个结点处仅采取一个步骤,同时考虑周围的环境。同时使用路径搜索(Pathfinding)和运动算法(movementalgorithm)将会得到最好的效果。 1导言 1.1算法 1.2 Dijkstra算法与最佳优先搜索 1.3 A*算法 2启发式算法 2.1 A*对启发式函数的使用 2.2速度还是精确度? 2.3衡量单位 2.4精确的启发式函数 241予页计算的精确启发式函数 2.4.2线性精确启发式算法 2.5网格地图中的启发式算法 2.5.1曼哈顿距离 2.5.2对角线距离 2.5.3欧几里得距离 2.5.4平方后的欧几里得距离 2.5.5Breakingties 2.5.6区域搜索 Implementationnotes 3.1概略 3.2源代码 3.3集合的表示 3.3.1未排序数组或链表 3.3.2排序数组 3.3.3排序链表 3.3.4排序跳表 3.3.5索引数组 3.3.6哈希表 3.3.7二元堆 3.3.8伸展树 3.3.9HOT队歹U 3.3.10比较 3.3.11混合实现 3.4与游戏循环的交互 3.4.1提前退出 3.4.2中断算法 3.4.3组运动 3.4.4细化 A*算法的变种 beamsearch 4.2迭代深化 4.3动态衡量 4.4带宽搜索 4.5双向搜索 4.6动态A*与终身计划A* 5处理运动障碍物 5.1重新计算路径 5.2路径拼接 5.3监视地图变化 5.4预测障碍物的运动6预计算路径的空间代价 6.1位置VS方向 6.2路径压缩 6.2.1位置存储 6.2.2方向存储 6.3计算导航点 6.4极限路径长度 6.5总结 1导言 移动一个简单的物体(object)看起来是容易的。而路径搜索是复杂的。为什么涉及到路径搜索就产生麻烦了?考虑以下情况: 物体(unit)最初位于地图的底端并且尝试向顶部移动。物体扫描的区域中(粉红色部分)没有任何东西显示它不能向上移动,因此它持续向上移动。在靠近顶部时,它探测到一个障碍物然后改变移动方向。然后它沿着U形障碍物找到它的红色的路径。相反的,一个路径搜索器(pathfinder)将会扫描一个更大的区域(淡蓝色部分),但是它能做到不让物体(unit)走向凹形障碍物而找到一条更短的路径(蓝色路径)。 然而你可以扩展一个运动算法,用于对付上图所示的障碍物。或者避免制造凹形障碍,或者把凹形出口标识为危险的(只有当目的地在里面时才进去): start 比起一直等到最后一刻才发现问题,路

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档