三角形/六邊形網格A *繼使用this question作爲新問題的基礎的我也有一個問題,我期待爲完美地解決儘可能明顯的傳統:實現與負座標
我有實現六方地圖這樣:
(想在這裏插入圖片..但我不會因爲允許被新......請參見上面的鏈接)
但我現在想知道如何(優雅)用這些類型的座標爲這種類型的地圖實現A *。 我有在典型的平方網格(我認爲是笛卡爾網格)上使用A *的經驗,而我在那裏處理它的方式似乎與這個座標系統不兼容。
通常我會生成一個二維字節數組。數組的索引將對應於網格座標,並且所述索引處的值將給出該節點的「權重」。 (0無法通過,數字越大,稱重越大,數字越小)。
實施例: sbyte[,] pathGrid = new sbyte[5, 5] { {0,0,1,0,0}, {9,5,1,3,0}, {9,5,1,3,0}, {9,5,1,3,0}, {0,0,1,0,0} };
凡0的將是無法通行,則1的將是容易橫過,以及更高的數字將「成本」更遍歷。 (抱歉格式化..我是一個堆棧溢出newb:P) 這個數組將根據我的地圖的組成生成,然後饋送到我的路徑查找算法,這反過來會吐出一個節點列表(路徑),如果找不到路徑,則返回null。
但是,使用這種類型的網格,這是不可能的(至少乍一看)由於負座標(顯然不在數組中)和網格不遵循相同的事實規則作爲「典型」網格。
有辦法解決這個用我的A *方法,我認爲,但他們都比較草率(轉換網格座標和使用空節點)如果有人已經想到了一個辦法能夠完美做到這一點我想知道。閱讀在任何情況下:)
感謝(順便說一句,我在C#/這樣做。對於它的價值網)
通過給所有座標值添加一個常量,可以輕鬆地克服負座標問題,將它們轉移到非負區域。將問題視爲一個二維網格看起來就像是一個非常簡單的方法,即使你必須在這裏或那裏轉換一些座標。 – 2011-05-08 23:30:55
一個很好的座標系可以是「環號」,「單元號」,其中環號從中心六邊形上升,並且單元號從一個點開始並且順時針(或者逆時針,並不重要)工作。每個「環」中的小區數目是2n *(2n-1)/ 2,其中n是環索引的1個數目。不知道如何真正在這個系統中做A *,但我不認爲它很難,也沒有浪費的細胞。它也很容易確定鄰接關係。 – soandos 2011-05-08 23:38:37