C++程序 将矩阵旋转45度

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,实现了对旋转矩阵的操作。该示例代码可在多个计算机编程语言中使用,并可通过更改存储数据的数据类型实现其他类型的矩阵旋转操作。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例