java-homeworks/multidimensional-array/2.2.1 at master · netology-code/java-homeworks

Задача 1. Поворот матрицы на 90 градусов по часовой стрелке

Описание

Научимся поворачивать матрицу с равными сторонами. Этот алгоритм мог бы быть использован в графических редакторах вроде Photoshop для поворота изображений.

Дано: двумерная матрица 8 на 8 из случайных чисел от 0 до 255 (спектр цветов GrayScale). Напишите алгоритм "поворота" такой матрицы на 90 градусов по часовой стрелке.

Функционал программы

  1. Создание матрицы в программе;
  2. Вывод матрицы до поворота;
  3. Разворот матрицы;
  4. Вывод матрицы после поворота на 90 градусов.
  5. Вывод должен быть вынесен в отдельный метод, с помощью которого будут выведены и исходная, и перевёрнутая матрицы

Пример

Дана следующая матрица:

114 112 148  83 204  22 125  31
192 231 245 128  63 246 139  17
 61 128 224  45  91  57 239  34
219 237 167 191 236 146 144 117
 35 199 102 124 208 195  21 147
 52 229 126  32  24 145  19  39
107  43 190  43  47 172  18  19
 62 221   6 208 241 198 187  85

Вывод:

 62 107  52  35 219  61 192 114
221  43 229 199 237 128 231 112
  6 190 126 102 167 224 245 148
208  43  32 124 191  45 128  83
241  47  24 208 236  91  63 204
198 172 145 195 146  57 246  22
187  18  19  21 144 239 139 125
 85  19  39 147 117  34  17  31

Пример реализации

  1. Итак, у нас есть матрица с размерами 8x8, которую нужно повернуть на 90 градусов по часовой стрелке. Для начала создадим матрицу (размерность матрицы сохраним в переменной filedSize).
      int SIZE = 8;
      int[][] colors = new int[SIZE][SIZE];
  2. Теперь заполним матрицу случайными значениями в диапазоне от 0 до 255:
      Random random = new Random();
      for (int i = 0; i< SIZE; i++) {
        for (int j = 0; j< SIZE; j++) {
        // для случайных значений воспользуемся готовым решением из библиотеки java.util.Random
          colors[i][j] = random.nextInt(256);
        }
      }
  3. Выводим матрицу на экран (оформите это в виде отдельного метода):
      for (int i = 0; i< SIZE; i++) {
        for (int j = 0; j< SIZE; j++) {
          // %4d означает, что мы под каждый номер резервируем 4 знака
          // (незанятые будут заполнены пробелами)
          // таким образом, у нас получится ровная таблица
          System.out.format("%4d", colors[i][j]);
        }
        // Переход на следующую строку
        System.out.println();
      }
  4. Для повернутой матрицы создадим пустой массив той же размерности:
      int[][] rotatedColors = new int[SIZE][SIZE];
  5. Новая матрица должна принять значения ячеек первой матрицы, но с поворотом на 90 градусов по часовой стрелке. Это значит, что значение первой ячейки rotatedColors[0][0] (первая строка, первое значение) новой матрицы должно быть равно первому значению ячейки последней строки матрицы colors (colors[SIZE-1][0]).
  6. Исходя из вышесказанного нужно:
  • написать циклы, при помощи которых можно пробежаться по матрицам,
  • каждому элементу новой матрицы rotatedColors присвоить соответствующее значение из имеющейся colors матрицы.

Перебор элементов матрицы можно организовать встроенными циклами так же, как вы вывели значения на экран colors матрицы.

Задача 1*. Поворот матрицы на 90/180/270 градусов

Добавьте в задачу #1 возможность вводить угол поворота (кратный 90) с клавиатуры.