例如,如果我有5 x 5网格,并且我有位置13.我想找到每个方向上的每个边缘的绝对距离,不包括对角线。所以从13到左边是3,右边是1,到底部是2,到顶部是2。我怎么接近这个?
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
答案 0 :(得分:2)
距离顶部的距离是行,
int row = (int)(13/5); // 2
距离左边的距离是列,将剩下的13乘以5。
int col = (int)(13%5); // 3
距右侧的距离是列减去总列数(5)
int colFromRight = 5-col-1; // 1
距离底部的距离是行减去总行数(5)
int rowFromBottom = 5-row-1; // 2
修改强>
可能会有所帮助
这是一个我们想要视为二维数组的一维数组。它有2行3列,总共6个元素。在我们的程序中,它是一个像这样的1d数组,我使用方括号[]看起来不是语法。
[1][2][3][4][5][6]
在视觉上它会像这样
[1][2][3]
[4][5][6]
因此,为了获得说明位置5的行,我们说
int location = 5;
int row = floor(location/3);
正如您所看到的那样,每次行变为1 + 3的倍数时,行数将会增加。
<小时/> 对于列,它是相同的,但有余数。
int location = 5;
int column = location%3;
每次当位置达到3时,余数返回0并且列重新开始(基本表示新行)。
答案 1 :(得分:1)
将其视为一维数组并使用模数,除法和减法。
row_length = 5
col_length = 5
index = 13
x = (index % row_length);
y = (index - x) / col_length;
distance from left edge = row_length - x
distance from bottom = col_length - y
编辑2:修正了减法以找到左/下边缘。