專利名稱:一種最優(yōu)路徑的尋徑方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算路徑的方法,尤其涉及一種二維或三維網(wǎng)格中任意兩點之間的最優(yōu)路徑的尋徑方法。
背景技術(shù):
在計算機(jī)的二維和三維游戲中,有許多場景,例如,房屋、房屋里的走廊、大地、海洋等,對于這些場景計算機(jī)以網(wǎng)格的形式進(jìn)行描述,即一個場景是由若干個相鄰的網(wǎng)格組成的,一般采用三角形作為基本網(wǎng)格。在二維或三維空間中,任何一個三角形只要給出三個頂點的坐標(biāo)就可以確定下來,尤其是在三維游戲中,計算機(jī)系統(tǒng)可以通過保存三角形三個頂點的三維坐標(biāo)來保存場景。于是,無論一個多么復(fù)雜的場景,都是由若干個形狀不等的三角形網(wǎng)格組成。一個場景劃分為多少個三角形網(wǎng)格,是由該場景的地形以及障礙物的分布情況所決定的。
在各種各樣的場景中,一個物體要從一個地方移動到另一個地方,往往存在多條路徑,這就需要能夠計算和選擇出哪一條路徑是最短路徑,也就是最優(yōu)路徑。在場景中,任何一個點都可以看作是位于組成場景的某個三角形網(wǎng)格中,于是計算從一個點到另一個點的最短路徑就可以等同于計算一個點所在的三角形網(wǎng)格到另一個點所在的三角形網(wǎng)格的最短路徑。每個三角形網(wǎng)格都有自己的標(biāo)號,最短路徑可以用順序經(jīng)過的一系列三角形網(wǎng)格的標(biāo)號來表示。另外,在存在障礙物的場景中,物體從一個地方移動到另一個地方不能穿過障礙物,也就是需要繞過障礙物前進(jìn),于是對于物體所在的三角形網(wǎng)格來說,可以將三角形網(wǎng)格的三條邊分成邊界邊和非邊界邊,邊界邊是和用于表示障礙物的三角形網(wǎng)格之一相鄰的邊,物體不可以穿過邊界邊前進(jìn);非邊界邊是和用于表示非障礙物的三角形網(wǎng)格之一相鄰的邊,物體可以穿過非邊界邊前進(jìn)。
目前,計算三維場景中任意兩點之間的最短路徑的常用方法如下首先,建立場景的拓?fù)鋱D;建立場景的拓?fù)鋱D的方法很多,例如將組成場景的所有三角形網(wǎng)格的一邊的中點彼此用直線相連,計算出任何兩個相連的中點的直線距離,同時對任何兩個中點之間的直線距離賦予一定的權(quán)值,權(quán)值表示從一點移動到另一點所需付出的代價,例如上坡比下坡難,所以上坡所需付出的代價大于下坡所需付出的代價,于是表示上坡的直線距離的權(quán)值就大。建立了場景的拓?fù)鋱D之后,由于場景中的任何一個點都看作是位于場景中的某個三角形網(wǎng)格上,進(jìn)一步地,可以將場景中的任何一個點都看作是位于三角形網(wǎng)格的一邊的中點上,于是,尋找場景中任意兩點的最短路徑便轉(zhuǎn)換為在拓?fù)鋱D中計算對應(yīng)的兩點之間的最短距離問題。
接下來,計算拓?fù)鋱D中指定的兩點的最短距離;在這樣一張帶有權(quán)值的拓?fù)鋱D中計算任意兩點之間的最短距離,目前有成熟的算法,例如A星算法、迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd)算法等。由于這些算法是比較成熟的算法,這里不再贅述。
最后,通過上述算法求出兩點間的最短距離是順序經(jīng)過的一系列三角形網(wǎng)格的中點,于是,用兩點間順序經(jīng)過的三角形網(wǎng)格的中點標(biāo)號來表示兩點間的最短路徑,輸出這個最短路徑就解決了在場景中尋找指定的兩點間的最短路徑問題。
然而,采用以上方法計算出來的最短路徑存在以下缺點由于整個場景是由若干個形狀不一的三角形網(wǎng)格組成,所以即使兩點之間沒有障礙物阻擋可以直線到達(dá),那么,通過上述的現(xiàn)有方法計算出的最短路徑仍然需要順序經(jīng)過若干個三角形網(wǎng)格的中點,于是最短路徑會呈現(xiàn)彎彎曲曲的鋸齒狀,因此,在計算機(jī)的二維或三維游戲中,當(dāng)玩家令一個物體從一點移動到另一點時,即使中間沒有障礙物阻擋可以直線到達(dá),那么物體所走的最短路徑也是一條蜿蜒曲折的線路,這樣沒有體現(xiàn)出最短路徑的最優(yōu)性,也使玩家的體驗不好,影響用戶的使用積極性。
發(fā)明內(nèi)容有鑒于此,本發(fā)明的目的在于提供一種最優(yōu)路徑的尋徑方法,應(yīng)用本發(fā)明提供的方法,可以用直線可達(dá)的路徑替換掉蜿蜒曲折的路徑,體現(xiàn)最短路徑的最優(yōu)性。
為了實現(xiàn)上述發(fā)明目的,本發(fā)明提供一種最優(yōu)路徑的尋徑方法,該方法包括A、建立場景的由點和線組成的拓?fù)鋱D,計算拓?fù)鋱D中指定的兩點之間的初始最短路徑,該初始最短路徑由順序經(jīng)過的點和線組成;B、依次判斷初始最短路徑上的起點到后續(xù)的點是否能直線到達(dá),直至查找到可以與起點直線到達(dá)的離起點最遠(yuǎn)的點,并判斷所述最遠(yuǎn)點是否是終點,如果不是,將所述最遠(yuǎn)點作為起點,返回執(zhí)行本步驟;否則,執(zhí)行步驟C;C、將指定的兩點之間能直線到達(dá)的所有的點順序地直線相連并作為最優(yōu)路徑輸出。
步驟A中所述建立場景的由點和線組成的拓?fù)鋱D中的場景為計算機(jī)二維或三維游戲中的網(wǎng)格。
當(dāng)所述場景為計算機(jī)二維或三維游戲中的網(wǎng)格時,步驟A中所述建立場景的由點和線組成的拓?fù)鋱D包括將所有網(wǎng)格的重心作為拓?fù)鋱D中的點,將相鄰網(wǎng)格的重心直線相連作為拓?fù)鋱D中的線,計算相鄰的兩個重心之間的直線距離,并賦予相連的兩個重心之間的直線距離以一定的權(quán)值。
步驟A中所述計算拓?fù)鋱D中指定的兩點之間的初始最短路徑可以包括根據(jù)拓?fù)鋱D中的直線距離和所賦予的直線距離的權(quán)值,采用A星算法、迪杰斯特拉Dijkstra算法或弗洛伊德Floyd算法計算拓?fù)鋱D中指定的兩點之間的初始最短路徑。
步驟B中所述判斷起點到后續(xù)的點是否能直線可達(dá)可以包括B1、創(chuàng)建從起點到后續(xù)的點的向量,并將該向量映射到起點所在的網(wǎng)格平面上,映射后的線段與起點所在的網(wǎng)格的一邊相交;B2、判斷與映射后的線段相交的邊是否同時還是表示障礙物網(wǎng)格的邊,如果是,則起點與該后續(xù)的點不可以直線到達(dá);否則,創(chuàng)建從交點到該后續(xù)的點的向量,并將該向量映射到交點所在的網(wǎng)格平面上,映射后的線段與交點所在的網(wǎng)格的一邊相交,返回執(zhí)行本步驟,直至交點落在所述后續(xù)的點的網(wǎng)格上,則起點與所述后續(xù)的點可以直線到達(dá)。
以上所述網(wǎng)格可以為三角形網(wǎng)格。
從以上所述可以看到,本發(fā)明所提供的最優(yōu)路徑的尋徑方法具有以下有益效果通過對現(xiàn)有技術(shù)計算出的初始最短路徑進(jìn)行平滑化處理,用直線可達(dá)的路徑替換蜿蜒曲折的路徑,既體現(xiàn)出最短路徑的最優(yōu)性,又不會讓游戲用戶有蜿蜒前進(jìn)的不好體驗,提高用戶的使用積極性。
圖1是根據(jù)本發(fā)明尋找最優(yōu)路徑的流程圖;圖2是根據(jù)本發(fā)明在兩點之間做可視性測試的流程圖。
具體實施方式為了使本發(fā)明的優(yōu)點和特征更加清楚明白,下面參照附圖結(jié)合示例性實施例對本發(fā)明作進(jìn)一步詳細(xì)的說明。
以計算機(jī)三維游戲的場景中兩點之間的最優(yōu)路徑的尋徑方法為例,對本發(fā)明進(jìn)行詳細(xì)的描述。根據(jù)現(xiàn)有技術(shù)的方法得到的初始最短路徑?jīng)]有完全體現(xiàn)出最短路徑的最優(yōu)性,因為即使兩點之間是直線可達(dá)的,最短路徑仍然是蜿蜒曲折的,對此,本發(fā)明提出一種改進(jìn)方法,對現(xiàn)有技術(shù)計算出來的初始最短路徑做平滑處理,即用直線可達(dá)的路徑替換蜿蜒曲折的路徑,具體處理流程參見圖1,圖1是根據(jù)本發(fā)明尋找最優(yōu)路徑的流程圖,操作步驟如下
步驟101、建立場景的拓?fù)鋱D,采用現(xiàn)有的計算最短路徑的方法計算場景中指定兩點的初始最短路徑,并用初始最短路徑順序經(jīng)過的三角形網(wǎng)格的重心和重心之間的連線表示初始最短路徑的行走軌跡;在本實施例中,采用如下方法建立場景的拓?fù)鋱D。如上所述,場景中的任何一個點都可以看作位于組成場景的某個三角形網(wǎng)格中,由于作為基本網(wǎng)格的三角形網(wǎng)格很小,所以可以進(jìn)一步認(rèn)為任何一個點都可以位于三角形網(wǎng)格的重心上,并且以三角形網(wǎng)格重心的標(biāo)號作為三角形網(wǎng)格的標(biāo)號,所以首先找到組成場景的所有三角形網(wǎng)格的重心,將所有相鄰的三角形網(wǎng)格的重心用直線相連,并計算出所有相連的重心之間的直線距離,同時賦予這些直線距離以一定的權(quán)值,如此一來,就建立了帶有權(quán)值的由點和線組成的場景拓?fù)鋱D。接下來,在這樣一個三維場景的拓?fù)鋱D中,根據(jù)現(xiàn)有技術(shù)的算法,例如迪杰斯特拉Dijkstra算法,計算指定的兩點之間的初始最短距離。例如,計算從起點A出發(fā)到終點H結(jié)束的初始最短路徑,其中A和H都是三維坐標(biāo)系中三角形網(wǎng)格的重心標(biāo)號,并假設(shè)計算出的初始最短路徑從三角形網(wǎng)格的重心A開始順序經(jīng)過了三角形網(wǎng)格的重心B、C、D、E、F、G到達(dá)三角形網(wǎng)格的重心H,在拓?fù)鋱D中,這些三角形網(wǎng)格的重心順序地直線相連,于是初始最短路徑可以表示為A→B→C→D→E→F→G→H,其中B到G也都是初始最短路徑所經(jīng)過的各個三角形網(wǎng)格的重心標(biāo)號。
由于采用上述的方法沒有體現(xiàn)出最短路徑的最優(yōu)性,所以本發(fā)明繼續(xù)對上述的初始最短路徑做平滑化處理,即從起點開始依次向后續(xù)的點做可視性測試,找到起點可以直線到達(dá)的最遠(yuǎn)的點,以下是可視性測試即判斷兩點是否可以直線到達(dá)的步驟。
步驟102、判斷起點到起點后的第二點是否可視,如果是,執(zhí)行步驟104;否則,執(zhí)行步驟103;現(xiàn)有技術(shù)計算出來的最短路徑說明A→B一定是可以直線到達(dá)的,否則就不會有A到B的路徑了,所以本發(fā)明只要考慮A到C、D乃至D以后的各點是否都可視就可以了,如果都可視,說明最優(yōu)路徑可以不必曲折地經(jīng)過中間的各個重心的點,而直接到達(dá)終點。所以,首先判斷起點A到起點后的第二點C是否可視。
步驟103、將起點與第二點的前一點直線相連,在最短路徑上排除中間的各點,并將第二點的前一點作為起點,返回執(zhí)行步驟102;步驟104、判斷起點后的第二點是否是終點,如果是,執(zhí)行步驟106;否則,執(zhí)行步驟105;步驟105、起點后的第二點不是終點,那么將第二點后的下一點作為第二點,返回執(zhí)行步驟102;步驟106、起點后的第二點是終點,則將起點與起點后的第二點直線相連,輸出所有直線相連的最短路徑的標(biāo)號作為最優(yōu)路徑。
簡單地說,可視性測試也就是測試兩點之間是否直線可達(dá),如果兩點直線可達(dá),則說明兩點之間沒有障礙物,可以直接相連,也就是物體可以直接到達(dá),不用繞路;如果兩點之間直線不可達(dá),說明兩點之間有障礙物,物體不可以穿過障礙物直接到達(dá),需要繞過障礙物。例如,以最短路徑A→B→C→D→E→F→G→H為例說明上述可視性測試的步驟,從起點A開始向點C做可視性測試,A到C可視,則繼續(xù)做A到D的可視性測試,A到D不可視,則將A與D的前一點C直線相連,表示從A可以直接到C,不必經(jīng)過B,所以在最短路徑上排除B,然后從C開始依次向后續(xù)的D、E、F、G、H做可視性測試,并且可視性測試得出C到D、C到E、C到F、C到G都可視,C到H不可視,那么將C與G直線相連,在最短路徑上排除D、E、F,由于點H已經(jīng)是終點了,所以可以停止所有的可視性測試,將G與H直接相連,這時,用直線直接相連的路徑有A→C、C→G、G→H,所以經(jīng)過平滑化處理的最短路徑也就是最優(yōu)路徑為A→C→G→H。
以上描述了通過在兩點之間做可視性測試來平滑處理現(xiàn)有技術(shù)計算出來的初始最短路徑的操作流程。下面參見圖2描述本發(fā)明所采用的可視性測試的方法。
圖2是根據(jù)本發(fā)明在兩點之間做可視性測試的流程圖。具體地,從起點A到終點B的可視性測試可以采用如下方法步驟201、創(chuàng)建從起點A到終點B的一個向量;步驟202、將該向量映射到起點A所在的三角形網(wǎng)格的平面上,于是,在A所在的三角形網(wǎng)格上,該向量映射后的線段必然會與A所在的三角形網(wǎng)格的一條邊相交;步驟203、判斷映射后的線段與A所在的三角形網(wǎng)格相交的一邊的屬性,如果是邊界邊,說明A在朝著B的方向上首先與障礙物相鄰,A到B直線不可達(dá),二者不可視,退出當(dāng)前處理流程;否則,執(zhí)行步驟204;步驟204、映射后的線段與A所在的三角形網(wǎng)格相交的一邊是非邊界邊,則說明A朝著B的方向上沒有首先和障礙物相鄰,于是,判斷映射后的線段與A所在的三角形網(wǎng)格的一邊相交的交點是否位于終點B所在的三角形網(wǎng)格上,如果是,則說明A與B可視,退出當(dāng)前處理流程;否則,執(zhí)行步驟205;步驟205、將映射后的線段與A所在的三角形網(wǎng)格的一條邊相交的交點作為起點A,返回執(zhí)行步驟201。
采用上述的可視性測試方法,可以對初始最短路徑上的任意兩個點做可視性測試,以判斷兩個點是否直線可達(dá),從而實現(xiàn)對現(xiàn)有技術(shù)計算出來的初始最短路徑做平滑處理。
以上以計算機(jī)三維游戲中三角形網(wǎng)格的尋徑方法為例對本發(fā)明提供的最優(yōu)路徑的尋徑方法進(jìn)行了詳細(xì)的說明,然而,本發(fā)明所提供的方法不局限于三維游戲中的三角形網(wǎng)格,對于其它領(lǐng)域本發(fā)明提供的方法仍然適用。
以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種最優(yōu)路徑的尋徑方法,其特征在于,該方法包括A、建立場景的由點和線組成的拓?fù)鋱D,計算拓?fù)鋱D中指定的兩點之間的初始最短路徑,該初始最短路徑由順序經(jīng)過的點和線組成;B、依次判斷初始最短路徑上的起點到后續(xù)的點是否能直線到達(dá),直至查找到可以與起點直線到達(dá)的離起點最遠(yuǎn)的點,并判斷所述最遠(yuǎn)點是否是終點,如果不是,將所述最遠(yuǎn)點作為起點,返回執(zhí)行本步驟;否則,執(zhí)行步驟C;C、將指定的兩點之間能直線到達(dá)的所有的點順序地直線相連并作為最優(yōu)路徑輸出。
2.根據(jù)權(quán)利要求
1所述的方法,其特征在于,步驟A中所述建立場景的由點和線組成的拓?fù)鋱D中的場景為計算機(jī)二維或三維游戲中的網(wǎng)格。
3.根據(jù)權(quán)利要求
2所述的方法,其特征在于,步驟A中所述建立場景的由點和線組成的拓?fù)鋱D包括將所有網(wǎng)格的重心作為拓?fù)鋱D中的點,將相鄰網(wǎng)格的重心直線相連作為拓?fù)鋱D中的線,計算相鄰的兩個重心之間的直線距離,并賦予相連的兩個重心之間的直線距離以一定的權(quán)值。
4.根據(jù)權(quán)利要求
3所述的方法,其特征在于,步驟A中所述計算拓?fù)鋱D中指定的兩點之間的初始最短路徑包括根據(jù)拓?fù)鋱D中的直線距離和所賦予的直線距離的權(quán)值,采用A星算法、迪杰斯特拉Dijkstra算法或弗洛伊德Floyd算法計算拓?fù)鋱D中指定的兩點之間的初始最短路徑。
5.根據(jù)權(quán)利要求
2所述的方法,其特征在于,步驟B中所述判斷起點到后續(xù)的點是否能直線可達(dá)包括B1、創(chuàng)建從起點到后續(xù)的點的向量,并將該向量映射到起點所在的網(wǎng)格平面上,映射后的線段與起點所在的網(wǎng)格的一邊相交;B2、判斷與映射后的線段相交的邊是否同時還是表示障礙物網(wǎng)格的邊,如果是,則起點與該后續(xù)的點不可以直線到達(dá);否則,創(chuàng)建從交點到該后續(xù)的點的向量,并將該向量映射到交點所在的網(wǎng)格平面上,映射后的線段與交點所在的網(wǎng)格的一邊相交,返回執(zhí)行本步驟,直至交點落在所述后續(xù)的點的網(wǎng)格上,則起點與所述后續(xù)的點可以直線到達(dá)。
6.根據(jù)權(quán)利要求
2至5中的任意一項所述的方法,其特征在于,所述網(wǎng)格為三角形網(wǎng)格。
專利摘要
本發(fā)明公開一種最優(yōu)路徑的尋徑方法。該方法包括建立場景的由點和線組成的拓?fù)鋱D,計算拓?fù)鋱D中指定的兩點之間的初始最短路徑,該初始最短路徑由順序經(jīng)過的點和線組成;依次判斷初始最短路徑上的起點到后續(xù)的點是否能直線到達(dá),直至查找到可以與起點直線到達(dá)的離起點最遠(yuǎn)的點,并判斷最遠(yuǎn)點是否是終點,如果不是,將最遠(yuǎn)點作為起點,返回執(zhí)行本步驟;否則,將指定的兩點之間能直線到達(dá)的所有的點順序地直線相連并作為最優(yōu)路徑輸出。本發(fā)明提供的方法可以對現(xiàn)有技術(shù)計算出的最短路徑進(jìn)行平滑處理,用直線可達(dá)的路徑替換蜿蜒曲折的路徑,既體現(xiàn)出最短路徑的最優(yōu)性,又不會讓游戲用戶有蜿蜒前進(jìn)的不好體驗,提高用戶的使用積極性。
文檔編號G06F19/00GK1996320SQ200610000313
公開日2007年7月11日 申請日期2006年1月4日
發(fā)明者王麒 申請人:騰訊科技(深圳)有限公司導(dǎo)出引文BiBTeX, EndNote, RefMan