如何推导关联X、Y与gridSize的菱形网格Grid3索引公式?
菱形网格索引公式推导
现有两个5×5菱形网格(gridSize=5),分别对应Y值(Grid1)和X值(Grid2),需要推导关联X、Y和gridSize的公式,得到目标网格Grid3的连续索引值。
已知网格数据
Grid1(对应Y值)
0 1 1 2 2 2 3 3 3 3 4 4 4 4 4 5 5 5 5 6 6 6 7 7 8
Grid2(对应X值)
0 0 1 0 1 2 0 1 2 3 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0
目标Grid3(索引值)
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
公式推导
首先明确几个基础规律:
- 菱形网格的总行数为
2*gridSize - 1(如gridSize=5时共9行) - 每行的元素数量:当
Y < gridSize时,元素数为Y+1;当Y >= gridSize时,元素数为2*gridSize - Y -1 - 总索引范围为
0 ~ gridSize² -1(如gridSize=5时共25个索引,0到24)
分情况计算索引
根据Y值所在的区域,分两种情况推导公式:
情况1:0 ≤ Y < gridSize(上半部分含中间行)
此区域内,第Y行的起始索引为前Y行所有元素的总和(前0行总和为0,前1行总和为1,以此类推),公式为:
起始索引 = Y * (Y + 1) / 2
最终索引为起始索引加上当前行的X值:
Grid3索引 = Y*(Y+1)/2 + X
验证(gridSize=5):
- Y=0,X=0:
0*(0+1)/2 +0=0,符合Grid3的00 - Y=4,X=3:
4*(4+1)/2 +3=10+3=13,符合Grid3的13
情况2:gridSize ≤ Y ≤ 2*gridSize -2(下半部分)
先计算offset = Y - gridSize(表示Y距离中间行下方的偏移量),前gridSize行(上半部分含中间行)的总元素数为gridSize*(gridSize+1)/2,再加上偏移区域内的元素总和,得到当前行的起始索引:
起始索引 = [gridSize*(gridSize+1) + offset*(2*gridSize -1 - offset)] / 2
最终索引为起始索引加上当前行的X值:
Grid3索引 = [gridSize*(gridSize+1) + offset*(2*gridSize -1 - offset)]/2 + X
其中offset = Y - gridSize
验证(gridSize=5):
- Y=5,offset=0,X=2:
[5*6 +0*(10-1-0)]/2 +2=15+2=17,符合Grid3的17 - Y=7,offset=2,X=1:
[5*6 +2*(10-1-2)]/2 +1=(30+14)/2 +1=22+1=23,符合Grid3的23
内容的提问来源于stack exchange,提问作者Kavin-K
相关产品推荐
相关产品推荐

