簡體   English   中英

什么是代表六角形的最佳方法

[英]what is the best way to represent hexagonal latice

我們有一個六角形的latice:

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

用二維數組或其他什么來表示它的最佳方法是什么

使用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需要更多,我將添加一個鏈接到我最喜歡的模糊十六進制索引系統:一個“螺旋蜂窩馬賽克” 這使用基數為7的系統來連續索引更大的“超六邊形”十六進制位置組,如下所示(注意它標記在base-7中,而不是base-ten):

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

該鏈接有一些處理這個坐標系的代碼,但我還沒有真正嘗試過評估它....

使用2行= 1個十六進制高度,1列= 1個十六進制寬度,2d數組很好。

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

請注意,有四種不同的方式來表示六邊形網格。 我花了很多時間尋找解決方案,無法將其與另一個相匹配。 然后我意識到,有4種不同的方法來構建和表示晶格。 因此,在選擇一個時,請確保您嘗試使用的格式。 四種格式如下:

在此輸入圖像描述 圖片來自: https//www.redblobgames.com/grids/hexagons/#conversions

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM