8.对2D图像进行旋转

一、问题描述

二、问题分析

该问题是一个实际问题,对于图形学处理常常涉及到旋转,不过在数字图像图例方面,旋转是将图形矩阵乘上一个2*2的矩阵,从而达到对图片的旋转效果。在本问题中考虑到内存占用问题,考虑用其他方式,其实仔细研究可以发现图像旋转可以分解为先沿对角线对折,然后沿着中轴线对折。

三、

class Solution {
public:
    //对角线对折
    void Diagonal(vector<vector<int> > &matrix)
    {
        int size=matrix.size();
        for(int i=0;i<size;i++)
        {
            for(int j=i;j<size;j++)
            {
                swap(matrix[i][j],matrix[j][i]);
            }
        }
    }
    //沿中轴线对折
    void Symmetry(vector<vector<int> > &matrix)
    {
        int size=matrix.size();
        for(int i=0;i<size;i++)
        {
            for(int j=0,k=size-1;j<=k;j++,k--)
            swap(matrix[i][j],matrix[i][k]);
        }
    }
    
    //顺时针旋转90度
    void rotate(vector<vector<int> > &matrix) 
    {
        Diagonal(matrix);
        Symmetry(matrix);
    }
};

代码

猜你喜欢

转载自blog.csdn.net/feng__shuai/article/details/81213785