C++程序 将矩阵旋转45度
在计算机编程语言中,矩阵是一种重要的数据结构。矩阵一般用来存储数据,也可用于计算。常见的矩阵操作之一是旋转矩阵。本文将介绍如何使用C++在计算机上旋转矩阵45度。
先定义一个矩阵数据类型Matrix,以存储矩阵数据。
template<typename T>
class Matrix {
public:
Matrix(std::size_t rows, std::size_t cols)
: rows_{rows}, cols_{cols}, data_{rows * cols} {}
std::size_t num_rows() const { return rows_; }
std::size_t num_cols() const { return cols_; }
T& operator()(std::size_t row, std::size_t col) {
return data_[row * cols_ + col];
}
const T& operator()(std::size_t row, std::size_t col) const {
return data_[row * cols_ + col];
}
private:
std::size_t rows_, cols_;
std::vector<T> data_;
};
通过上述代码,定义了一个Matrix类,含有指定行数和列数以及存储数据的空间。
接下来,实现旋转矩阵操作,旋转45度的操作和旋转90度操作基本类似,首先交换矩阵的行与列的位置,然后翻转其中一条对角线上的所有元素即可。
template<typename T>
void rotate_45(Matrix<T>& m) {
const std::size_t n = m.num_rows();
assert(m.num_cols() == n);
for (std::size_t i = 0; i < n; ++i) {
for (std::size_t j = i + 1; j < n; ++j) {
std::swap(m(i, j), m(j, i));
}
}
for (std::size_t i = 0; i < n / 2; ++i) {
for (std::size_t j = 0; j < n; ++j) {
std::swap(m(i, j), m(n - i - 1, n - j - 1));
}
}
}
以上代码中,先交换行和列的位置,然后翻转两条对角线上的所有元素。
下面是完整的示例代码,将矩阵旋转45度。
#include <iostream>
template<typename T>
class Matrix {
public:
Matrix(std::size_t rows, std::size_t cols)
: rows_{rows}, cols_{cols}, data_{rows * cols} {}
std::size_t num_rows() const { return rows_; }
std::size_t num_cols() const { return cols_; }
T& operator()(std::size_t row, std::size_t col) {
return data_[row * cols_ + col];
}
const T& operator()(std::size_t row, std::size_t col) const {
return data_[row * cols_ + col];
}
private:
std::size_t rows_, cols_;
std::vector<T> data_;
};
template<typename T>
void rotate_45(Matrix<T>& m) {
const std::size_t n = m.num_rows();
assert(m.num_cols() == n);
for (std::size_t i = 0; i < n; ++i) {
for (std::size_t j = i + 1; j < n; ++j) {
std::swap(m(i, j), m(j, i));
}
}
for (std::size_t i = 0; i < n / 2; ++i) {
for (std::size_t j = 0; j < n; ++j) {
std::swap(m(i, j), m(n - i - 1, n - j - 1));
}
}
}
int main() {
Matrix<int> m(3, 3);
m(0, 0) = 1;
m(0, 1) = 2;
m(0, 2) = 3;
m(1,0) = 4;
m(1, 1) = 5;
m(1, 2) = 6;
m(2, 0) = 7;
m(2, 1) = 8;
m(2, 2) = 9;
std::cout << "Original matrix:\n";
for (std::size_t i = 0; i < m.num_rows(); ++i) {
for (std::size_t j = 0; j < m.num_cols(); ++j) {
std::cout << m(i, j) << ' ';
}
std::cout << '\n';
}
rotate_45(m);
std::cout << "\nRotated matrix:\n";
for (std::size_t i = 0; i < m.num_rows(); ++i) {
for (std::size_t j = 0; j < m.num_cols(); ++j) {
std::cout << m(i, j) << ' ';
}
std::cout << '\n';
}
return 0;
}
结论
在这篇文章中,我们了解了如何使用C++程序将矩阵旋转45度。通过定义一个矩阵数据结构Matrix,实现了对旋转矩阵的操作。该示例代码可在多个计算机编程语言中使用,并可通过更改存储数据的数据类型实现其他类型的矩阵旋转操作。