给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 /180 /270 度。
int a[3][3]={{1,2,3},{2,3,4},{4,5,6}}; //定义3*3数组演示
int b[3][3],c[3][3],d[3][3];
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
b[i][j]=a[2-j][i]; //顺时针旋转90 度
c[i][j]=a[2-i][2-j]; //顺时针旋转180度
d[i][j]=a[j][2-i]; //顺时针旋转270度
}
}
对数组的行,列通过改变数组的下标进行数组旋转的操作
输出结果
*****原数列************
1 2 3
2 3 4
4 5 6
****顺时针旋转90 度****
4 2 1
5 3 2
6 4 3
****顺时针旋转180度****
6 5 4
4 3 2
3 2 1
****顺时针旋转270度****
3 4 6
2 3 5
1 2 4
**********************
原理:顺时针旋转90度时,列号变行号,且行号下标顺序颠倒。
0 | 1 | 2 | |
---|---|---|---|
0 | 1 | 2 | 3 |
1 | 2 | 3 | 4 |
2 | 4 | 5 | 6 |
即: a[0][0] -> b[0][2]
a[1][0] -> b[0][1]
a[2][0] -> b[0][0] //第一列变第一行
用变量 i 表示行,j 表示列的话,为a[i][j] = b[2-j][i] //其中2为数组下标最大值
即:
在n*n数组中只需令a[i][j] = b[n-1-j][i]即可完成数组旋转90度
在n*n数组中只需令c[i][j]=a[n-1-i][n-1-j]即可完成数组旋转180度
在n*n数组中只需令d[i][j]=a[j][n-1-i]即可完成数组旋转270度