一种寻路方法和装置的制作方法

文档序号:2528385阅读:204来源:国知局
专利名称:一种寻路方法和装置的制作方法
技术领域
本发明涉及计算机技术领域,特别涉及一种寻路方法和装置。
背景技术
将某一位置作为目标位置,以某一物体为起始位置,找到该物体从起始位置接近上述物体所经过的路径的过程,即为寻路的过程。目前较为成熟的寻路算法有A* (A星)寻路算法、等Dijkstra (迪科斯彻)算法等。在计算机技术领域的实际应用中,会将目标位置和起始位置置于一个地图,并将地图分为众多格(一般分为小方格),称为网格,实现计算的简化。在游戏地图中,场景被整齐地划分成大小相等的部分,每一个这样的部分称为网格。游戏中不允许人物经过的网格称为障碍点,在两个网格之间寻找一条不经过任何障碍点的路径的过程称为寻路。以基于独立网格的A星寻路算法为例,在这种寻路算法下,寻路的基本单位是单个网格。如图1所示,假如从黑色网格出发走向一个目标点,那么首先会遍历与黑色网格紧邻的8个网格(图1中网状填充的网格),然后根据A星算法的评估函数,在这8个网格中选择一个非障碍点继续进行搜索,如此类推,直到到达目标点或者搜索失败为止。根据评估函数来确定搜索顺序,是A星算法的特点。采用上述A星算法其计算复杂度将随起始位置与目标位置之间的距离增加而迅速增加,寻路效率较低;若地图面积很大,那么网格的数量也会相应地增多,如果在两个相距较远的网格之间进行寻路,则所需的时间很长,致使寻路过程出现卡顿的情况。

发明内容
本发明实施例提供了一种寻路方法和装置,用于提高寻路效率,减少寻路时间,使设备执行寻路更加流畅。一种寻路方法,包括:获取地图,确定地图的第一网格,所述第一网格为所述地图中可到达的网格;按照预定的顺序将第一网格按照预定规则进行合并,得到第二网格;并将所述第二网格包含的第一网格标记为属于所述第二网格;将第二网格作为独立网格执行寻路算法,得到起始网格到目标网格的路径。一种寻路装置,包括:网格确定单元,用于获取地图,确定地图的第一网格,所述第一网格为所述地图中可到达的网格;网格合并单元,用于按照预定的顺序将所述网格确定单元确定的第一网格按照预定规则进行合并,得到第二网格;并将所述第二网格包含的第一网格标记为属于所述第二网格;寻路计算单元,用于将所述网格合并单元合并得到的第二网格作为独立网格执行寻路算法,得到起始网格到目标网格的路径。
从以上技术方案可以看出,本发明实施例具有以下优点:通过合并网格的方式,可以减少在使用寻路算法过程中计算的网格数量,这样可以提高寻路效率,减少寻路时间,使设备执行寻路更加流畅。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为现有技术A*寻路算法扩展示意图;图2为本发明实施例方法流程示意图;图3A为本发明实施例重置坐标的示例示意图;图3B为本发明实施例合并网格的示例示意图;图4为本发明实施例屏幕与网格显示之间转换的示意图;图5为本发明实施例方法流程示意图;图6为本发明实施例装置结构示意图;图7为本发明实施例装置结构示意图;图8为本发明实施例装置结构示意图;图9为本发明实施例装置结构示意图。
具体实施例方式为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。本发明实施例提供了一种寻路方法,如图2所示,包括:201:获取地图,确定地图的第一网格,上述第一网格为上述地图中可到达的网格;本发明实施例所称的地图,可以是游戏中的游戏地图,也可以是实景地图。若为游戏中的地图,则该方案可以应用于设备执行游戏程序过程中的寻路。若是实景地图,则可以应用于机器人或者其他实体设备在现实地图中移动时的路径选择和计算。地图作为寻路的载体具体采用什么形式来体现,本发明实施例不予限定。202:按照预定的顺序将第一网格按照预定规则进行合并,得到第二网格;并将上述第二网格包含的第一网格标记为属于所述第二网格;进一步地,在按照预定的顺序将第一网格按照预定规则进行合并之前还包括:将第一网格的坐标重置为位于坐标系中同一象限的坐标值。通过重置坐标可以进一步降低寻路算法的计算复杂度,后续实施例将给出具体的举例说明。可选地,上述按照预定的顺序将第一网格按照预定规则进行合并包括:从位于上述地图指定角的网格开始逐行将第一网格按照预定规则进行合并;或者,从位于上述地图指定角的网格开始逐列将第一网格按照预定规则进行合并;所位于上述地图指定角的网格坐标为上述象限的起始坐标。上述指定角一般可以为左上角,后续实施例将会以此为例进行举例说明。但是,采用右上角、左下角、右下角也是可以的,本发明实施例对此不予限定。可选地,上述预定规则包括:将未合并的第一网格作为起始点进行扩展得到第二网格,第二网格满足如下条件:第二网格长宽相等、第二网格不包含障碍点并且第二网格与其他第二网格之间相互不重叠。上述第二网格长宽相等作为一个优选的实现方式不应理解为对本发明实施例的限定,实际上长宽不相等,相差在预定范围内并不影响本发明实施例的实现。后续实施例将给出相应举例说明。203:将第二网格作为独立网格执行寻路算法,得到起始网格到目标网格的路径。以上实施例,通过合并网格的方式,可以减少在使用寻路算法过程中计算的网格数量,这样可以提高寻路效率,减少寻路时间,使设备执行寻路更加流畅。优选地,上述寻路算法为A星寻路算法。更具体地,上述将第二网格作为独立网格执行寻路算法包括:在执行A星算法过程中,在获取到某第一网格后,若上述第一网格被标记为属于第二网格,并且该第二网格已经被扩展则不对上述第一网格进行扩展;若上述第一网格被标记为属于第二网格,并且该第二网格未扩展,则将上述第二网格进行扩展。以游戏中的寻路作为应用场景,比如是人物移动,以上方法具体可以如下:首先,游戏设备获取游戏地图,并确定游戏地图的第一网格,上述第一网格为上述游戏地图中可到达的网格;对应可以到达的网格不可以到达的网格一般就是地形、游戏人物等已经被占据的网格;然后,游戏设备按照预定的顺序将第一网格按照预定规则进行合并,得到第二网格;并将上述第二网格包含的第一网格标记为属于所述第二网格;最后,游戏设备获取人物当前所在的网格(即起始网格),并接收用户选择要到达的目的地(即目标网格),然后将第二网格作为独立网格执行寻路算法,得到起始网格到目标网格的路径。可以减少在使用寻路算法过程中计算的网格数量,这样可以提高寻路效率,减少寻路时间,使设备执行寻路更加流畅。所以在游戏过程中,即使连续点击地图寻找最远的线路也已经不会出现卡顿。以下实施例将分别就网格的坐标重置、合并网格、以及A*算法在存在大网格情况下的具体执行过程进行举例说明。一、网格的坐标重置图3A和图3B所不为转换为屏眷显不以后的图,两者对应的网格图一般应为菱形的网格。菱形的网格中,旧的网格坐标通常X坐标相同的网格的位置的交错的,这样做的缺点是当要获取一个网格相邻的8个网格的坐标时,会比较麻烦。所以把网格坐标重新编排成如图3A所示。每一行的X坐标都相同,每一列的y坐标都相同,并且优选地,将坐标全部置于同一坐标系的一个象限中,图3所示的是至于第一象限,左上角是起始点(0,0),这样在访问一个网格的相邻网格时却要方便很多。考虑到在寻路是经常要获取相邻网格的坐标,所以采取这种编排方式的总体效果会很好。图3A所示的黑色填充的部分是地形的障碍点,这些障碍点可以不必赋值。
另外,编排好网格坐标后,怎样在网格坐标与屏幕坐标之间进行转换也是一个值得注意的问题,因为这是一个经常要进行的操作,简单的转换方法有助于提升算法效率。图3A和图3B所不为转换为屏眷显不以后的图,两者对应的网格图一般应为菱形的网格。图4是网格坐标与屏幕坐标相互转换的示意图。图4中,矩形为屏幕显示图形菱形为地图显示图形,矩形与所示ab所在直线的交点为屏幕坐标原点,菱形上端角网格坐标原点。首先我们已知菱形的两条对角线的比例,这个比例就是一个小网格两条对角线的比例,是在编辑场景网格的时候确定的;第二个已知条件是菱形与屏幕的相对位置,网格坐标原点处在屏幕的垂直平分线上。根据这两个条件可以求得网格坐标原点在屏幕坐标系中的坐标值的一半,所以a=b=tx。于是ty+tx是图中大三角形的斜边长,ty_tx是大三角形上方小三角形的斜边长。这两个三角形都是直角三角形,而且两条直角边之比等于菱形的两条对角线之比。根据勾股定理与比例关系,可以求得图4中两条虚线的长度(两条虚线分别为:虚线大三角形中最右侧的纵向虚线,以及与该虚线垂直的两条虚线中较短的虚线)。这两条虚线的长度是图4所示的tx所示线段中位于方格内一端的点与网格坐标原点在屏幕坐标系中的坐标差值。综上所述,就求得了图4所示的tx所示线段中位于方格内一端的点在屏幕坐标系中的坐标。同理,从屏幕坐标向网格坐标的转换过程与此类似。二、合并网格合并网格的质量对寻路效率也有比较大的影响,如果所合成的网格越大,大网格的总量越少,那对寻路就越有益处。本发明实施例可以采用简单的贪心算法来对网格进行合并。具体来说,按逐行逐列的顺序来遍历每个小网格,如果这个网格可以行走并且还没有被归到某个大网格中去,就以这个网格作为矩形的左上角,取一个尽量大的正方形,并且其中全部是没被遍历过的可行走网格,来合并成一个大网格。把大网格限定为一个正方形是因为,如果允许大网格的长宽不相等,那么因为贪心算法的特点很容易会出现长条型的大网格,比如长宽为l*n。若从左上角逐行使用贪心算法合并网格,那么当沿右下方寻路时,长条型网格会对寻路有好处,但是当沿右上方寻路时,长条形网格不仅对寻路效率没有帮助,反而可能会因为所添加的周边网格过多而使效率降低。这样会使寻路的效率相对不均衡。如果以图3B的方式来合并大网格,在各个方向上的寻路效率都是相当的。请参阅图3B所示,并请对比参阅图3A,从(O,O)坐标开始逐行遍历,图3A和图3B中用纯黑色填充的是障碍点。我们合并网格的原则是:1、每个大网格相互不会重叠;2、大网格内部不包含障碍点;3、大网格的长和宽相等。假如我们要以a点为大网格的左上角,例如(0,4)为大网格的左上角,那么得到一个尽量大的大网格。于是在这个情况下我们就得到一个5*5的大网格。然后继续按逐行逐列的顺序寻找一个既不是障碍点,也未被任何大网格包含的网格,作为下一个大网格的左上角来开始合并;如此类推。 从(O,O)坐标开始逐行遍历,首先判断的是(O,O)然后是(0,I)坐标的网格,均不满足前面的合并条件,(0,0)和(0,I)坐标的网格将不参与合并;然后是(0,2)坐标发现可以合并4个网格,分别为坐标为(0,2)、(0,3)、(1,2)、(1,3)的四个网格,可以合并;然后是(0,4)坐标,合并方案同上,不再一一赘述。图3B所示为最终合并网格后的结果,其中连续的相同填充线条属于同一大网格,即第二网格。另外,本发明实施例还提供了如何记录大网格的方案,具体可以如下:假定每个大网格内部,左上角的小网格是这个大网格的标记点,前述a点。对于每个小网格都设置有一个isSign字段来说明它是否是一个标记点。如果是,那么它还设置width和height两个字段来记录它所标记的大网格的长和宽;如果不是,那么设置signX和signY两个字段来记录它所在大网格的标记点的坐标。通过这些数据,任何小网格都能确定其属于哪个大网格,以及这个大网格的长和宽。如图3B所示,假如从前述a网格出发,那么我们寻找下一个可以至IJ达的网格时,就不是局限于与它紧邻的8个小网格了,因为与a网格处在同一个大网格之内的点都是直线可达的。这时候我们可以直接遍历大网格外围的网格点,即图3A中的(O,
3)、(1,3)、(5,3)、(5,4)、(5,5)、(5,6)、(5,7)、(5,8)、(5,9)、(4,9)、(3,9)、(2,9)、(1,9)这样相当于一步就跨越了好几个网格。同理,当到达一个大网格时,可以认为我们已经到达了它所处的大网格之内的所有小网格,就可以避免重复搜索这些其他的小网格了。
三、A*算法本发明实施例所采用的搜索算法还是A*算法,A*算法有两个重要的函数g(n)和h(n) ο其中g(n)是从起始点到当前点所需要的代价,h(n)是从当前点到目标点的代价的估值,h(n)也被成为启发式函数。在这里可以定义g(n)为从起始点到当前点所走过的路线长度和拐弯的代价之和;之所以在g(n)中会加入对拐弯次数的考虑,是因为实际游戏中并不一定要求路线的绝对长度最短,有时候路线的合理性也很重要,所以一些路线的绝对长度虽然大一些,但是避免了过于频繁的拐弯,给玩家的感觉会更好。另外,把h(n)定义为当前点到目标点的直线距离。这个启发式函数是单调的,所以能保证一个搜索结点在被添加进Close表时已经找到了到达它的最小代价。这样能免除需要修改Close表中结点的消耗。h(n)还满足h(n)彡h* (n), (h* (η)是当前结点到目标结点的理论最小值),这个限定能保证Α*算法能够找到最优解。大网格对Α*算法搜索的优化:大网格在搜索过程中所起的作用首先体现在扩展一个结点时(我们把从一个结点出发寻找所有下一步能到达的结点的过程成为扩展)。因为在同一个大网格中的小网格都是相互直线可达的,所以在扩展一个结点时可以遍历该大网格边缘外的结点,如果这些网格是可行走的且不在Close表中,就把它添加到Open表。大网格的第二个作用是,每当我们从Open表中取出一个结点并扩展它之前,我们首先查询这个结点所处的大网格是否已经在Close表中:如果是,那么就不扩展这个结点了,而是从Open表中再取出下一个结点进行扩展;如果不是,那么把这个大网格放到Close表中,并且扩展这个结点。把一个大网格放到Close表中的操作很简单,只需要把这个大网格的标记结点放到Close表中就可以了。通过这种方法,我们就可以跳过很多处在同一个大网格下的结点,相当于在大网格的层面进行搜索了,从而提高了搜索的效率。在这里跳过的一些结点,可能会使得最终寻得的路线不是最优,但是正如前文所说游戏中的寻路不一定要绝对的最优解,通过观察,寻路的实际效果不错。更具体地:请参阅图5,是在合并小网格,形成本发明实施例提供的大网格地图后,上进行A*寻路算法流程图,具体包括如下步骤:501:A*寻路算法开始后,先接收输入一个起始结点和一个终止结点,分别用startNode 和 endNode 来表不。可以理解的是startNode和endNode这两个结点都是一个小网格,而且都不是障碍点。502:对A*寻路算法进行初始化。对A*寻路算法进行初始化包括如下几个方面:1、取得endNode所在的大网格的标记结点,用endSignNode来表示;2、用变量foundPath来表示当前是否已经寻到可行路径,并且把它的初始值设为false ;3、openList是一个列表,用来保存当前可以到达的结点,并且这些结点都是未被扩展的(已经扩展过的结点放在closeList中),初始化时先将startNode放入openList。503:判断openList是否为空,如果是,进入517,如果否,进入504。上述步骤503以后将进入搜索的循环逻辑,这个循环逻辑有两个终止条件:一是寻到了可行路径;二是openList变成空,openList为空意味着起点和终点之间不存在可行路径。504:从openList中按顺序取出第一个结点(openList中的结点是按评估值从小到大排序),并且用currentNode来表示。需要注意的是,在本步骤中,如果取出的这个结点所在的大网格已经被扩展了,那么就把它丢弃,继续取出下一个结点。这是因为处在同一个大网格内的小网格,所扩展出来的结点都是一样的。我们判断大网格是否已经被扩展的方法请参阅505。505:根据currentNode得到它所在的大网格的标记点currentSignNode,然后判断currentSignNode是否已经在closeList列表中。如果是,则丢弃该结点,进入503,否则进入506。506:当我们从openList中取出一个currentNode,并且它所在的大网格还没有被扩展,那么就将对应的currentSignNode放入closeList,以此来标记这个大网格已经被扩展了。507:比较currentSignNode与初始化过程中的endSignNode,判断两者是否相等,如果是,说明我们已经到达了终点所在的大网格,寻路成功,进入516。如果当前还没到达终点所在的大网格,那么我们就需要开始扩展,进入508。508:首先获取当前大网格外围的全部非障碍点,并且把这些点放到aroundNodeList列表中,然后进入509。509:判断aroundNodeLi st是否为空,如果为空,则进入510,否则进入511 ;510:对openList列表中的结点按照评估值从小到大重新排序,然后进入503。511:node 赋值为 aroundNodeLi st 中的一个兀素,并进入 512。512:确定上述node是否在openList中,如果不在,进入513,否则进入514。513:计算node的评估值,并且将node的前驱结点记录为currentNode,将node加入到openList中,然后进入509。514:如果node已经在openList列表中,那么计算node的评估值,判断node的评估值是否比openList中的要小,如果是,进入515,否则,进入509。515:更新openList中该点的评估值和前驱结点。将node的前驱结点记录为currentNode,然后进入 509。当处理完aroundNodeLi st中的所有结点后,需要对openList列表中的结点按照评估值从小到大重新排序。因为openList表中增加了新的结点,这样会破坏原来openList列表中结点的有序状态。在我们的实现过程中,用到达一个网格所经过的实际路程与该网格到终点的直线距离作为这个网格的评估值。至此,我们就完成了一次大网格扩展,重新返回到循环开始的地方。516:将 foundPath 变量赋值为 true。517:判断foundPath是否为true,如果是,进入518,否则进入519。518:foundPath 为 true,表不找到了路径,生成从 startNode 到 endNode 的路径,结束寻路流程。当搜索循环结束的时候,要么我们没有寻到路,那么返回寻路失败;要么已经到达了终点所在的大网格,那么可以从currentNode开始,通过记录的前驱结点找到startNode,就得到了从startNode到终点所在大网格的路径,只要在这条路径最后加上endNode,那么就生成了一条从startNode到endNode的完整路径了。519:寻路失败。结束寻路流程。本发明实施例还提供给了一种寻路装置,如图6所示,包括:网格确定单元601,用于获取地图,确定地图的第一网格,上述第一网格为上述地图中可到达的网格;网格合并单元602,用于按照预定的顺序将上述网格确定单元601确定的第一网格按照预定规则进行合并,得到第二网格;并将上述第二网格包含的第一网格标记为属于所述第二网格;寻路计算单元603,用于将上述网格合并单元602合并得到的第二网格作为独立网格执行寻路算法,得到起始网格到目标网格的路径。以上实施例,通过合并网格的方式,可以减少在使用寻路算法过程中计算的网格数量,这样可以提高寻路效率,减少寻路时间,使设备执行寻路更加流畅。进一步地,如图7所示,上述装置还包括:坐标重置单元701,用于在上述网格合并单元602按照预定的顺序将第一网格按照预定规则进行合并之前,将第一网格的坐标重置为位于坐标系中同一象限的坐标值。可选地,上述网格合并单元602,具体用于从位于上述地图指定角的网格开始逐行将第一网格按照预定规则进行合并;或者,从位于上述地图指定角的网格开始逐列将第一网格按照预定规则进行合并;所位于上述地图指定角的网格坐标为上述象限的起始坐标。可选地,上述网格合并单元602,具体用于将未合并的第一网格作为起始点进行扩展得到第二网格,第二网格满足如下条件:第二网格长宽相等、第二网格不包含障碍点并且第二网格与其他第二网格之间相互不重叠。作为一个举例,请参阅图3B所示,并请对比参阅图3A,指定角的网格为左上角的网格,逐行采用逐行合并的方式进行,那么将从(0,0)坐标开始逐行遍历,图3A和图3B中用纯黑色填充的是障碍点。合并网格的原则是:1、每个大网格相互不会重叠;2、大网格内部不包含障碍点;3、大网格的长和宽相等。假如我们要以a点为大网格的左上角,例如(0,4)为大网格的左上角,那么得到一个尽量大的大网格。于是在这个情况下我们就得到一个5*5的大网格。然后继续按逐行逐列的顺序寻找一个既不是障碍点,也未被任何大网格包含的网格,作为下一个大网格的左上角来开始合并;如此类推。
从(0,0)坐标开始逐行遍历,首先判断的是(0,0)然后是(0,I)坐标的网格,均不满足前面的合并条件,(0,0)和(0,I)坐标的网格将不参与合并;然后是(0,2)坐发现可以合并4个网格,分别为坐标为(0,2)、(0,3)、(1,2)、(1,3)的四个网格,可以合并;然后是(0,4)坐标,合并方案同上,不再一一赘述。图3B所示为最终合并网格后的结果,其中连续的相同填充线条属于同一大网格。可选地,寻路计算单元603,用于将上述网格合并单元602合并得到的第二网格作为独立网格执行A星寻路算法,得到起始网格到目标网格的路径。可选地,上述寻路计算单元603,具体用于在执行A星算法过程中,在获取到某第一网格后,若上述第一网格被标记为属于第二网格,并且该第二网格已经被扩展则不对上述第一网格进行扩展;若上述第一网格被标记为属于第二网格,并且该第二网格未扩展,则将上述第二网格进行扩展。本发明实施例还提供了另一种寻路装置,该寻路装置可以是任意需要进行执行寻路方案的装置,例如终端、服务器、机器人等等,以终端为例:如图8所示,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该终端可以为包括手机、平板电脑、PDA (Personal Digital Assistant,个人数字助理)、P0S (Point of Sales,销售终端)、车载电脑等任意终端设备,以终端为手机为例:图8示出的是与本发明实施例提供的终端相关的手机的部分结构的框图。参考图8,手机包括:射频(Radio Frequency,RF)电路810、存储器820、输入单元830、显示单元840、传感器850、音频电路860、无线保真(wireless fidelity,WiFi)模块870、处理器880、以及电源890等部件。本领域技术人员可以理解,图8中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。下面结合图8对手机的各个构成部件进行具体的介绍:RF电路810可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器880处理;另外,将设计上行的数据发送给基站。通常,RF电路包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(Low NoiseAmplifier, LNA)、双工器等。此外,RF电路80还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(Global System of Mobile communication, GSM)、通用分组无线服务(General PacketRadio Service, GPRS)、码分多址(Code Division Multiple Access, CDMA)、宽带码分多址(Wideband Code Division Multiple Access, WCDMA)、长期演进(Long Term Evolution,LTE)、电子邮件、短消息服务(Short Messaging Service, SMS)等。存储器820可用于存储软件程序以及模块,处理器880通过运行存储在存储器820的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器820可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器820可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。输入单元830可用于接收输入的数字或字符信息,以及产生与手机800的用户设置以及功能控制有关的键信号输入。具体地,输入单元830可包括触控面板831以及其他输入设备832。触控面板831,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板831上或在触控面板831附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板831可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器880,并能接收处理器880发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板831。除了触控面板831,输入单元830还可以包括其他输入设备832。具体地,其他输入设备832可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。显示单元840可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元840可包括显示面板841,可选的,可以采用液晶显示器(Liquid CrystalDisplay, IXD)、有机发光二极管(Organic Light-Emitting Diode, 0LED)等形式来配置显示面板841。进一步的,触控面板831可覆盖显示面板841,当触控面板831检测到在其上或附近的触摸操作后,传送给处理器880以确定触摸事件的类型,随后处理器880根据触摸事件的类型在显示面板841上提供相应的视觉输出。虽然在图8中,触控面板831与显示面板841是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板831与显示面板841集成而实现手机的输入和输出功能。手机800还可包括至少一种传感器850,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板841的亮度,接近传感器可在手机移动到耳边时,关闭显示面板841和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。音频电路860、扬声器861,传声器862可提供用户与手机之间的音频接口。音频电路860可将接收到的音频数据转换后的电信号,传输到扬声器861,由扬声器861转换为声音信号输出;另一方面,传声器862将收集的声音信号转换为电信号,由音频电路860接收后转换为音频数据,再将音频数据输出处理器880处理后,经RF电路810以发送给比如另一手机,或者将音频数据输出至存储器820以便进一步处理。WiFi属于短距离无线传输技术,手机通过WiFi模块870可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图8示出了WiFi模块870,但是可以理解的是,其并不属于手机800的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。处理器880是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器820内的软件程序和/或模块,以及调用存储在存储器820内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器880可包括一个或多个处理单元;优选的,处理器880可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器880中。手机800还包括给各个部件供电的电源890 (比如电池),优选的,电源可以通过电源管理系统与处理器880逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。尽管未示出,手机800还可以包括摄像头、蓝牙模块等,在此不再赘述。在本发明实施例中,该终端所包括的处理器880还具有以下功能:获取地图,确定地图的第一网格,上述第一网格为上述地图中可到达的网格;按照预定的顺序将第一网格按照预定规则进行合并,得到第二网格;并将上述第二网格包含的第一网格标记为属于所述第二网格;将第二网格作为第二网格执行寻路算法,得到起始网格到目标网格的路径。以上实施例,通过合并网格的方式,可以减少在使用寻路算法过程中计算的网格数量,这样可以提高寻路效率,减少寻路时间,使设备执行寻路更加流畅。进一步地,在按照预定的顺序将第一网格按照预定规则进行合并之前还包括:将第一网格的坐标重置为位于坐标系中同一象限的坐标值。可选地,上述按照预定的顺序将第一网格按照预定规则进行合并包括:从位于上述地图指定角的网格开始逐行将第一网格按照预定规则进行合并;或者,从位于上述地图指定角的网格开始逐列将第一网格按照预定规则进行合并;所位于上述地图指定角的网格坐标为上述象限的起始坐标。可选地,上述预定规则包括:将未合并的第一网格作为起始点进行扩展得到第二网格,第二网格满足如下条件:第二网格长宽相等、第二网格不包含障碍点并且第二网格与其他第二网格之间相互不重叠。作为一个举例,请参阅图3B所示,并请对比参阅图3A,指定角的网格为左上角的网格,逐行采用逐行合并的方式进行,那么将从(0,0)坐标开始逐行遍历,图3A和图3B中用纯黑色填充的是障碍点。合并网格的原则是:1、每个大网格相互不会重叠;2、大网格内部不包含障碍点;3、大网格的长和宽相等。假如我们要以a点为大网格的左上角,例如(0,4)为大网格的左上角,那么得到一个尽量大的大网格。于是在这个情况下我们就得到一个5*5的大网格。然后继续按逐行逐列的顺序寻找一个既不是障碍点,也未被任何大网格包含的网格,作为下一个大网格的左上角来开始合并;如此类推。从(O,O)坐标开始逐行遍历,首先判断的是(O,O)然后是(0,I)坐标的网格,均不满足前面的合并条件,(0,0)和(0,I)坐标的网格将不参与合并;然后是(0,2)坐发现可以合并4个网格,分别为坐标为(0,2)、(0,3)、(1,2)、(1,3)的四个网格,可以合并;然后是(0,
4)坐标,合并方案同上,不再一一赘述。图3B所示为最终合并网格后的结果,其中连续的相同填充线条属于同一大网格。可选地,上述寻路算法为A星寻路算法。可选地,上述将第二网格作为独立网格执行寻路算法包括:在执行A星算法过程中,在获取到某第一网格后,若上述第一网格被标记为属于第二网格,并且该第二网格已经被扩展则不对上述第一网格进行扩展;若上述第一网格被标记为属于第二网格,并且该第二网格未扩展,则将上述第二网格进行扩展。本发明实施例方法实现以后,发明人对方案的效果进行了测试,具体测试结果如下:为了测试优化后寻路系统的性能,本文将优化前后的两个寻路系统进行比较,另外还比较了在A*评价函数中考虑拐弯代价与否的性能。测试采用的是一款游戏软件,测试的方法是在小地图上点击最远的点,让人物跑一个对角线,然后再跑回原点。每次都连续点击10下鼠标,这样就得到了 20组数据。时间的计算是用Scout工具,获取在这一巾贞里执行ActionScript代码的时间。结果如图8所示,横坐标是测试次数,纵坐标是时间值,单位为毫秒。其中实线为背景技术中方案所用时间示意,以小线段组成虚线所示为本发明实施例方案的时间示意,以点组成的虚线所示为本发明实施例方案不考虑拐弯代价的时间示意。通过上述结果可以看到,经过优化后的寻路算法的效率有了很大的提升,寻路所需时间降低了约50%。此外,在计算结点代价时如果不考虑拐弯的代价,也可以节省一点判断时间,但是综合看,多花5 IOms的时间来使得寻得的路径拐点少一点,路线会显得自然一些,也是值得的。实际测试时,即使连续点击小地图寻找最远的线路也已经不会出现卡顿,结果较好。值得注意的是,上述装置实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。另外,本领域普通技术人员可以理解实现上述各方法实施例中的全部或部分步骤是可以通过程序来指令相关的硬件完成,相应的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。以上仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明实施例揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种寻路方法,其特征在于,包括: 获取地图,确定地图的第一网格,所述第一网格为所述地图中可到达的网格; 按照预定的顺序将第一网格按照预定规则进行合并,得到第二网格;并将所述第二网格包含的第一网格标记为属于所述第二网格; 将第二网格作为独立网格执行寻路算法,得到起始网格到目标网格的路径。
2.根据权利要求1所述方法,其特征在于,在按照预定的顺序将第一网格按照预定规则进行合并之前还包括: 将第一网格的坐标重置为位于坐标系中同一象限的坐标值。
3.根据权利要求2所述方法,其特征在于,所述按照预定的顺序将第一网格按照预定规则进行合并包括: 从位于所述地图指定角的网格开始逐行将第一网格按照预定规则进行合并;或者, 从位于所述地图指定角的网格开始逐列将第一网格按照预定规则进行合并;所位于所述地图指定角的网格坐标为所述象限的起始坐标。
4.根据权利要求1至3任意一项所述方法,其特征在于,所述预定规则包括: 将未合并的第一网格 作为起始点进行扩展得到第二网格,第二网格满足如下条件:第二网格长宽相等、第二网格不包含障碍点并且第二网格与其他第二网格之间相互不重叠。
5.根据权利要求1所述方法,其特征在于,所述寻路算法为A星寻路算法。
6.根据权利要求4所述方法,其特征在于,所述将第二网格作为独立网格执行寻路算法包括: 在执行A星算法过程中,在获取到某第一网格后,若所述第一网格被标记为属于第二网格,并且该第二网格已经被扩展则不对所述第一网格进行扩展;若所述第一网格被标记为属于第二网格,并且该第二网格未扩展,则将所述第二网格进行扩展。
7.一种寻路装置,其特征在于,包括: 网格确定单元,用于获取地图,确定地图的第一网格,所述第一网格为所述地图中可到达的网格; 网格合并单元,用于按照预定的顺序将所述网格确定单元确定的第一网格按照预定规则进行合并,得到第二网格;并将所述第二网格包含的第一网格标记为属于所述第二网格; 寻路计算单元,用于将所述网格合并单元合并得到的第二网格作为独立网格执行寻路算法,得到起始网格到目标网格的路径。
8.根据权利要求7所述装置,其特征在于,还包括: 坐标重置单元,用于在所述网格合并单元按照预定的顺序将第一网格按照预定规则进行合并之前,将第一网格的坐标重置为位于坐标系中同一象限的坐标值。
9.根据权利要求8所述装置,其特征在于, 所述网格合并单元,具体用于从位于所述地图指定角的网格开始逐行将第一网格按照预定规则进行合并;或者,从位于所述地图指定角的网格开始逐列将第一网格按照预定规则进行合并;所位于所述地图指定角的网格坐标为所述象限的起始坐标。
10.根据权利要求7至9任意一项所述装置,其特征在于, 所述网格合并单元,具体用于将未合并的第一网格作为起始点进行扩展得到第二网格,第二网格满足如下条件:第二网格长宽相等、第二网格不包含障碍点并且第二网格与其他第二网格之间相互不重叠。
11.根据权利要求7所述装置,其特征在于, 寻路计算单元,用于将所述网格合并单元合并得到的第二网格作为独立网格执行A星寻路算法,得到起始网格到目标网格的路径。
12.根据权利要求11所述装置,其特征在于, 所述寻路计算单元,具体用于在执行A星算法过程中,在获取到某第一网格后,若所述第一网格被标记为属于第二网格,并且该第二网格已经被扩展则不对所述第一网格进行扩展;若所述第一网格被标记为属于第二网格,并且该第二网格未扩展,则将所述第二网格进行扩展 。
全文摘要
本发明实施例公开了一种寻路方法和装置,以方法的实现为例,包括获取地图,确定地图的第一网格,所述第一网格为所述地图中可到达的网格;按照预定的顺序将第一网格按照预定规则进行合并,得到第二网格;并将所述第二网格包含的第一网格标记为属于所述第二网格;将第二网格作为独立网格执行寻路算法,得到起始网格到目标网格的路径。采用以上方法,通过合并网格的方式,可以减少在使用寻路算法过程中计算的网格数量,这样可以提高寻路效率,减少寻路时间,使设备执行寻路更加流畅。
文档编号G09B29/00GK103198234SQ20131014833
公开日2013年7月10日 申请日期2013年4月25日 优先权日2013年4月25日
发明者陈楚业 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1