一种地图寻路方法及系统的制作方法

文档序号:6460168阅读:257来源:国知局
专利名称:一种地图寻路方法及系统的制作方法
技术领域
本发明涉及地图寻路技术,特别是指一种基于导航格的地图寻路方法及系统。

背景技术
随着网络游戏的不断发展,在基于三维(3D)场景的游戏中,经常需要实现虚拟物体在场景中的移动,在移动过程中就涉及到寻路的问题。在游戏寻路领域,A*寻路算法是一种被人们广泛使用的人工智能技术,A*寻路算法实际是一种启发式搜索,就是利用一个估价函数评估每次决策的价值,决定先尝试哪一种方案。具体而言,所谓启发式搜索,就是在当前搜索节点向下选择下一步节点时,可以通过一个启发函数来进行选择,选择代价最少的节点如距离当前节点最近的节点作为下一步搜索节点,并跳转到选定的下一步节点上,直到到达目标节点。
目前,3D场景中常用的寻路方法有基于三角面的A*寻路方法、A*二层寻路方法。具体来说,基于三角面的A*寻路方法先要设置存放所有已探知但未搜索过的节点的打开表(Open Table),以及存放已搜索过的节点的关闭表(CloseTable);开始寻路时,自起始节点起,将每个节点作为当前节点加入Open Table,在未到达目标节点且Open Table表非空的情况下,逐一对每个当前节点寻找其可能的子节点,并计算每个子节点的估值;每次估算完就将当前节点放入CloseTable,选择下一个当前节点,之后再寻找新的当前节点的子节点,并计算每个子节点的估值,如此反复,直到输出找到的路径为止。从上述处理过程可以看出,当一个场景对应的地图由大量密集的三角面组成时,如果起始节点距离目标节点很远且基于三角面寻路,由于要存储每个已探知或已搜索过的节点,那么,搜索空间中就需要保存大量扩展出来的节点,空间开销会特别巨大,而其中有很多节点实际是无关节点,如此,不仅占用了大量不必要的空间开销,造成浪费;且会严重影响寻路的效率。
至于A*二层寻路方法,主要是在地图上创建一个低密度的菱形网格,固定选取菱形网格的中心点作为路点,先采用宏观寻路方法确定粗略路径,然后在每一段路径上使用微观寻路,但这种方法在寻路过程中采用的搜索节点是网格的中心点,在适用范围上具有一定的局限性,只能处理二维形状规则的地图,而不能用于二维或三维不规则形状的地图。


发明内容
有鉴于此,本发明的主要目的在于提供一种地图寻路方法及系统,既能节省空间占用,又能提高寻路效率,还适用于对各种形状地图的处理。
为达到上述目的,本发明的技术方案是这样实现的 本发明提供了一种地图寻路方法,将平面地图划分为一个以上大小相等的区域,在区域边界上生成路点;需要寻路时,先基于区域进行寻路,获得区域路径;再根据获得的区域路径基于三角面寻路,生成最终路径。
其中,所述划分区域为采用等间距的垂直和水平线将平面地图分割为一个以上区域大小相等的方格。所述生成路点为将所划分区域各边与平面地图所构成多边形的各边重合线段的中点作为路点。所述获得区域路径为先确定从起点到终点途径的区域,再根据所确定区域之间的关联以及区域间的进入点,得到路点构成的区域路径。
上述方案中,所述寻路采用A*寻路算法。
上述方案中,在划分区域之前,该方法进一步包括将三维场景对应的地图导航片投影到平面,形成平面地图。
上述方案中,所述基于区域进行寻路具体包括先确定起点、终点以及起点和终点分别所属的划分区域,以区域为单位进行寻路。
本发明还提供了一种地图寻路系统,包括区域生成模块、路点管理模块、寻路模块;其中, 区域生成模块,用于将多边形平面地图划分为一个以上大小相等的区域;路点生成模块,负责针对划分的每块区域,获取区域各边与多边形各边重合线段的中点作为路点,将每块区域中的路点生成路点序列,并建立路点序列内各路点之间的连通关系;寻路模块,用于采用A*寻路算法进行寻路; 寻路模块进一步包括区域寻路模块和三角面寻路模块,所述区域寻路模块以区域为单位采用A*寻路算法进行寻路,并根据途径的区域及区域间的进入点,确定由路点构成的区域路径;所述三角面寻路模块,在具体场景中采用基于三角面的A*寻路,得到最终的移动路径。
本发明所提供的地图寻路方法及系统,将场景对应的平面地图划分为若干个大小相等的区域,并在区域的边界上生成路点;寻路时,先基于区域进行寻路,获得区域路径后,再进一步根据所确定的区域路径在具体场景中采用基于三角面的寻路,生成最终的移动路径。因此,本发明具有以下的优点和特点 1)本发明先基于区域进行寻路,再基于所确定区域涉及到的路点进行寻路,虽然也是采用A*寻路算法,但第一次寻路是以区域为单位,搜索节点相当于是一个个区域,第二次寻路仅涉及已确定的区域路径涵盖的范围,不再有大量的无关节点,显然,寻路过程中大大减少了需占用的存储空间,降低了空间开销。
2)本发明采用的二级寻路方式,第一级以区域为单位先做粗略寻路,将搜索范围缩小;第二级再基于已确定的区域逐一做精细寻路,按照基于三角面的方式进行寻路,获取最终移动路径,如此,相当于把高密度的三角面稀疏化,分摊了时间、空间的开销,有效降低了整个寻路过程的时空复杂度,可大大提高寻路效率。
3)由于将地图进行了区域划分,且所采用的路点在区域边界上,路点的位置与地图的形状相关,所以,本发明可适用于对各种形状的地图进行处理,例如存在不连通区域的地图等,适用范围更广,实用性更强。
4)本发明中路点获取的是所划分区域的边与多边形地图的边重合线段的重点,可以动态生成路点,而不是固定不变的,这样,在实现上更灵活、方便,与实际路径更接近,所得到的移动路径精确度更高。



图1为本发明方法总体的实现流程示意图; 图2为三维场景地图投影到平面的示意图; 图3为将图2所示地图划分为导航格的示意图; 图4为图2所示地图生成路点后的示意图; 图5为本发明中一种生成导航格的实现流程示意图; 图6a至图6g为本发明一实施例的实现过程示意图。

具体实施例方式 本发明的基本思想是将所需处理场景对应的平面地图划分为若干个大小相等的区域,并在区域的边界上生成路点;当需要寻路时,先基于区域进行寻路,获得从起点到终点的区域路径;之后,再进一步基于所获得的区域路径采用基于三角面的寻路,生成最终路径。
其中,每个区域可称为一个导航格,相应的,区域路径就是将每个导航格看作一个点,先确定由起点所属导航格到终点所属导航格途经的所有导航格,再根据所确定导航格间的关联及导航格间的进入点,得到一条由路点构成的起点到终点的路径。所述路点是导航格的各边与平面地图所构成多边形的各边重合线段的中点,每个导航格各个边上的所有路点构成该导航格对应的路点序列。
这里,所述的场景可以是二维或三维场景,例如游戏中的3D社区地图,对于3D场景,需要先将3D场景的地图导航片投影到平面上,得到一个多边形平面地图;对于二维平面场景,可直接采用平面地图。所述导航格可以采用不同的形状,如方格、矩形格、六角形格等,只要区域大小相等即可;较佳的,用等间距的垂直和水平线将整个平面地图分割为若干个区域大小相等的方格。
如图1所示,本发明的地图寻路方法包括以下步骤 步骤101获取所需处理场景对应的多边形平面地图,并将所获得的平面地图多边形划分为若干个大小相等的导航格。
这里,所述获取多边形平面地图,对于3D场景的地图,例如游戏中的社区地图,需要先将地图导航片投影到平面上,得到一个多边形平面地图,如图2所示,图2是一个3D社区地图导航片投影到平面,得到的多边形平面地图。
所述划分可以采用不同方式、不同形状的划分,只要各个导航格区域相等。较佳的,用等间距的垂直和水平线将多边形划分为若干个方格,如图3所示,图3为将图2所示多边形平面地图划分为大小相等的方格。
步骤102生成每个导航格对应的路点序列,并建立每个路点序列内各路点之间的连通关系。
这里,每个路点是导航格的某条边与多边形的某条边重合的线段的中点,如图4所示,图4为基于图2所示地图生成路点后的地图,图4中的黑点均为路点,每个导航格各边上的所有路点构成路点序列。一般,为每个导航格创建一个结构体或称数据结构,结构体中包括导航格的相关信息以及其对应的路点序列。
通常,所述导航格对应的路点序列内各路点间的连通关系可以根据基于三角面的寻路建立,连通关系的保存可使用并查集的数据结构来实现,所谓并查集是指若干个不相交集合,能够实现较快的合并、判断元素所在集合的操作,主要涉及对集合的合并和查找。
步骤103需要寻路时,基于导航格采用A*寻路,获得导航格路径。
具体来说,当需要寻路时,先输入起点和终点的坐标位置,根据坐标位置即可定位起点和终点分别所属的导航格;之后,就以导航格作为单位点,起始导航格为起点,终止导航格为终点,进行A*寻路。
具体基于导航格的A*寻路过程包括以下步骤 A、构造Open表,访问起始导航格可到达的相邻导航格,把二元组<导航格,进入点>作为元素放入表中。
这里,对于起始导航格可到达的相邻导航格需要调用低层基于三角面的寻路来确定扩展方向。
B、如果Open表不空,取出表中估价值最小的元素,放入Close表。设置取出的导航格为当前导航格。
C、如果当前导航格等于终点导航格,则寻路结束,执行步骤E;否则,执行步骤D; D、访问当前导航格可到达的相邻导航格,处于未访问过状态的元素<导航格,进入点>都加入Open表中,返回步骤B。
E、如果寻找到终点,则沿各状态点生成一条由路点构成的从起点到终点的路径。
步骤104根据生成的导航格路径,在具体场景中进行基于三角面的A*寻路,生成最终的移动路径。
步骤103中,根据导航格间的关联及进入点可先得到一条由路点构成的粗略路径,本步骤中,在具体场景移动中,再进一步采用基于三角面的A*寻路,得到细化的移动路径。
本发明中,之所以将所划分的区域称为导航格,是因为每个导航格对应着一个导航片区域,具有导航作用,也就是说相邻导航格之间具有关联关系。基于此,本发明中一种生成导航格的过程如图5所示,包括以下步骤 步骤501确定当前导航格左上角坐标; 因为地图具有一定的坐标范围,且每个导航格的大小在划分时是已知的,这里,根据导航格左上角坐标可以确定导航格在地图中所处的位置,也可以确定导航格边界与地图的关系。
步骤502获取当前导航格右边界路点和下边界路点; 这里,如果两个导航格有公共边,也就是说两个导航格相邻,那么,公共边上的路点两个导航格可以共用。基于此,本步骤可以不用获取当前导航格上边界和左边界的路点,这两个边上的路点在步骤503中,可以通过提取左边导航格右边界上的路点、以及上边导航格下边界上的路点直接获取。如此,还可以提高生成效率,降低程序运算的复杂度。
步骤503设置当前导航格与上边导航格、左边导航格的关联,获取上边界和左边界上的路点; 这里,对于当前导航格而言,其上边导航格和左边导航格的路点已经在先生成并获取,此处只要当前导航格主动与上边导航格、左边导航格进行关联,即可获取当前导航格上边界和左边界上的路点。
步骤504生成当前导航格的路点序列,并建立各路点之间的连通关系。
这里,所述路点序列就是当前导航格各个边界上所有路点的集合;所述建立各路点间的连通关系是通过基于三角面的A*寻路方法实现。
图5给出的生成导航格的方法是从左上角开始向右、向下生成导航格,在实际应用中,也可以从右上角向左、向下生成导航格,或从左下角向右、向上生成导航格,或从右下角向左、向上生成导航格,处理过程都是类似的,只需替换上述步骤中选择的角坐标以及边界即可,例如确定右上角坐标,获取左边界、下边界上的路点等等。
下面结合具体实施例和附图详细说明一下本发明地图寻路方法的实现。
图6a至图6g给出了一实施例中实现地图寻路的过程,本实施例中,采用等间距的垂直和水平线将多边形地图划分为若干个方格,图6中的黑点均为路点。S点为起点,T点为终点,分别用五角星表示,灰色填充的方格为搜索过的方格节点。
图6a为起始状态,从S点到T点的寻路过程是这样 步骤11定位起点S与终点T所属的导航格分别为Gs、Gt,如图6b所示。
步骤12执行A*寻路算法,根据S点能走到的路点,扩展出导航格G0,并将G0放入优先队列,如图6c所示。
这里,导航格G0是从起始导航格Gs第一个扩展出的导航格,具体如何确定起始导航格Gs的扩展方向,需要通过调用低层基于三角面的A*寻路算法确定。具体到本实施例中,对于导航格Gs来说,根据基于三角面的A*寻路来看,从起点S只能向左移动,右边不连通,所以就从导航格Gs向左扩展出导航格G0;如果从起点S向左、右两侧都可以移动的话,根据A*寻路算法就可以从导航格Gs向左、向右各扩展出一个导航格,之后继续基于导航格执行A*寻路算法,至于A*寻路算法如何实现,属于已有技术,在此不再详述。
步骤13基于A*寻路算法,从导航格G0扩展出导航格G1、G2、G3,如图6d所示。
步骤14根据启发搜索规则,即根据到导航格Gt的距离,优先扩展导航格G1,得到导航格G4,如图6e所示。
步骤15依据与步骤14相同的原理进行操作,扩展导航格G4,得到导航格G5,进而到达Gt,如图6f所示。至此,确定Gs、G0、G1、G4、G5、Gt为导航格路径途径的所有导航格。
步骤16根据各导航格之间的关联关系以及进入点,生成一个路点序列,进而得到从S点到T点的导航格路径。如图6f所示,Gs与G0之间相邻,Gs到G0的进入点为点1;G0与G1之间相邻,G0到G1的进入点为点2;G1与G4之间相邻,G1到G4的进入点为点3;G4与G5之间相邻,G4到G5的进入点为点4;G5与Gt之间相邻,G5到Gt的进入点为点5,因此,所生成的路点序列为{S、1、2、3、4、5、T},得到的导航格路径为S→1→2→3→4→5→T,如图6g所示,各路点之间的路段组成长路径。
步骤17在具体场景中移动时可再调用基于三角面的A*寻路算法寻路。
为实现上述方法,本发明还提出一种地图寻路系统,包括区域生成模块、路点管理模块、寻路模块;其中, 所述区域生成模块,将多边形平面地图划分为若干个大小相等的区域。所述路点生成模块,负责针对划分的每块区域,获取区域各边与多边形各边重合线段的中点作为路点,将每块区域中的路点生成路点序列,并建立路点序列内各路点之间的连通关系。所述寻路模块采用A*寻路算法进行寻路,进一步包括区域寻路模块和三角面寻路模块,区域寻路模块是以区域为单位采用A*寻路算法进行寻路,并根据途径的区域及区域间的进入点,确定一条由路点构成的粗略的区域路径;三角面寻路模块,在具体场景移动中,进一步采用基于三角面的A*寻路,得到最终细化的移动路径。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1、一种地图寻路方法,其特征在于,将平面地图划分为一个以上大小相等的区域,在区域边界上生成路点;需要寻路时,先基于区域进行寻路,获得区域路径;再根据获得的区域路径基于三角面寻路,生成最终路径。
2、根据权利要求1所述的地图寻路方法,其特征在于,所述划分区域为采用等间距的垂直和水平线将平面地图分割为一个以上区域大小相等的方格。
3、根据权利要求1所述的地图寻路方法,其特征在于,所述生成路点为将所划分区域各边与平面地图所构成多边形的各边重合线段的中点作为路点。
4、根据权利要求1所述的地图寻路方法,其特征在于,所述获得区域路径为先确定从起点到终点途径的区域,再根据所确定区域之间的关联以及区域间的进入点,得到路点构成的区域路径。
5、根据权利要求1至4任一项所述的地图寻路方法,其特征在于,所述寻路采用A*寻路算法。
6、根据权利要求1至4任一项所述的地图寻路方法,其特征在于,在划分区域之前,该方法进一步包括将三维场景对应的地图导航片投影到平面,形成平面地图。
7、根据权利要求1至4任一项所述的地图寻路方法,其特征在于,所述基于区域进行寻路具体包括先确定起点、终点以及起点和终点分别所属的划分区域,以区域为单位进行寻路。
8、一种地图寻路系统,其特征在于,包括区域生成模块、路点管理模块、寻路模块;其中,
区域生成模块,用于将多边形平面地图划分为一个以上大小相等的区域;
路点生成模块,负责针对划分的每块区域,获取区域各边与多边形各边重合线段的中点作为路点,将每块区域中的路点生成路点序列,并建立路点序列内各路点之间的连通关系;
寻路模块,用于采用A*寻路算法进行寻路;
寻路模块进一步包括区域寻路模块和三角面寻路模块,所述区域寻路模块以区域为单位采用A*寻路算法进行寻路,并根据途径的区域及区域间的进入点,确定由路点构成的区域路径;所述三角面寻路模块,在具体场景中采用基于三角面的A*寻路,得到最终的移动路径。
全文摘要
本发明公开了一种地图寻路方法,将平面地图划分为一个以上大小相等的区域,在区域边界上生成路点;需要寻路时,先基于区域进行寻路,获得区域路径;再根据获得的区域路径基于三角面寻路,生成最终路径。本发明还同时公开了一种地图寻路系统,采用本发明的方法及系统,既能节省空间占用,又能提高寻路效率,还适用于对各种形状地图的处理。
文档编号G06F19/00GK101241507SQ200810056378
公开日2008年8月13日 申请日期2008年1月17日 优先权日2008年1月17日
发明者超 彭 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1