簡體   English   中英

六邊形網格中螺旋坐標和軸坐標之間的轉換

[英]Convert between spiral coordinates and axial coordinates in hexagon grid

我正在制作一個基於六邊形瓷磚的游戲,它會生成螺旋形六邊形的蜂窩狀排列。 我的目標是將世界 position(例如鼠標單擊)轉換為螺旋坐標(索引/層/position 周圍層)。 我想不出該怎么做,所以我一直在尋求通過首先轉換為軸坐標或從軸坐標轉換來簡化問題。 如何才能做到這一點?

我的配置是尖頂的,如下所示:螺旋坐標圖層/位置

這是螺旋指數:螺旋坐標指數

軸向坐標供參考:

軸向坐標

我已經有了這些螺旋坐標方程:

const Layer = (index: number): number => {
    return Math.floor((3 + Math.sqrt(12 * index - 3)) / 6);
}
const Position = (index: number, layer: number): number => {
    return index - 3 * layer * (layer - 1) - 1;
}
const Index = (layer: number, position: number): number => {
    return 3 * layer * (layer - 1) + 1 + position;
}

您可以按以下方式檢查個別情況。 這里L是layer, P是position, (x, y)是軸向坐標; 坐標與您的圖像一致。

(L, P)(x, y)

if L == 0:
   return (0,0)

otherwise:
k = floor(P/L) mod 6
j = P mod L

k   x     y     z
-------------------
0   j     L-j   -L
1   L     -j    j-L
2   L-j   -L    j
3   -j    j-L   L
4   -L    j     L-j
5   j-L   L     -j

(x, y)(L, P)

z = -x-y
L = max(abs(x), abs(y), abs(z))

  x    y    z       P
------------------------
>=0  >=0              x
      <0   <0     L - y
>=0       >=0    2L + z
 <0   <0         3L - x
     >=0  >=0    4L + y
 <0        <0    5L - z

免責聲明:我沒有測試這個。

您也可以通過利用對稱性來折疊某些情況,但直接對這些情況進行編碼可能會更容易,盡管有點冗長。

您已經在(L, P)和螺旋線之間將函數編碼為 go。

暫無
暫無

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

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