Другие языки программирования и технологии

Как повернуть матрицу на 90 градусов с++?

из инэта копи пэйст могу сделать, но не могу понять как это работает ...может кто нить написать формулу и объяснить как повернуть матрицу 3х3 на 90 градусов.... вот объяснить как это работает ..
#include <iostream>
using namespace std;
void print(const int* vec, const size_t n) {
for (size_t i = 0; i < n; ++i) cout << ' ' << vec[i];
cout.put('\n');
}
int main() {
const size_t n = 3;
int matrix[n][n] = {
{ 1, 1, 1 },
{ 2, 2, 2 },
{ 3, 3, 3 }
};
for (const auto &row : matrix) print(row, n);
cout.put('\n');
// Ставите строкой ниже точку останова и любуетесь чудесами в отладчике
const auto mid = n / 2;
for (size_t i = 0; i < mid; ++i) {
const auto last = n - i - 1;
for (size_t j = 0; j < last; ++j) {
const auto pos = n - j - 1;
const auto tmp = matrix[i][j];
matrix[i][j] = matrix[pos][i];
matrix[pos][i] = matrix[last][pos];
matrix[last][pos] = matrix[j][last];
matrix[j][last] = tmp;
}
}
for (const auto &row : matrix) print(row, n);
cout.put('\n');
system("pause");
}
Канат Карагойшин
Канат Карагойшин
85 474
Лучший ответ
Николай Пастухов const auto mid = n / 2; вот зачем n надо делить на 2 ?
думаю, надо создать временную матрицу, копию данной.

построчно брать данные из временной, и записывать в столбики.

первая строчка в последний столбик.
вторая строчка в предпоследний
и так далее
Советую найти в гугле матрицу поворота. Эта матрица имеет параметр фи - на какой угол нужно повернуть матрицу. Нужно твою матрицу умножить на матрицу поворота с фи=90 градусов