我有一個瓷磚網格,每個瓷磚都有坐標,例如 (-3, 5) 或 (1, 540) 我想為每個瓷磚生成一個唯一的種子,但我還沒有找到這樣做的方法
uj5u.com熱心網友回復:
您需要某種“配對函式” - Wiki為自然數描述了此類函式,而您需要包括負數在內的整數。
您可以以螺旋方式列舉坐標平面上的所有整數點
^ OY
|
16 15 14 13 12
17 4 3 2 11
18 5 0 1 10 ==> OX
19 6 7 8 9
20 21 22 23 24
因此,例如,點的-2,-2索引為 20
要從坐標計算此類索引,您可以使用簡單的演算法(詳情請點擊此處)
if y * y >= x * x then begin
p := 4 * y * y - y - x;
if y < x then
p := p - 2 * (y - x)
end
else begin
p := 4 * x * x - y - x;
if y < x then
p := p 2 *(y - x)
end;
你不要求反向映射,但絕對有可能(層數是(1 floor(sqrt(p))) / 2等等)
完成:反向映射的Python函式
def ptoxy(p):
layer = (int(math.sqrt(p)) 1) // 2 # integer division
topleft = 4*layer*layer
if p <= topleft:
if p <= topleft - 2 * layer:
return [layer, 3*layer p - topleft]
else:
return [-layer topleft - p, layer]
else:
if p >= topleft 2 * layer:
return [p-topleft - 3*layer, -layer]
else:
return [-layer, layer-p topleft]
并鏈接到快速測驗
uj5u.com熱心網友回復:
如果您有一個瓷磚網格,您可能會認為您在左上角有第一個瓷磚,在右下角有最后一個瓷磚。
[0] [1] [2]
[3] [4] [5]
[6] [7] [8]
但[Row:Col]符號更方便。
[0:0] [0:1] [0:2]
[1:0] [1:1] [1:2]
[2:0] [2:1] [2:2]
因此,您可以使用[Row:Col]以下公式訪問元素:
ColunmCount = 3
Element = (Row * ColunmCount) Col
例如(2:1),您的網格中的偏移量是2*3 1which is 7。
[0:0] [0:1] [0:2]
[1:0] [1:1] [1:2]
[2:0] [2:1] [2:2]
--v--
2*3 1 = 7
這很簡單,每個磁貼都有一個唯一的識別符號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/396027.html
