行序交替时,如何将网格编号转换为坐标?
网格编号转坐标的公式推导
给定示例网格(行数
rows=3,列数cols=3):7|8|9 6|5|4 1|2|3编号与坐标
(x,y)的映射规则:
y从下到上递增(最下方行y=1,最上方行y=cols)- 奇数
y列:x从左到右递增- 偶数
y列:x从右到左递减
以下是通用推导公式,输入参数为:n(目标编号)、rows(网格总行数)、cols(网格总列数):
步骤1:计算y坐标
y表示编号所在的列(从下往上数),公式:
y = ((n - 1) // rows) + 1
说明:每列包含rows个编号,用整数除法得到列的0起始索引,加1转为1起始的y值。
步骤2:计算编号在当前列内的位置
得到y后,算出n在当前列的相对位置(从下往上数,起始为1):
pos_in_col = n - (y - 1) * rows
步骤3:计算x坐标
根据y的奇偶性确定x的方向:
- 若
y为奇数:x与列内位置一致(左到右递增)x = pos_in_col - 若
y为偶数:x反向取值(右到左递减)x = rows - pos_in_col + 1
验证示例(rows=3, cols=3)
n=4:y=((4-1)//3)+1=2(偶数),pos_in_col=4-3=1→x=3-1+1=3→ 坐标(3,2)✔️n=6:y=2(偶数),pos_in_col=6-3=3→x=3-3+1=1→ 坐标(1,2)✔️n=7:y=((7-1)//3)+1=3(奇数),pos_in_col=7-6=1→x=1→ 坐标(1,3)✔️
内容的提问来源于stack exchange,提问作者mendelian22
相关产品推荐
相关产品推荐

