Другие языки программирования и технологии
Как повернуть матрицу на 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");
}
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");
}
Николай Пастухов
const auto mid = n / 2; вот зачем n надо делить на 2 ?
думаю, надо создать временную матрицу, копию данной.
построчно брать данные из временной, и записывать в столбики.
первая строчка в последний столбик.
вторая строчка в предпоследний
и так далее
построчно брать данные из временной, и записывать в столбики.
первая строчка в последний столбик.
вторая строчка в предпоследний
и так далее
Советую найти в гугле матрицу поворота. Эта матрица имеет параметр фи - на какой угол нужно повернуть матрицу. Нужно твою матрицу умножить на матрицу поворота с фи=90 градусов
Похожие вопросы
- C++ повернуть матрицу на 90 градусов в положительном направлении
- Как в Adobe Photoshop CS3 повернуть лист на 90 градусов.
- программа в Паскале. осуществить поворот матрицы против часовой стрелки на 90 градусов
- Поворот массива на 90 градусов в с++
- Заполнить матрицу из 7 строк и 7 столбцов случайными числами в интервале [10;90]
- Как повернуть картинку в Paint на 45 градусов? Мне очень это нужноо)
- Помогите !!!С++Работа с одномерными и двумерными массивами. В каждой строке матрицы F(k, k) элемент. лежащий на главной
- C++ -Дана целочисленная матрица
- Найти минимальный элемент в матрице
- Помогите с обходим матрицы змейкой (нужно отредактировать формулу)