專利名稱:一種尋路方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種尋路方法和裝置。
背景技術(shù):
將某一位置作為目標(biāo)位置,以某一物體為起始位置,找到該物體從起始位置接近上述物體所經(jīng)過的路徑的過程,即為尋路的過程。目前較為成熟的尋路算法有A* (A星)尋路算法、等Dijkstra (迪科斯徹)算法等。在計(jì)算機(jī)技術(shù)領(lǐng)域的實(shí)際應(yīng)用中,會(huì)將目標(biāo)位置和起始位置置于一個(gè)地圖,并將地圖分為眾多格(一般分為小方格),稱為網(wǎng)格,實(shí)現(xiàn)計(jì)算的簡(jiǎn)化。在游戲地圖中,場(chǎng)景被整齊地劃分成大小相等的部分,每一個(gè)這樣的部分稱為網(wǎng)格。游戲中不允許人物經(jīng)過的網(wǎng)格稱為障礙點(diǎn),在兩個(gè)網(wǎng)格之間尋找一條不經(jīng)過任何障礙點(diǎn)的路徑的過程稱為尋路。以基于獨(dú)立網(wǎng)格的A星尋路算法為例,在這種尋路算法下,尋路的基本單位是單個(gè)網(wǎng)格。如圖1所示,假如從黑色網(wǎng)格出發(fā)走向一個(gè)目標(biāo)點(diǎn),那么首先會(huì)遍歷與黑色網(wǎng)格緊鄰的8個(gè)網(wǎng)格(圖1中網(wǎng)狀填充的網(wǎng)格),然后根據(jù)A星算法的評(píng)估函數(shù),在這8個(gè)網(wǎng)格中選擇一個(gè)非障礙點(diǎn)繼續(xù)進(jìn)行搜索,如此類推,直到到達(dá)目標(biāo)點(diǎn)或者搜索失敗為止。根據(jù)評(píng)估函數(shù)來確定搜索順序,是A星算法的特點(diǎn)。采用上述A星算法其計(jì)算復(fù)雜度將隨起始位置與目標(biāo)位置之間的距離增加而迅速增加,尋路效率較低;若地圖面積很大,那么網(wǎng)格的數(shù)量也會(huì)相應(yīng)地增多,如果在兩個(gè)相距較遠(yuǎn)的網(wǎng)格之間進(jìn)行尋路,則所需的時(shí)間很長(zhǎng),致使尋路過程出現(xiàn)卡頓的情況。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供了一種尋路方法和裝置,用于提高尋路效率,減少尋路時(shí)間,使設(shè)備執(zhí)行尋路更加流暢。一種尋路方法,包括:獲取地圖,確定地圖的第一網(wǎng)格,所述第一網(wǎng)格為所述地圖中可到達(dá)的網(wǎng)格;按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并,得到第二網(wǎng)格;并將所述第二網(wǎng)格包含的第一網(wǎng)格標(biāo)記為屬于所述第二網(wǎng)格;將第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行尋路算法,得到起始網(wǎng)格到目標(biāo)網(wǎng)格的路徑。一種尋路裝置,包括:網(wǎng)格確定單元,用于獲取地圖,確定地圖的第一網(wǎng)格,所述第一網(wǎng)格為所述地圖中可到達(dá)的網(wǎng)格;網(wǎng)格合并單元,用于按照預(yù)定的順序?qū)⑺鼍W(wǎng)格確定單元確定的第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并,得到第二網(wǎng)格;并將所述第二網(wǎng)格包含的第一網(wǎng)格標(biāo)記為屬于所述第二網(wǎng)格;尋路計(jì)算單元,用于將所述網(wǎng)格合并單元合并得到的第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行尋路算法,得到起始網(wǎng)格到目標(biāo)網(wǎng)格的路徑。
從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):通過合并網(wǎng)格的方式,可以減少在使用尋路算法過程中計(jì)算的網(wǎng)格數(shù)量,這樣可以提高尋路效率,減少尋路時(shí)間,使設(shè)備執(zhí)行尋路更加流暢。
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為現(xiàn)有技術(shù)A*尋路算法擴(kuò)展示意圖;圖2為本發(fā)明實(shí)施例方法流程示意圖;圖3A為本發(fā)明實(shí)施例重置坐標(biāo)的示例示意圖;圖3B為本發(fā)明實(shí)施例合并網(wǎng)格的示例示意圖;圖4為本發(fā)明實(shí)施例屏幕與網(wǎng)格顯示之間轉(zhuǎn)換的示意圖;圖5為本發(fā)明實(shí)施例方法流程示意圖;圖6為本發(fā)明實(shí)施例裝置結(jié)構(gòu)示意圖;圖7為本發(fā)明實(shí)施例裝置結(jié)構(gòu)示意圖;圖8為本發(fā)明實(shí)施例裝置結(jié)構(gòu)示意圖;圖9為本發(fā)明實(shí)施例裝置結(jié)構(gòu)示意圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部份實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明實(shí)施例提供了一種尋路方法,如圖2所示,包括:201:獲取地圖,確定地圖的第一網(wǎng)格,上述第一網(wǎng)格為上述地圖中可到達(dá)的網(wǎng)格;本發(fā)明實(shí)施例所稱的地圖,可以是游戲中的游戲地圖,也可以是實(shí)景地圖。若為游戲中的地圖,則該方案可以應(yīng)用于設(shè)備執(zhí)行游戲程序過程中的尋路。若是實(shí)景地圖,則可以應(yīng)用于機(jī)器人或者其他實(shí)體設(shè)備在現(xiàn)實(shí)地圖中移動(dòng)時(shí)的路徑選擇和計(jì)算。地圖作為尋路的載體具體采用什么形式來體現(xiàn),本發(fā)明實(shí)施例不予限定。202:按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并,得到第二網(wǎng)格;并將上述第二網(wǎng)格包含的第一網(wǎng)格標(biāo)記為屬于所述第二網(wǎng)格;進(jìn)一步地,在按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并之前還包括:將第一網(wǎng)格的坐標(biāo)重置為位于坐標(biāo)系中同一象限的坐標(biāo)值。通過重置坐標(biāo)可以進(jìn)一步降低尋路算法的計(jì)算復(fù)雜度,后續(xù)實(shí)施例將給出具體的舉例說明。可選地,上述按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并包括:從位于上述地圖指定角的網(wǎng)格開始逐行將第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并;或者,從位于上述地圖指定角的網(wǎng)格開始逐列將第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并;所位于上述地圖指定角的網(wǎng)格坐標(biāo)為上述象限的起始坐標(biāo)。上述指定角一般可以為左上角,后續(xù)實(shí)施例將會(huì)以此為例進(jìn)行舉例說明。但是,采用右上角、左下角、右下角也是可以的,本發(fā)明實(shí)施例對(duì)此不予限定??蛇x地,上述預(yù)定規(guī)則包括:將未合并的第一網(wǎng)格作為起始點(diǎn)進(jìn)行擴(kuò)展得到第二網(wǎng)格,第二網(wǎng)格滿足如下條件:第二網(wǎng)格長(zhǎng)寬相等、第二網(wǎng)格不包含障礙點(diǎn)并且第二網(wǎng)格與其他第二網(wǎng)格之間相互不重疊。上述第二網(wǎng)格長(zhǎng)寬相等作為一個(gè)優(yōu)選的實(shí)現(xiàn)方式不應(yīng)理解為對(duì)本發(fā)明實(shí)施例的限定,實(shí)際上長(zhǎng)寬不相等,相差在預(yù)定范圍內(nèi)并不影響本發(fā)明實(shí)施例的實(shí)現(xiàn)。后續(xù)實(shí)施例將給出相應(yīng)舉例說明。203:將第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行尋路算法,得到起始網(wǎng)格到目標(biāo)網(wǎng)格的路徑。以上實(shí)施例,通過合并網(wǎng)格的方式,可以減少在使用尋路算法過程中計(jì)算的網(wǎng)格數(shù)量,這樣可以提高尋路效率,減少尋路時(shí)間,使設(shè)備執(zhí)行尋路更加流暢。優(yōu)選地,上述尋路算法為A星尋路算法。更具體地,上述將第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行尋路算法包括:在執(zhí)行A星算法過程中,在獲取到某第一網(wǎng)格后,若上述第一網(wǎng)格被標(biāo)記為屬于第二網(wǎng)格,并且該第二網(wǎng)格已經(jīng)被擴(kuò)展則不對(duì)上述第一網(wǎng)格進(jìn)行擴(kuò)展;若上述第一網(wǎng)格被標(biāo)記為屬于第二網(wǎng)格,并且該第二網(wǎng)格未擴(kuò)展,則將上述第二網(wǎng)格進(jìn)行擴(kuò)展。以游戲中的尋路作為應(yīng)用場(chǎng)景,比如是人物移動(dòng),以上方法具體可以如下:首先,游戲設(shè)備獲取游戲地圖,并確定游戲地圖的第一網(wǎng)格,上述第一網(wǎng)格為上述游戲地圖中可到達(dá)的網(wǎng)格;對(duì)應(yīng)可以到達(dá)的網(wǎng)格不可以到達(dá)的網(wǎng)格一般就是地形、游戲人物等已經(jīng)被占據(jù)的網(wǎng)格;然后,游戲設(shè)備按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并,得到第二網(wǎng)格;并將上述第二網(wǎng)格包含的第一網(wǎng)格標(biāo)記為屬于所述第二網(wǎng)格;最后,游戲設(shè)備獲取人物當(dāng)前所在的網(wǎng)格(即起始網(wǎng)格),并接收用戶選擇要到達(dá)的目的地(即目標(biāo)網(wǎng)格),然后將第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行尋路算法,得到起始網(wǎng)格到目標(biāo)網(wǎng)格的路徑??梢詼p少在使用尋路算法過程中計(jì)算的網(wǎng)格數(shù)量,這樣可以提高尋路效率,減少尋路時(shí)間,使設(shè)備執(zhí)行尋路更加流暢。所以在游戲過程中,即使連續(xù)點(diǎn)擊地圖尋找最遠(yuǎn)的線路也已經(jīng)不會(huì)出現(xiàn)卡頓。以下實(shí)施例將分別就網(wǎng)格的坐標(biāo)重置、合并網(wǎng)格、以及A*算法在存在大網(wǎng)格情況下的具體執(zhí)行過程進(jìn)行舉例說明。一、網(wǎng)格的坐標(biāo)重置圖3A和圖3B所不為轉(zhuǎn)換為屏眷顯不以后的圖,兩者對(duì)應(yīng)的網(wǎng)格圖一般應(yīng)為菱形的網(wǎng)格。菱形的網(wǎng)格中,舊的網(wǎng)格坐標(biāo)通常X坐標(biāo)相同的網(wǎng)格的位置的交錯(cuò)的,這樣做的缺點(diǎn)是當(dāng)要獲取一個(gè)網(wǎng)格相鄰的8個(gè)網(wǎng)格的坐標(biāo)時(shí),會(huì)比較麻煩。所以把網(wǎng)格坐標(biāo)重新編排成如圖3A所示。每一行的X坐標(biāo)都相同,每一列的y坐標(biāo)都相同,并且優(yōu)選地,將坐標(biāo)全部置于同一坐標(biāo)系的一個(gè)象限中,圖3所示的是至于第一象限,左上角是起始點(diǎn)(0,0),這樣在訪問一個(gè)網(wǎng)格的相鄰網(wǎng)格時(shí)卻要方便很多。考慮到在尋路是經(jīng)常要獲取相鄰網(wǎng)格的坐標(biāo),所以采取這種編排方式的總體效果會(huì)很好。圖3A所示的黑色填充的部分是地形的障礙點(diǎn),這些障礙點(diǎn)可以不必賦值。
另外,編排好網(wǎng)格坐標(biāo)后,怎樣在網(wǎng)格坐標(biāo)與屏幕坐標(biāo)之間進(jìn)行轉(zhuǎn)換也是一個(gè)值得注意的問題,因?yàn)檫@是一個(gè)經(jīng)常要進(jìn)行的操作,簡(jiǎn)單的轉(zhuǎn)換方法有助于提升算法效率。圖3A和圖3B所不為轉(zhuǎn)換為屏眷顯不以后的圖,兩者對(duì)應(yīng)的網(wǎng)格圖一般應(yīng)為菱形的網(wǎng)格。圖4是網(wǎng)格坐標(biāo)與屏幕坐標(biāo)相互轉(zhuǎn)換的示意圖。圖4中,矩形為屏幕顯示圖形菱形為地圖顯示圖形,矩形與所示ab所在直線的交點(diǎn)為屏幕坐標(biāo)原點(diǎn),菱形上端角網(wǎng)格坐標(biāo)原點(diǎn)。首先我們已知菱形的兩條對(duì)角線的比例,這個(gè)比例就是一個(gè)小網(wǎng)格兩條對(duì)角線的比例,是在編輯場(chǎng)景網(wǎng)格的時(shí)候確定的;第二個(gè)已知條件是菱形與屏幕的相對(duì)位置,網(wǎng)格坐標(biāo)原點(diǎn)處在屏幕的垂直平分線上。根據(jù)這兩個(gè)條件可以求得網(wǎng)格坐標(biāo)原點(diǎn)在屏幕坐標(biāo)系中的坐標(biāo)值的一半,所以a=b=tx。于是ty+tx是圖中大三角形的斜邊長(zhǎng),ty_tx是大三角形上方小三角形的斜邊長(zhǎng)。這兩個(gè)三角形都是直角三角形,而且兩條直角邊之比等于菱形的兩條對(duì)角線之比。根據(jù)勾股定理與比例關(guān)系,可以求得圖4中兩條虛線的長(zhǎng)度(兩條虛線分別為:虛線大三角形中最右側(cè)的縱向虛線,以及與該虛線垂直的兩條虛線中較短的虛線)。這兩條虛線的長(zhǎng)度是圖4所示的tx所示線段中位于方格內(nèi)一端的點(diǎn)與網(wǎng)格坐標(biāo)原點(diǎn)在屏幕坐標(biāo)系中的坐標(biāo)差值。綜上所述,就求得了圖4所示的tx所示線段中位于方格內(nèi)一端的點(diǎn)在屏幕坐標(biāo)系中的坐標(biāo)。同理,從屏幕坐標(biāo)向網(wǎng)格坐標(biāo)的轉(zhuǎn)換過程與此類似。二、合并網(wǎng)格合并網(wǎng)格的質(zhì)量對(duì)尋路效率也有比較大的影響,如果所合成的網(wǎng)格越大,大網(wǎng)格的總量越少,那對(duì)尋路就越有益處。本發(fā)明實(shí)施例可以采用簡(jiǎn)單的貪心算法來對(duì)網(wǎng)格進(jìn)行合并。具體來說,按逐行逐列的順序來遍歷每個(gè)小網(wǎng)格,如果這個(gè)網(wǎng)格可以行走并且還沒有被歸到某個(gè)大網(wǎng)格中去,就以這個(gè)網(wǎng)格作為矩形的左上角,取一個(gè)盡量大的正方形,并且其中全部是沒被遍歷過的可行走網(wǎng)格,來合并成一個(gè)大網(wǎng)格。把大網(wǎng)格限定為一個(gè)正方形是因?yàn)?,如果允許大網(wǎng)格的長(zhǎng)寬不相等,那么因?yàn)樨澬乃惴ǖ奶攸c(diǎn)很容易會(huì)出現(xiàn)長(zhǎng)條型的大網(wǎng)格,比如長(zhǎng)寬為l*n。若從左上角逐行使用貪心算法合并網(wǎng)格,那么當(dāng)沿右下方尋路時(shí),長(zhǎng)條型網(wǎng)格會(huì)對(duì)尋路有好處,但是當(dāng)沿右上方尋路時(shí),長(zhǎng)條形網(wǎng)格不僅對(duì)尋路效率沒有幫助,反而可能會(huì)因?yàn)樗砑拥闹苓吘W(wǎng)格過多而使效率降低。這樣會(huì)使尋路的效率相對(duì)不均衡。如果以圖3B的方式來合并大網(wǎng)格,在各個(gè)方向上的尋路效率都是相當(dāng)?shù)?。?qǐng)參閱圖3B所示,并請(qǐng)對(duì)比參閱圖3A,從(O,O)坐標(biāo)開始逐行遍歷,圖3A和圖3B中用純黑色填充的是障礙點(diǎn)。我們合并網(wǎng)格的原則是:1、每個(gè)大網(wǎng)格相互不會(huì)重疊;2、大網(wǎng)格內(nèi)部不包含障礙點(diǎn);3、大網(wǎng)格的長(zhǎng)和寬相等。假如我們要以a點(diǎn)為大網(wǎng)格的左上角,例如(0,4)為大網(wǎng)格的左上角,那么得到一個(gè)盡量大的大網(wǎng)格。于是在這個(gè)情況下我們就得到一個(gè)5*5的大網(wǎng)格。然后繼續(xù)按逐行逐列的順序?qū)ふ乙粋€(gè)既不是障礙點(diǎn),也未被任何大網(wǎng)格包含的網(wǎng)格,作為下一個(gè)大網(wǎng)格的左上角來開始合并;如此類推。 從(O,O)坐標(biāo)開始逐行遍歷,首先判斷的是(O,O)然后是(0,I)坐標(biāo)的網(wǎng)格,均不滿足前面的合并條件,(0,0)和(0,I)坐標(biāo)的網(wǎng)格將不參與合并;然后是(0,2)坐標(biāo)發(fā)現(xiàn)可以合并4個(gè)網(wǎng)格,分別為坐標(biāo)為(0,2)、(0,3)、(1,2)、(1,3)的四個(gè)網(wǎng)格,可以合并;然后是(0,4)坐標(biāo),合并方案同上,不再一一贅述。圖3B所示為最終合并網(wǎng)格后的結(jié)果,其中連續(xù)的相同填充線條屬于同一大網(wǎng)格,即第二網(wǎng)格。另外,本發(fā)明實(shí)施例還提供了如何記錄大網(wǎng)格的方案,具體可以如下:假定每個(gè)大網(wǎng)格內(nèi)部,左上角的小網(wǎng)格是這個(gè)大網(wǎng)格的標(biāo)記點(diǎn),前述a點(diǎn)。對(duì)于每個(gè)小網(wǎng)格都設(shè)置有一個(gè)isSign字段來說明它是否是一個(gè)標(biāo)記點(diǎn)。如果是,那么它還設(shè)置width和height兩個(gè)字段來記錄它所標(biāo)記的大網(wǎng)格的長(zhǎng)和寬;如果不是,那么設(shè)置signX和signY兩個(gè)字段來記錄它所在大網(wǎng)格的標(biāo)記點(diǎn)的坐標(biāo)。通過這些數(shù)據(jù),任何小網(wǎng)格都能確定其屬于哪個(gè)大網(wǎng)格,以及這個(gè)大網(wǎng)格的長(zhǎng)和寬。如圖3B所示,假如從前述a網(wǎng)格出發(fā),那么我們尋找下一個(gè)可以至IJ達(dá)的網(wǎng)格時(shí),就不是局限于與它緊鄰的8個(gè)小網(wǎng)格了,因?yàn)榕ca網(wǎng)格處在同一個(gè)大網(wǎng)格之內(nèi)的點(diǎn)都是直線可達(dá)的。這時(shí)候我們可以直接遍歷大網(wǎng)格外圍的網(wǎng)格點(diǎn),即圖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)這樣相當(dāng)于一步就跨越了好幾個(gè)網(wǎng)格。同理,當(dāng)?shù)竭_(dá)一個(gè)大網(wǎng)格時(shí),可以認(rèn)為我們已經(jīng)到達(dá)了它所處的大網(wǎng)格之內(nèi)的所有小網(wǎng)格,就可以避免重復(fù)搜索這些其他的小網(wǎng)格了。
三、A*算法本發(fā)明實(shí)施例所采用的搜索算法還是A*算法,A*算法有兩個(gè)重要的函數(shù)g(n)和h(n) ο其中g(shù)(n)是從起始點(diǎn)到當(dāng)前點(diǎn)所需要的代價(jià),h(n)是從當(dāng)前點(diǎn)到目標(biāo)點(diǎn)的代價(jià)的估值,h(n)也被成為啟發(fā)式函數(shù)。在這里可以定義g(n)為從起始點(diǎn)到當(dāng)前點(diǎn)所走過的路線長(zhǎng)度和拐彎的代價(jià)之和;之所以在g(n)中會(huì)加入對(duì)拐彎次數(shù)的考慮,是因?yàn)閷?shí)際游戲中并不一定要求路線的絕對(duì)長(zhǎng)度最短,有時(shí)候路線的合理性也很重要,所以一些路線的絕對(duì)長(zhǎng)度雖然大一些,但是避免了過于頻繁的拐彎,給玩家的感覺會(huì)更好。另外,把h(n)定義為當(dāng)前點(diǎn)到目標(biāo)點(diǎn)的直線距離。這個(gè)啟發(fā)式函數(shù)是單調(diào)的,所以能保證一個(gè)搜索結(jié)點(diǎn)在被添加進(jìn)Close表時(shí)已經(jīng)找到了到達(dá)它的最小代價(jià)。這樣能免除需要修改Close表中結(jié)點(diǎn)的消耗。h(n)還滿足h(n)彡h* (n), (h* (η)是當(dāng)前結(jié)點(diǎn)到目標(biāo)結(jié)點(diǎn)的理論最小值),這個(gè)限定能保證Α*算法能夠找到最優(yōu)解。大網(wǎng)格對(duì)Α*算法搜索的優(yōu)化:大網(wǎng)格在搜索過程中所起的作用首先體現(xiàn)在擴(kuò)展一個(gè)結(jié)點(diǎn)時(shí)(我們把從一個(gè)結(jié)點(diǎn)出發(fā)尋找所有下一步能到達(dá)的結(jié)點(diǎn)的過程成為擴(kuò)展)。因?yàn)樵谕粋€(gè)大網(wǎng)格中的小網(wǎng)格都是相互直線可達(dá)的,所以在擴(kuò)展一個(gè)結(jié)點(diǎn)時(shí)可以遍歷該大網(wǎng)格邊緣外的結(jié)點(diǎn),如果這些網(wǎng)格是可行走的且不在Close表中,就把它添加到Open表。大網(wǎng)格的第二個(gè)作用是,每當(dāng)我們從Open表中取出一個(gè)結(jié)點(diǎn)并擴(kuò)展它之前,我們首先查詢這個(gè)結(jié)點(diǎn)所處的大網(wǎng)格是否已經(jīng)在Close表中:如果是,那么就不擴(kuò)展這個(gè)結(jié)點(diǎn)了,而是從Open表中再取出下一個(gè)結(jié)點(diǎn)進(jìn)行擴(kuò)展;如果不是,那么把這個(gè)大網(wǎng)格放到Close表中,并且擴(kuò)展這個(gè)結(jié)點(diǎn)。把一個(gè)大網(wǎng)格放到Close表中的操作很簡(jiǎn)單,只需要把這個(gè)大網(wǎng)格的標(biāo)記結(jié)點(diǎn)放到Close表中就可以了。通過這種方法,我們就可以跳過很多處在同一個(gè)大網(wǎng)格下的結(jié)點(diǎn),相當(dāng)于在大網(wǎng)格的層面進(jìn)行搜索了,從而提高了搜索的效率。在這里跳過的一些結(jié)點(diǎn),可能會(huì)使得最終尋得的路線不是最優(yōu),但是正如前文所說游戲中的尋路不一定要絕對(duì)的最優(yōu)解,通過觀察,尋路的實(shí)際效果不錯(cuò)。更具體地:請(qǐng)參閱圖5,是在合并小網(wǎng)格,形成本發(fā)明實(shí)施例提供的大網(wǎng)格地圖后,上進(jìn)行A*尋路算法流程圖,具體包括如下步驟:501:A*尋路算法開始后,先接收輸入一個(gè)起始結(jié)點(diǎn)和一個(gè)終止結(jié)點(diǎn),分別用startNode 和 endNode 來表不。可以理解的是startNode和endNode這兩個(gè)結(jié)點(diǎn)都是一個(gè)小網(wǎng)格,而且都不是障礙點(diǎn)。502:對(duì)A*尋路算法進(jìn)行初始化。對(duì)A*尋路算法進(jìn)行初始化包括如下幾個(gè)方面:1、取得endNode所在的大網(wǎng)格的標(biāo)記結(jié)點(diǎn),用endSignNode來表示;2、用變量foundPath來表示當(dāng)前是否已經(jīng)尋到可行路徑,并且把它的初始值設(shè)為false ;3、openList是一個(gè)列表,用來保存當(dāng)前可以到達(dá)的結(jié)點(diǎn),并且這些結(jié)點(diǎn)都是未被擴(kuò)展的(已經(jīng)擴(kuò)展過的結(jié)點(diǎn)放在closeList中),初始化時(shí)先將startNode放入openList。503:判斷openList是否為空,如果是,進(jìn)入517,如果否,進(jìn)入504。上述步驟503以后將進(jìn)入搜索的循環(huán)邏輯,這個(gè)循環(huán)邏輯有兩個(gè)終止條件:一是尋到了可行路徑;二是openList變成空,openList為空意味著起點(diǎn)和終點(diǎn)之間不存在可行路徑。504:從openList中按順序取出第一個(gè)結(jié)點(diǎn)(openList中的結(jié)點(diǎn)是按評(píng)估值從小到大排序),并且用currentNode來表示。需要注意的是,在本步驟中,如果取出的這個(gè)結(jié)點(diǎn)所在的大網(wǎng)格已經(jīng)被擴(kuò)展了,那么就把它丟棄,繼續(xù)取出下一個(gè)結(jié)點(diǎn)。這是因?yàn)樘幵谕粋€(gè)大網(wǎng)格內(nèi)的小網(wǎng)格,所擴(kuò)展出來的結(jié)點(diǎn)都是一樣的。我們判斷大網(wǎng)格是否已經(jīng)被擴(kuò)展的方法請(qǐng)參閱505。505:根據(jù)currentNode得到它所在的大網(wǎng)格的標(biāo)記點(diǎn)currentSignNode,然后判斷currentSignNode是否已經(jīng)在closeList列表中。如果是,則丟棄該結(jié)點(diǎn),進(jìn)入503,否則進(jìn)入506。506:當(dāng)我們從openList中取出一個(gè)currentNode,并且它所在的大網(wǎng)格還沒有被擴(kuò)展,那么就將對(duì)應(yīng)的currentSignNode放入closeList,以此來標(biāo)記這個(gè)大網(wǎng)格已經(jīng)被擴(kuò)展了。507:比較currentSignNode與初始化過程中的endSignNode,判斷兩者是否相等,如果是,說明我們已經(jīng)到達(dá)了終點(diǎn)所在的大網(wǎng)格,尋路成功,進(jìn)入516。如果當(dāng)前還沒到達(dá)終點(diǎn)所在的大網(wǎng)格,那么我們就需要開始擴(kuò)展,進(jìn)入508。508:首先獲取當(dāng)前大網(wǎng)格外圍的全部非障礙點(diǎn),并且把這些點(diǎn)放到aroundNodeList列表中,然后進(jìn)入509。509:判斷aroundNodeLi st是否為空,如果為空,則進(jìn)入510,否則進(jìn)入511 ;510:對(duì)openList列表中的結(jié)點(diǎn)按照評(píng)估值從小到大重新排序,然后進(jìn)入503。511:node 賦值為 aroundNodeLi st 中的一個(gè)兀素,并進(jìn)入 512。512:確定上述node是否在openList中,如果不在,進(jìn)入513,否則進(jìn)入514。513:計(jì)算node的評(píng)估值,并且將node的前驅(qū)結(jié)點(diǎn)記錄為currentNode,將node加入到openList中,然后進(jìn)入509。514:如果node已經(jīng)在openList列表中,那么計(jì)算node的評(píng)估值,判斷node的評(píng)估值是否比openList中的要小,如果是,進(jìn)入515,否則,進(jìn)入509。515:更新openList中該點(diǎn)的評(píng)估值和前驅(qū)結(jié)點(diǎn)。將node的前驅(qū)結(jié)點(diǎn)記錄為currentNode,然后進(jìn)入 509。當(dāng)處理完aroundNodeLi st中的所有結(jié)點(diǎn)后,需要對(duì)openList列表中的結(jié)點(diǎn)按照評(píng)估值從小到大重新排序。因?yàn)閛penList表中增加了新的結(jié)點(diǎn),這樣會(huì)破壞原來openList列表中結(jié)點(diǎn)的有序狀態(tài)。在我們的實(shí)現(xiàn)過程中,用到達(dá)一個(gè)網(wǎng)格所經(jīng)過的實(shí)際路程與該網(wǎng)格到終點(diǎn)的直線距離作為這個(gè)網(wǎng)格的評(píng)估值。至此,我們就完成了一次大網(wǎng)格擴(kuò)展,重新返回到循環(huán)開始的地方。516:將 foundPath 變量賦值為 true。517:判斷foundPath是否為true,如果是,進(jìn)入518,否則進(jìn)入519。518:foundPath 為 true,表不找到了路徑,生成從 startNode 到 endNode 的路徑,結(jié)束尋路流程。當(dāng)搜索循環(huán)結(jié)束的時(shí)候,要么我們沒有尋到路,那么返回尋路失?。灰匆呀?jīng)到達(dá)了終點(diǎn)所在的大網(wǎng)格,那么可以從currentNode開始,通過記錄的前驅(qū)結(jié)點(diǎn)找到startNode,就得到了從startNode到終點(diǎn)所在大網(wǎng)格的路徑,只要在這條路徑最后加上endNode,那么就生成了一條從startNode到endNode的完整路徑了。519:尋路失敗。結(jié)束尋路流程。本發(fā)明實(shí)施例還提供給了一種尋路裝置,如圖6所示,包括:網(wǎng)格確定單元601,用于獲取地圖,確定地圖的第一網(wǎng)格,上述第一網(wǎng)格為上述地圖中可到達(dá)的網(wǎng)格;網(wǎng)格合并單元602,用于按照預(yù)定的順序?qū)⑸鲜鼍W(wǎng)格確定單元601確定的第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并,得到第二網(wǎng)格;并將上述第二網(wǎng)格包含的第一網(wǎng)格標(biāo)記為屬于所述第二網(wǎng)格;尋路計(jì)算單元603,用于將上述網(wǎng)格合并單元602合并得到的第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行尋路算法,得到起始網(wǎng)格到目標(biāo)網(wǎng)格的路徑。以上實(shí)施例,通過合并網(wǎng)格的方式,可以減少在使用尋路算法過程中計(jì)算的網(wǎng)格數(shù)量,這樣可以提高尋路效率,減少尋路時(shí)間,使設(shè)備執(zhí)行尋路更加流暢。進(jìn)一步地,如圖7所示,上述裝置還包括:坐標(biāo)重置單元701,用于在上述網(wǎng)格合并單元602按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并之前,將第一網(wǎng)格的坐標(biāo)重置為位于坐標(biāo)系中同一象限的坐標(biāo)值??蛇x地,上述網(wǎng)格合并單元602,具體用于從位于上述地圖指定角的網(wǎng)格開始逐行將第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并;或者,從位于上述地圖指定角的網(wǎng)格開始逐列將第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并;所位于上述地圖指定角的網(wǎng)格坐標(biāo)為上述象限的起始坐標(biāo)??蛇x地,上述網(wǎng)格合并單元602,具體用于將未合并的第一網(wǎng)格作為起始點(diǎn)進(jìn)行擴(kuò)展得到第二網(wǎng)格,第二網(wǎng)格滿足如下條件:第二網(wǎng)格長(zhǎng)寬相等、第二網(wǎng)格不包含障礙點(diǎn)并且第二網(wǎng)格與其他第二網(wǎng)格之間相互不重疊。作為一個(gè)舉例,請(qǐng)參閱圖3B所示,并請(qǐng)對(duì)比參閱圖3A,指定角的網(wǎng)格為左上角的網(wǎng)格,逐行采用逐行合并的方式進(jìn)行,那么將從(0,0)坐標(biāo)開始逐行遍歷,圖3A和圖3B中用純黑色填充的是障礙點(diǎn)。合并網(wǎng)格的原則是:1、每個(gè)大網(wǎng)格相互不會(huì)重疊;2、大網(wǎng)格內(nèi)部不包含障礙點(diǎn);3、大網(wǎng)格的長(zhǎng)和寬相等。假如我們要以a點(diǎn)為大網(wǎng)格的左上角,例如(0,4)為大網(wǎng)格的左上角,那么得到一個(gè)盡量大的大網(wǎng)格。于是在這個(gè)情況下我們就得到一個(gè)5*5的大網(wǎng)格。然后繼續(xù)按逐行逐列的順序?qū)ふ乙粋€(gè)既不是障礙點(diǎn),也未被任何大網(wǎng)格包含的網(wǎng)格,作為下一個(gè)大網(wǎng)格的左上角來開始合并;如此類推。
從(0,0)坐標(biāo)開始逐行遍歷,首先判斷的是(0,0)然后是(0,I)坐標(biāo)的網(wǎng)格,均不滿足前面的合并條件,(0,0)和(0,I)坐標(biāo)的網(wǎng)格將不參與合并;然后是(0,2)坐發(fā)現(xiàn)可以合并4個(gè)網(wǎng)格,分別為坐標(biāo)為(0,2)、(0,3)、(1,2)、(1,3)的四個(gè)網(wǎng)格,可以合并;然后是(0,4)坐標(biāo),合并方案同上,不再一一贅述。圖3B所示為最終合并網(wǎng)格后的結(jié)果,其中連續(xù)的相同填充線條屬于同一大網(wǎng)格??蛇x地,尋路計(jì)算單元603,用于將上述網(wǎng)格合并單元602合并得到的第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行A星尋路算法,得到起始網(wǎng)格到目標(biāo)網(wǎng)格的路徑??蛇x地,上述尋路計(jì)算單元603,具體用于在執(zhí)行A星算法過程中,在獲取到某第一網(wǎng)格后,若上述第一網(wǎng)格被標(biāo)記為屬于第二網(wǎng)格,并且該第二網(wǎng)格已經(jīng)被擴(kuò)展則不對(duì)上述第一網(wǎng)格進(jìn)行擴(kuò)展;若上述第一網(wǎng)格被標(biāo)記為屬于第二網(wǎng)格,并且該第二網(wǎng)格未擴(kuò)展,則將上述第二網(wǎng)格進(jìn)行擴(kuò)展。本發(fā)明實(shí)施例還提供了另一種尋路裝置,該尋路裝置可以是任意需要進(jìn)行執(zhí)行尋路方案的裝置,例如終端、服務(wù)器、機(jī)器人等等,以終端為例:如圖8所示,為了便于說明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分,具體技術(shù)細(xì)節(jié)未揭示的,請(qǐng)參照本發(fā)明實(shí)施例方法部分。該終端可以為包括手機(jī)、平板電腦、PDA (Personal Digital Assistant,個(gè)人數(shù)字助理)、P0S (Point of Sales,銷售終端)、車載電腦等任意終端設(shè)備,以終端為手機(jī)為例:圖8示出的是與本發(fā)明實(shí)施例提供的終端相關(guān)的手機(jī)的部分結(jié)構(gòu)的框圖。參考圖8,手機(jī)包括:射頻(Radio Frequency,RF)電路810、存儲(chǔ)器820、輸入單元830、顯示單元840、傳感器850、音頻電路860、無線保真(wireless fidelity,WiFi)模塊870、處理器880、以及電源890等部件。本領(lǐng)域技術(shù)人員可以理解,圖8中示出的手機(jī)結(jié)構(gòu)并不構(gòu)成對(duì)手機(jī)的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。下面結(jié)合圖8對(duì)手機(jī)的各個(gè)構(gòu)成部件進(jìn)行具體的介紹:RF電路810可用于收發(fā)信息或通話過程中,信號(hào)的接收和發(fā)送,特別地,將基站的下行信息接收后,給處理器880處理;另外,將設(shè)計(jì)上行的數(shù)據(jù)發(fā)送給基站。通常,RF電路包括但不限于天線、至少一個(gè)放大器、收發(fā)信機(jī)、耦合器、低噪聲放大器(Low NoiseAmplifier, LNA)、雙工器等。此外,RF電路80還可以通過無線通信與網(wǎng)絡(luò)和其他設(shè)備通信。上述無線通信可以使用任一通信標(biāo)準(zhǔn)或協(xié)議,包括但不限于全球移動(dòng)通訊系統(tǒng)(Global System of Mobile communication, GSM)、通用分組無線服務(wù)(General PacketRadio Service, GPRS)、碼分多址(Code Division Multiple Access, CDMA)、寬帶碼分多址(Wideband Code Division Multiple Access, WCDMA)、長(zhǎng)期演進(jìn)(Long Term Evolution,LTE)、電子郵件、短消息服務(wù)(Short Messaging Service, SMS)等。存儲(chǔ)器820可用于存儲(chǔ)軟件程序以及模塊,處理器880通過運(yùn)行存儲(chǔ)在存儲(chǔ)器820的軟件程序以及模塊,從而執(zhí)行手機(jī)的各種功能應(yīng)用以及數(shù)據(jù)處理。存儲(chǔ)器820可主要包括存儲(chǔ)程序區(qū)和存儲(chǔ)數(shù)據(jù)區(qū),其中,存儲(chǔ)程序區(qū)可存儲(chǔ)操作系統(tǒng)、至少一個(gè)功能所需的應(yīng)用程序(比如聲音播放功能、圖像播放功能等)等;存儲(chǔ)數(shù)據(jù)區(qū)可存儲(chǔ)根據(jù)手機(jī)的使用所創(chuàng)建的數(shù)據(jù)(比如音頻數(shù)據(jù)、電話本等)等。此外,存儲(chǔ)器820可以包括高速隨機(jī)存取存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,例如至少一個(gè)磁盤存儲(chǔ)器件、閃存器件、或其他易失性固態(tài)存儲(chǔ)器件。輸入單元830可用于接收輸入的數(shù)字或字符信息,以及產(chǎn)生與手機(jī)800的用戶設(shè)置以及功能控制有關(guān)的鍵信號(hào)輸入。具體地,輸入單元830可包括觸控面板831以及其他輸入設(shè)備832。觸控面板831,也稱為觸摸屏,可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸控面板831上或在觸控面板831附近的操作),并根據(jù)預(yù)先設(shè)定的程式驅(qū)動(dòng)相應(yīng)的連接裝置??蛇x的,觸控面板831可包括觸摸檢測(cè)裝置和觸摸控制器兩個(gè)部分。其中,觸摸檢測(cè)裝置檢測(cè)用戶的觸摸方位,并檢測(cè)觸摸操作帶來的信號(hào),將信號(hào)傳送給觸摸控制器;觸摸控制器從觸摸檢測(cè)裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點(diǎn)坐標(biāo),再送給處理器880,并能接收處理器880發(fā)來的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類型實(shí)現(xiàn)觸控面板831。除了觸控面板831,輸入單元830還可以包括其他輸入設(shè)備832。具體地,其他輸入設(shè)備832可以包括但不限于物理鍵盤、功能鍵(比如音量控制按鍵、開關(guān)按鍵等)、軌跡球、鼠標(biāo)、操作桿等中的一種或多種。顯示單元840可用于顯示由用戶輸入的信息或提供給用戶的信息以及手機(jī)的各種菜單。顯示單元840可包括顯示面板841,可選的,可以采用液晶顯示器(Liquid CrystalDisplay, IXD)、有機(jī)發(fā)光二極管(Organic Light-Emitting Diode, 0LED)等形式來配置顯示面板841。進(jìn)一步的,觸控面板831可覆蓋顯示面板841,當(dāng)觸控面板831檢測(cè)到在其上或附近的觸摸操作后,傳送給處理器880以確定觸摸事件的類型,隨后處理器880根據(jù)觸摸事件的類型在顯示面板841上提供相應(yīng)的視覺輸出。雖然在圖8中,觸控面板831與顯示面板841是作為兩個(gè)獨(dú)立的部件來實(shí)現(xiàn)手機(jī)的輸入和輸入功能,但是在某些實(shí)施例中,可以將觸控面板831與顯示面板841集成而實(shí)現(xiàn)手機(jī)的輸入和輸出功能。手機(jī)800還可包括至少一種傳感器850,比如光傳感器、運(yùn)動(dòng)傳感器以及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán)境光線的明暗來調(diào)節(jié)顯示面板841的亮度,接近傳感器可在手機(jī)移動(dòng)到耳邊時(shí),關(guān)閉顯示面板841和/或背光。作為運(yùn)動(dòng)傳感器的一種,加速計(jì)傳感器可檢測(cè)各個(gè)方向上(一般為三軸)加速度的大小,靜止時(shí)可檢測(cè)出重力的大小及方向,可用于識(shí)別手機(jī)姿態(tài)的應(yīng)用(比如橫豎屏切換、相關(guān)游戲、磁力計(jì)姿態(tài)校準(zhǔn))、振動(dòng)識(shí)別相關(guān)功能(比如計(jì)步器、敲擊)等;至于手機(jī)還可配置的陀螺儀、氣壓計(jì)、濕度計(jì)、溫度計(jì)、紅外線傳感器等其他傳感器,在此不再贅述。音頻電路860、揚(yáng)聲器861,傳聲器862可提供用戶與手機(jī)之間的音頻接口。音頻電路860可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號(hào),傳輸?shù)綋P(yáng)聲器861,由揚(yáng)聲器861轉(zhuǎn)換為聲音信號(hào)輸出;另一方面,傳聲器862將收集的聲音信號(hào)轉(zhuǎn)換為電信號(hào),由音頻電路860接收后轉(zhuǎn)換為音頻數(shù)據(jù),再將音頻數(shù)據(jù)輸出處理器880處理后,經(jīng)RF電路810以發(fā)送給比如另一手機(jī),或者將音頻數(shù)據(jù)輸出至存儲(chǔ)器820以便進(jìn)一步處理。WiFi屬于短距離無線傳輸技術(shù),手機(jī)通過WiFi模塊870可以幫助用戶收發(fā)電子郵件、瀏覽網(wǎng)頁和訪問流式媒體等,它為用戶提供了無線的寬帶互聯(lián)網(wǎng)訪問。雖然圖8示出了WiFi模塊870,但是可以理解的是,其并不屬于手機(jī)800的必須構(gòu)成,完全可以根據(jù)需要在不改變發(fā)明的本質(zhì)的范圍內(nèi)而省略。處理器880是手機(jī)的控制中心,利用各種接口和線路連接整個(gè)手機(jī)的各個(gè)部分,通過運(yùn)行或執(zhí)行存儲(chǔ)在存儲(chǔ)器820內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲(chǔ)在存儲(chǔ)器820內(nèi)的數(shù)據(jù),執(zhí)行手機(jī)的各種功能和處理數(shù)據(jù),從而對(duì)手機(jī)進(jìn)行整體監(jiān)控??蛇x的,處理器880可包括一個(gè)或多個(gè)處理單元;優(yōu)選的,處理器880可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無線通信??梢岳斫獾氖牵鲜稣{(diào)制解調(diào)處理器也可以不集成到處理器880中。手機(jī)800還包括給各個(gè)部件供電的電源890 (比如電池),優(yōu)選的,電源可以通過電源管理系統(tǒng)與處理器880邏輯相連,從而通過電源管理系統(tǒng)實(shí)現(xiàn)管理充電、放電、以及功耗管理等功能。盡管未示出,手機(jī)800還可以包括攝像頭、藍(lán)牙模塊等,在此不再贅述。在本發(fā)明實(shí)施例中,該終端所包括的處理器880還具有以下功能:獲取地圖,確定地圖的第一網(wǎng)格,上述第一網(wǎng)格為上述地圖中可到達(dá)的網(wǎng)格;按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并,得到第二網(wǎng)格;并將上述第二網(wǎng)格包含的第一網(wǎng)格標(biāo)記為屬于所述第二網(wǎng)格;將第二網(wǎng)格作為第二網(wǎng)格執(zhí)行尋路算法,得到起始網(wǎng)格到目標(biāo)網(wǎng)格的路徑。以上實(shí)施例,通過合并網(wǎng)格的方式,可以減少在使用尋路算法過程中計(jì)算的網(wǎng)格數(shù)量,這樣可以提高尋路效率,減少尋路時(shí)間,使設(shè)備執(zhí)行尋路更加流暢。進(jìn)一步地,在按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并之前還包括:將第一網(wǎng)格的坐標(biāo)重置為位于坐標(biāo)系中同一象限的坐標(biāo)值。可選地,上述按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并包括:從位于上述地圖指定角的網(wǎng)格開始逐行將第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并;或者,從位于上述地圖指定角的網(wǎng)格開始逐列將第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并;所位于上述地圖指定角的網(wǎng)格坐標(biāo)為上述象限的起始坐標(biāo)。可選地,上述預(yù)定規(guī)則包括:將未合并的第一網(wǎng)格作為起始點(diǎn)進(jìn)行擴(kuò)展得到第二網(wǎng)格,第二網(wǎng)格滿足如下條件:第二網(wǎng)格長(zhǎng)寬相等、第二網(wǎng)格不包含障礙點(diǎn)并且第二網(wǎng)格與其他第二網(wǎng)格之間相互不重疊。作為一個(gè)舉例,請(qǐng)參閱圖3B所示,并請(qǐng)對(duì)比參閱圖3A,指定角的網(wǎng)格為左上角的網(wǎng)格,逐行采用逐行合并的方式進(jìn)行,那么將從(0,0)坐標(biāo)開始逐行遍歷,圖3A和圖3B中用純黑色填充的是障礙點(diǎn)。合并網(wǎng)格的原則是:1、每個(gè)大網(wǎng)格相互不會(huì)重疊;2、大網(wǎng)格內(nèi)部不包含障礙點(diǎn);3、大網(wǎng)格的長(zhǎng)和寬相等。假如我們要以a點(diǎn)為大網(wǎng)格的左上角,例如(0,4)為大網(wǎng)格的左上角,那么得到一個(gè)盡量大的大網(wǎng)格。于是在這個(gè)情況下我們就得到一個(gè)5*5的大網(wǎng)格。然后繼續(xù)按逐行逐列的順序?qū)ふ乙粋€(gè)既不是障礙點(diǎn),也未被任何大網(wǎng)格包含的網(wǎng)格,作為下一個(gè)大網(wǎng)格的左上角來開始合并;如此類推。從(O,O)坐標(biāo)開始逐行遍歷,首先判斷的是(O,O)然后是(0,I)坐標(biāo)的網(wǎng)格,均不滿足前面的合并條件,(0,0)和(0,I)坐標(biāo)的網(wǎng)格將不參與合并;然后是(0,2)坐發(fā)現(xiàn)可以合并4個(gè)網(wǎng)格,分別為坐標(biāo)為(0,2)、(0,3)、(1,2)、(1,3)的四個(gè)網(wǎng)格,可以合并;然后是(0,
4)坐標(biāo),合并方案同上,不再一一贅述。圖3B所示為最終合并網(wǎng)格后的結(jié)果,其中連續(xù)的相同填充線條屬于同一大網(wǎng)格??蛇x地,上述尋路算法為A星尋路算法??蛇x地,上述將第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行尋路算法包括:在執(zhí)行A星算法過程中,在獲取到某第一網(wǎng)格后,若上述第一網(wǎng)格被標(biāo)記為屬于第二網(wǎng)格,并且該第二網(wǎng)格已經(jīng)被擴(kuò)展則不對(duì)上述第一網(wǎng)格進(jìn)行擴(kuò)展;若上述第一網(wǎng)格被標(biāo)記為屬于第二網(wǎng)格,并且該第二網(wǎng)格未擴(kuò)展,則將上述第二網(wǎng)格進(jìn)行擴(kuò)展。本發(fā)明實(shí)施例方法實(shí)現(xiàn)以后,發(fā)明人對(duì)方案的效果進(jìn)行了測(cè)試,具體測(cè)試結(jié)果如下:為了測(cè)試優(yōu)化后尋路系統(tǒng)的性能,本文將優(yōu)化前后的兩個(gè)尋路系統(tǒng)進(jìn)行比較,另外還比較了在A*評(píng)價(jià)函數(shù)中考慮拐彎代價(jià)與否的性能。測(cè)試采用的是一款游戲軟件,測(cè)試的方法是在小地圖上點(diǎn)擊最遠(yuǎn)的點(diǎn),讓人物跑一個(gè)對(duì)角線,然后再跑回原點(diǎn)。每次都連續(xù)點(diǎn)擊10下鼠標(biāo),這樣就得到了 20組數(shù)據(jù)。時(shí)間的計(jì)算是用Scout工具,獲取在這一巾貞里執(zhí)行ActionScript代碼的時(shí)間。結(jié)果如圖8所示,橫坐標(biāo)是測(cè)試次數(shù),縱坐標(biāo)是時(shí)間值,單位為毫秒。其中實(shí)線為背景技術(shù)中方案所用時(shí)間示意,以小線段組成虛線所示為本發(fā)明實(shí)施例方案的時(shí)間示意,以點(diǎn)組成的虛線所示為本發(fā)明實(shí)施例方案不考慮拐彎代價(jià)的時(shí)間示意。通過上述結(jié)果可以看到,經(jīng)過優(yōu)化后的尋路算法的效率有了很大的提升,尋路所需時(shí)間降低了約50%。此外,在計(jì)算結(jié)點(diǎn)代價(jià)時(shí)如果不考慮拐彎的代價(jià),也可以節(jié)省一點(diǎn)判斷時(shí)間,但是綜合看,多花5 IOms的時(shí)間來使得尋得的路徑拐點(diǎn)少一點(diǎn),路線會(huì)顯得自然一些,也是值得的。實(shí)際測(cè)試時(shí),即使連續(xù)點(diǎn)擊小地圖尋找最遠(yuǎn)的線路也已經(jīng)不會(huì)出現(xiàn)卡頓,結(jié)果較好。值得注意的是,上述裝置實(shí)施例中,所包括的各個(gè)單元只是按照功能邏輯進(jìn)行劃分的,但并不局限于上述的劃分,只要能夠?qū)崿F(xiàn)相應(yīng)的功能即可;另外,各功能單元的具體名稱也只是為了便于相互區(qū)分,并不用于限制本發(fā)明的保護(hù)范圍。另外,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述各方法實(shí)施例中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,相應(yīng)的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。以上僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明實(shí)施例揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種尋路方法,其特征在于,包括: 獲取地圖,確定地圖的第一網(wǎng)格,所述第一網(wǎng)格為所述地圖中可到達(dá)的網(wǎng)格; 按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并,得到第二網(wǎng)格;并將所述第二網(wǎng)格包含的第一網(wǎng)格標(biāo)記為屬于所述第二網(wǎng)格; 將第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行尋路算法,得到起始網(wǎng)格到目標(biāo)網(wǎng)格的路徑。
2.根據(jù)權(quán)利要求1所述方法,其特征在于,在按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并之前還包括: 將第一網(wǎng)格的坐標(biāo)重置為位于坐標(biāo)系中同一象限的坐標(biāo)值。
3.根據(jù)權(quán)利要求2所述方法,其特征在于,所述按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并包括: 從位于所述地圖指定角的網(wǎng)格開始逐行將第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并;或者, 從位于所述地圖指定角的網(wǎng)格開始逐列將第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并;所位于所述地圖指定角的網(wǎng)格坐標(biāo)為所述象限的起始坐標(biāo)。
4.根據(jù)權(quán)利要求1至3任意一項(xiàng)所述方法,其特征在于,所述預(yù)定規(guī)則包括: 將未合并的第一網(wǎng)格 作為起始點(diǎn)進(jìn)行擴(kuò)展得到第二網(wǎng)格,第二網(wǎng)格滿足如下條件:第二網(wǎng)格長(zhǎng)寬相等、第二網(wǎng)格不包含障礙點(diǎn)并且第二網(wǎng)格與其他第二網(wǎng)格之間相互不重疊。
5.根據(jù)權(quán)利要求1所述方法,其特征在于,所述尋路算法為A星尋路算法。
6.根據(jù)權(quán)利要求4所述方法,其特征在于,所述將第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行尋路算法包括: 在執(zhí)行A星算法過程中,在獲取到某第一網(wǎng)格后,若所述第一網(wǎng)格被標(biāo)記為屬于第二網(wǎng)格,并且該第二網(wǎng)格已經(jīng)被擴(kuò)展則不對(duì)所述第一網(wǎng)格進(jìn)行擴(kuò)展;若所述第一網(wǎng)格被標(biāo)記為屬于第二網(wǎng)格,并且該第二網(wǎng)格未擴(kuò)展,則將所述第二網(wǎng)格進(jìn)行擴(kuò)展。
7.一種尋路裝置,其特征在于,包括: 網(wǎng)格確定單元,用于獲取地圖,確定地圖的第一網(wǎng)格,所述第一網(wǎng)格為所述地圖中可到達(dá)的網(wǎng)格; 網(wǎng)格合并單元,用于按照預(yù)定的順序?qū)⑺鼍W(wǎng)格確定單元確定的第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并,得到第二網(wǎng)格;并將所述第二網(wǎng)格包含的第一網(wǎng)格標(biāo)記為屬于所述第二網(wǎng)格; 尋路計(jì)算單元,用于將所述網(wǎng)格合并單元合并得到的第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行尋路算法,得到起始網(wǎng)格到目標(biāo)網(wǎng)格的路徑。
8.根據(jù)權(quán)利要求7所述裝置,其特征在于,還包括: 坐標(biāo)重置單元,用于在所述網(wǎng)格合并單元按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并之前,將第一網(wǎng)格的坐標(biāo)重置為位于坐標(biāo)系中同一象限的坐標(biāo)值。
9.根據(jù)權(quán)利要求8所述裝置,其特征在于, 所述網(wǎng)格合并單元,具體用于從位于所述地圖指定角的網(wǎng)格開始逐行將第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并;或者,從位于所述地圖指定角的網(wǎng)格開始逐列將第一網(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并;所位于所述地圖指定角的網(wǎng)格坐標(biāo)為所述象限的起始坐標(biāo)。
10.根據(jù)權(quán)利要求7至9任意一項(xiàng)所述裝置,其特征在于, 所述網(wǎng)格合并單元,具體用于將未合并的第一網(wǎng)格作為起始點(diǎn)進(jìn)行擴(kuò)展得到第二網(wǎng)格,第二網(wǎng)格滿足如下條件:第二網(wǎng)格長(zhǎng)寬相等、第二網(wǎng)格不包含障礙點(diǎn)并且第二網(wǎng)格與其他第二網(wǎng)格之間相互不重疊。
11.根據(jù)權(quán)利要求7所述裝置,其特征在于, 尋路計(jì)算單元,用于將所述網(wǎng)格合并單元合并得到的第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行A星尋路算法,得到起始網(wǎng)格到目標(biāo)網(wǎng)格的路徑。
12.根據(jù)權(quán)利要求11所述裝置,其特征在于, 所述尋路計(jì)算單元,具體用于在執(zhí)行A星算法過程中,在獲取到某第一網(wǎng)格后,若所述第一網(wǎng)格被標(biāo)記為屬于第二網(wǎng)格,并且該第二網(wǎng)格已經(jīng)被擴(kuò)展則不對(duì)所述第一網(wǎng)格進(jìn)行擴(kuò)展;若所述第一網(wǎng)格被標(biāo)記為屬于第二網(wǎng)格,并且該第二網(wǎng)格未擴(kuò)展,則將所述第二網(wǎng)格進(jìn)行擴(kuò)展 。
全文摘要
本發(fā)明實(shí)施例公開了一種尋路方法和裝置,以方法的實(shí)現(xiàn)為例,包括獲取地圖,確定地圖的第一網(wǎng)格,所述第一網(wǎng)格為所述地圖中可到達(dá)的網(wǎng)格;按照預(yù)定的順序?qū)⒌谝痪W(wǎng)格按照預(yù)定規(guī)則進(jìn)行合并,得到第二網(wǎng)格;并將所述第二網(wǎng)格包含的第一網(wǎng)格標(biāo)記為屬于所述第二網(wǎng)格;將第二網(wǎng)格作為獨(dú)立網(wǎng)格執(zhí)行尋路算法,得到起始網(wǎng)格到目標(biāo)網(wǎng)格的路徑。采用以上方法,通過合并網(wǎng)格的方式,可以減少在使用尋路算法過程中計(jì)算的網(wǎng)格數(shù)量,這樣可以提高尋路效率,減少尋路時(shí)間,使設(shè)備執(zhí)行尋路更加流暢。
文檔編號(hào)G09B29/00GK103198234SQ20131014833
公開日2013年7月10日 申請(qǐng)日期2013年4月25日 優(yōu)先權(quán)日2013年4月25日
發(fā)明者陳楚業(yè) 申請(qǐng)人:騰訊科技(深圳)有限公司