C++数据结构 矩阵的转置、镜像及旋转
矩阵介绍
C++ 中的矩阵是一种二维数组,用于存储数值数据。矩阵可以用于存储图像数据,以及科学和工程计算中的数据。
常用于以下场景:
数学运算:矩阵乘法、行列式计算、特征值分解等。
图像处理:图像缩放、旋转、颜色变换等。
矩阵分析:因子分析、主成分分析、协方差分析等。
线性代数:矩阵求逆、行列式计算、特征值分解等。
在 C++ 中,可以使用内置数组和 STL 中的 vector 来实现矩阵的存储和操作。在这里简单介绍一下矩阵的转置、镜像以及旋转。
矩阵的转置
使用两个循环,一个从上到下遍历矩阵中的行,一个从左到右遍历矩阵中的列(只需要遍历到行数对应的列),并交换对角线上的元素。
void Transposed(vector<vector<int>>& matrix)
{
for(int i=0;i<matrix.size();++i){
for(int j=0;j<i;++j){
int temp=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=temp;
}
}
}
效果:
//转置前:
1 2 3 4
5 6 7 8
//转置后:
1 5
2 6
3 7
4 8
矩阵的镜像(左右镜像)
使用两个循环,一个从上到下遍历矩阵中的行,一个从左到右遍历矩阵中的列(只需要遍历半列)。在每个位置处,交换该位置与以中间行对称位置上的数字。
void mirror(vector<vector<int>>& matrix)
{
for(int i=0;i<matrix.size();++i){
for(int j=0;j<matrix[i].size()/2;++j){
int temp=matrix[i][j];
matrix[i][j]=matrix[i][matrix[i].size()/2-j-1];
matrixmatrix[i][matrix[i].size()/2-j-1]=temp;
}
}
}
效果:
//镜像前:
1 2 3 4
5 6 7 8
//镜像后:
4 3 2 1
8 7 6 5
说明:上下镜像即是,一个从左到右遍历矩阵中的列,一个从上到下遍历矩阵中的行(只需要遍历半行)。在每个位置处,交换该位置与以中间列对称位置上的数字
矩阵的旋转(90度、180度、270度)
矩阵的旋转可以通过转置和镜像来实现:
情况一:顺时针转 90 度:先转置再左右镜像
效果:
//旋转前:
1 2 3 4
5 6 7 8
//转置后:
1 5
2 6
3 7
4 8
//左右镜像后:(达到顺时针旋转90度)
5 1
6 2
7 3
8 4
情况二:顺时针转 180 度:先上下镜像,再**左右镜像(**先左右再上下也可)
效果:文章来源:https://www.toymoban.com/news/detail-668697.html
//旋转前:
1 2 3 4
5 6 7 8
//上下镜像后:
5 6 7 8
1 2 3 4
//左右镜像后:(达到顺时针旋转180度)
8 7 6 5
4 3 2 1
情况三:顺时针转 270 度:先转置再上下镜像
效果:文章来源地址https://www.toymoban.com/news/detail-668697.html
//旋转前:
1 2 3 4
5 6 7 8
//转置后:
1 5
2 6
3 7
4 8
//左右镜像后:(达到顺时针旋转270度)
4 8
3 7
2 6
1 5
到了这里,关于C++数据结构 矩阵的转置、镜像及旋转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!