2011-09-12 38 views
18

我們有一個六角形latice的最佳方式:什麼是代表六角latice

_ _ _ 
/\_/ \_/ \_ 
\_/ \_/ \_/ \ 
/\_/ \_/ \_/ 
\_/ \_/ \_/ 

什麼是2維數組或任何

+0

您有興趣節點或領域? –

+2

你想要代表什麼?一個無限的格子?一個矩形的有限格嗎?頂點數據?數據的邊緣? –

+4

查看[A Slanted Hexagon](http://ferkeltongs.livejournal.com/31455.html)和[Amit關於網格的想法](http://www-cs-students.stanford.edu/~amitp/game-programming/grids /) –

回答

12

來表示它代表一個最簡單的方法的最佳途徑與2D陣列六角格是偏斜的軸:不吉利的東西的每行是由比前一個更半步偏移。不要緊,每個行是否偏移向前或向後,只要你態度一致;下面,每個連續的行偏移半六角前鋒:

(0,0) (0,1) (0,2) (0,3) (0,4) 

    (1,0) (1,1) (1,2) (1,3) (1,4) 

     (2,0) (2,1) (2,2) (2,3) (2,4) 

     (3,0) (3,1) (3,2) (3,3) (3,4) 

這是很容易確定任何給定的十六進制的最近鄰居:在上述情況下,對於給定陣列地址(r,s),您有:

(r-1, s) 
(r-1, s+1) 
(r, s-1) 
(r, s+1) 
(r+1, s-1) 
(r+1, s) 

另外請注意,拉絲位置是簡單的:十六進制以上(r,s)的中心是在屏幕的位置:

x= dx * (s + 0.5*r) 
y= dy * r 

作爲替代方案,可以通過半絕對六角偏移交替行。這會給你一個給定陣列的多個矩形形狀,但確定圖紙的位置,然後最近的鄰居將分別需要兩個的情況下,奇數和偶數行。

還有其他可用的座標系統,但他們不太方便,比較模糊......


由於OP想要更多,我會添加一個鏈接到我最喜歡晦澀的十六進制索引系統:一個"spiral honeycomb mosaic"。該應用基礎七個系統索引十六進制位置逐漸變大的「超級六邊形」的羣體,如下所示(請注意,它被標記爲基地-7,不根據十):

7 elements:    49 elements: 

    2 3 
          22 23 
1 0 4 --> 
        12 13 21 20 24 
    6 5 
       11 10 14 26 25 32 33 

        16 15 02 03 31 30 34 --> [3 base-7 digits 
                -> 343 elements...] 
       62 63 01 00 04 36 35 

       61 60 64 06 05 42 43 

       66 65 52 53 41 40 44 

         51 50 54 46 45 

         56 55 

的鏈接有一些代碼用於處理該座標系統中,但我還沒有真正嘗試評估它....

+0

你的解決方案實際上並不代表答案中顯示的格子 - 它旋轉了90度。問題的格不具有直接水平的鄰居,但具有垂直的鄰居。 –

+0

@andrew cooke:真的嗎?我們今天感覺有點挑剔? :-)在ascii中繪製圖片可能更容易。人們當然可以交換r和s的角色並翻轉圖片... – phkahler

+0

我在想r = rows和s = skewed-columns;無論如何,C風格的數組約定通常是A [row] [column]。當然,正如phkahler說的,你可以畫出它,但是你喜歡... – comingstorm

2

2D陣列是使用細行2 = 1米十六進制的高度,和1列= 1米六角寬度。

4,1,5,2,6,3 
4,7,5,8,6,9 
A,7,B,8,C,9 
A,D,B,E,C,F 
  • 每對數字是十六進制1瓦。
  • 找到12點和6點只是一個+ -Y,直到你在不同的瓷磚
  • 發現2與4點鐘
    • 檢查Y + 1是相同的瓷磚
      • 如果是,2點是X + 1 & 4點是X + 1,Y + 1
      • 如果不是,2點是X + 1,Y-1 & 4點時鐘是X + 1
+0

謝謝!這非常不尋常! – Eugeny89

+0

考慮這種模式的另一種方法是:取一個正方形格子,並根據奇偶性降低一半座標(例如,只接受/使用那些座標((x,y)',使得x + y是偶數)。當然,你不想浪費一半你的數組條目 - 因此,@ LastCoder的安排上面。 – comingstorm

3

有四種不同的方式來表示的回憶hextile:

enter image description here