现在我有一个C矩阵网格[n] [n],将板看成完美地覆盖了at by t的图块网格(即t除以n,每个图块包含n / t x n / t个像元) :
例如,这是一个8 * 8的矩阵,由2 * 2的瓷砖网格覆盖,每个瓷砖具有4 * 4的元素:
样本矩阵:
这是一个16 * 16的矩阵,由2 * 2的瓷砖网格覆盖,每个瓷砖都有8 * 8的元素:
样本矩阵2:
int ** grid;
grid0 = malloc(N * N * sizeof(int));
grid = malloc(N * sizeof(int *));
for (i = 0; i < N; i++)
grid[i] = &grid0[i * N];
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
grid[i][j] = 0;
现在,我想分别获取每个图块,例如位置[0] [0]上的图块。但是我不知道如何编写计算部分。我看到了类似的问题,但结果存储在一维数组中,
答案 0 :(得分:0)
首先,我将其简化。
注意:calloc
的作用与malloc相同,但是它用0个字节填充了数组。
int i;
int** grid;
grid = (int**) calloc(N, sizeof(int *));
for (i = 0; i < N; i++)
grid[i] = (int*) calloc(N, sizeof(int));
然后,由于磁贴是虚拟的,因此您无法生成新矩阵,只能使用由您控制的索引在其中移动。 要获取任何图块的坐标,我将编写如下函数:
void get_tile(int index_x, int index_y, int tile_dim, int matrix_dim, int* base_x, int* base_y){
if(tile_dim == 0)
return;
int new_dim = matrix_dim / tile_dim;
*base_x = index_x * new_dim ;
*base_y = index_y * new_dim ;
}
因此,在base_x
和base_y
中,该函数将返回新的基本坐标,您将不得不使用该新的基本坐标在图块中移动。
请记住,新的基本坐标将以dim = old_dim / tile_dim;驻留在新矩阵中。