Как повернуть матрицу на 90 градусов c
Регистрация: 16.03.2011
Сообщений: 5
Поворот матрицы на 90 градусов. Что не так?
Здравствуйте. Скажите пожалуйста, что не так. ошибку выдает, ссылаясь на строчку randomize().
Задание: Заполнить матрицу случайными числами. Развернуть матрицу на 90 градусов по часовой стрелке
#include #include #define r 9 int Matr1[r][r]; /* матрица1 */ int Matr2[r][r]; /* матрица2 */ int main(void) < short i, j; /* индексы */ /* заполнение матрицы случайными числами */ randomize(); /* инициализация rand */ for (i=0; i
| Nice_nastya |
| Посмотреть профиль |
| Найти ещё сообщения от Nice_nastya |
MrMurder / MatrixRotation
Clone via HTTPS Clone with Git or checkout with SVN using the repository’s web address.
Learn more about clone URLs
Повернуть матрицу на 90 (180, 270) градусов против часовой стрелки
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| public class MatrixRotation |
| static void createMatrix(int[][] a) |
| for (int i = 0; i < a.length; i++) |
| for (int j = 0; j < a.length; j++) |
| System.out.print(a[i][j] + " "); |
| > |
| System.out.println(); |
| > |
| System.out.println(); |
| > |
| static void rotateM270(int[][] a) |
| int[][] b = new int[a.length][a.length]; |
| for (int i = 0; i < b.length; i++) |
| for (int j = 0; j < b.length; j++) |
| b[i][j] = a[j][a.length - i - 1]; |
| > |
| > |
| System.out.println("Rotating by 270 degree"); |
| createMatrix(b); |
| > |
| static void rotateM90(int[][] a) |
| int[][] b = new int[a.length][a.length]; |
| for (int i = 0; i < b.length; i++) |
| for (int j = 0; j < b.length; j++) |
| b[j][i] = a[a.length - i - 1][j]; |
| > |
| > |
| System.out.println("This matrix is rotated by 90 degree:"); |
| createMatrix(b); |
| > |
| static void rotateM180(int[][] a) |
| int[][] b = new int[a.length][a.length]; |
| for (int i = 0; i < b.length; i++) |
| for (int j = 0; j < b.length; j++) |
| b[j][i] = a[a.length - j - 1][a.length - i - 1]; |
| > |
| > |
| System.out.println("This matrix is rotated by 180 degree:"); |
| createMatrix(b); |
| > |
| public static void main(String[] args) |
| int[][] a = , , >; |
| System.out.println("Original matrix:"); |
| createMatrix(a); |
| rotateM270(a); |
| rotateM90(a); |
| rotateM180(a); |
| > |
| > |
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Как повернуть матрицу на 90 градусов c
БлогNot. С++: поворот матрицы
С++: поворот матрицы
Любопытная задача - не транспонировать, а именно повернуть на 90, 180 или 270 градусов матрицу.
Если результаты перестановки писать в новую матрицу, задач тривиальна. Достаточно иметь функцию вращения матрицы на 90 градусов (например, по часовой стрелке), вызываемую нужное число раз. В примере квадратная матрица "вращается" четырежды, возвращаясь, в итоге, "на место". Для неквадратной матрицы изменятся лишь границы циклов и выделение памяти.
#include int ** turn90 (int n, int **a) < int i,j; int **b; b = new int * [n]; for (i=0; ireturn b; > void out (char *s, int n, int **a) < int i,j; printf ("\n%s",s); for (i=0; i> int main ()Вывод этой программы:
Before 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 After 1 21 16 11 6 1 22 17 12 7 2 23 18 13 8 3 24 19 14 9 4 25 20 15 10 5 After 2 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 After 3 5 10 15 20 25 4 9 14 19 24 3 8 13 18 23 2 7 12 17 22 1 6 11 16 21 After 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Вращение матрицы "на месте" осуществить посложнее, но тоже возможно. В этом случае задача имеет смысл лишь для квадратной матрицы (иначе будет задача 1, с выделением памяти под новую матрицу - ведь часть элементов могут попасть "в никуда").
Напишем пару функций для вращения матрицы по и против часовой стрелки на 90 градусов:
#include int **turn90_clockwise (int n, int **a) < int i,j,b; for (i=0;ireturn a; > int **turn90_counterclockwise (int n, int **a) < int i,j,b; for (i=0;ireturn a; > void out (char *s, int n, int **a) < int i,j; printf ("\n%s",s); for (i=0; i> int main ()
Вывод этой программы:
Before 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 After turn90_clockwise 21 16 11 6 1 22 17 12 7 2 23 18 13 8 3 24 19 14 9 4 25 20 15 10 5 After turn90_counterclockwise 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
19.11.2013, 23:01 [27574 просмотра]
Как повернуть матрицу на 90 градусов?
Градиент идет сверху вниз, т.е. изображение вертикальное. Как изменить алгоритм, чтобы он строил горизонтальное изображение (градиент слева направо) ? Я менял местами в циклах height и width, но это не помогло.
- Вопрос задан более трёх лет назад
- 200 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 1

Если я правильно понимаю, конструкция во вложении цикле
fill(.
заполняет всю строку заданным значением. Вот ее и надо заменить на заполнение столбца. Наверное, понадобится еще один вложенный цикл,, чтобы пройти по всем строкам, и записать в заданную ячейку значение.
Должно получиться что-то типа такого:
vector> make_gradient(int height, int width)
assert(height > 0 && width > 0);
int cf = width / 255;
int color = 0;
vector> result(height, vector(width));
for (int i = 0; i < height ; i += cf)
for (int j = 0; j < cf; ++j)
for (Int z =0, z < width, z++)
result[z][i+j] = color % 255:
>
>
color++;
>
stable_sort(result.begin(), result.end());
return result;
>
int main(int argc, char *argv[])
ofstream file;
Надеюсь, нигде не ошибся с координатами 🙂
