線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2478
推到 Plurk!
推到 Facebook!

A* 最短路徑演算法實作 (用 BinaryHeap + 先配置全地圖 nodes 來加速)

 
Skyer
高階會員


發表:43
回覆:111
積分:120
註冊:2002-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-11 04:38:34 IP:61.219.xxx.xxx 未訂閱
這是我在寫外掛 XD 時研究的.. 從一開始 300X300 找路要 10 分鐘到後來1000X1000 的地圖,大概 2 秒可求出路徑.    // A* 演算法 // 使用方法: // findpath = AStart.Create(nil); // findpath.FindPath(START, END, MapSize, Map array); // for i:=0 to findpath.PathCount-1 do begin //   findpath.Path[i].X, findpath.Path[i].Y // end;    這裡的 Map array 是把 2 維接成 1 維 START, END = Y * width + X    例
地圖是        Map array 就變成這樣
3X3
1 2 3         1 2 3 4 5 6 7 8 9
4 5 6    ==>
7 8 9
附圖 -- Regards, Skyer 發表人 - Skyer 於 2005/08/11 04:39:43
------
--
Regards,
Skyer
附加檔案:76582_AStart.zip
yn1016
一般會員


發表:2
回覆:3
積分:1
註冊:2004-02-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-13 11:19:27 IP:220.135.xxx.xxx 未訂閱
請問一下 ...這個 Library 可以用在 VC 中嗎 ? ....可以的話...有範例可以參考嗎 ?
yn1016
一般會員


發表:2
回覆:3
積分:1
註冊:2004-02-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-13 11:20:43 IP:220.135.xxx.xxx 未訂閱
引言: Sorry ....打錯篇了 ....
x803198
一般會員


發表:8
回覆:28
積分:17
註冊:2002-12-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-18 14:49:33 IP:211.76.xxx.xxx 未訂閱
請問障礙點資料值大小應該什麼 我怎麼測都會穿過障礙 if (subnode = nil) or (FMap[subnode.Point.Y * bound.X subnode.Point.X] = 0) then Continue; 該不會是0吧 程式是一條不歸路
Skyer
高階會員


發表:43
回覆:111
積分:120
註冊:2002-04-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-18 21:46:50 IP:61.219.xxx.xxx 未訂閱
Bingo! 0 就是障礙物.. 我的 A* 沒設計 Priority (像道路要比沙地優先選擇) 所以 0 是障礙物, 非 0 的就是路 FMap[subnode.Point.Y * bound.X subnode.Point.X] FMap 裡就是線性坐標 Y * Width X -- Regards, Skyer
------
--
Regards,
Skyer
系統時間:2024-06-24 21:16:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!