Разделите матрицу C (указатель на указатель) на t на t сетку тайлов - PullRequest
0 голосов
/ 24 марта 2019

Теперь у меня есть матрица C-матрицы [n] [n], которая рассматривает доску как идеально перекрытую сеткой плиток at by t (т. Е. T делит n, а каждая плитка содержит n / t на n / t ячеек) :

Например, это матрица 8 * 8, покрытая сеткой 2 * 2 плиток, каждая плитка имеет 4 * 4 элемента:

Пример матрицы:

enter image description here

И это матрица 16 * 16, покрытая сеткой 2 * 2 плиток, каждая плитка имеет 8 * 8 элементов:

Пример матрицы 2:

enter image description here

  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]. Но я не знаю, как написать расчетную часть. Я видел похожий вопрос, но результат сохраняется в одномерном массиве,

1 Ответ

0 голосов
/ 24 марта 2019

Начнем с того, что я немного упрощаю.

Примечание: 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;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...