,用线性代数的知识,找到基向量的位置。在通过旋转基向量来旋转矩阵。
基向量的位置如图,因为在矩阵中是以左上为起点的。所以第一维的箭头应该是向下的。
顺时针旋转90度,基向量位置如下,旋转矩阵为,所以旋转后的坐标为×=。
逆时针旋转90度,基向量如下,旋转矩阵为,所以旋转后的坐标为×=。
旋转180度,基向量如下,旋转矩阵为,所以旋转后的坐标为×=
以C语言10*10的矩阵为例,因为C语言二维数组没有负数,因此旋转后整体移了10个单位。
1 #include<stdio.h> 2 void print(int a[][10]){ 3 for(int i=0;i<10;i++){ 4 for(int j=0;j<10;j++){ 5 printf("%3d",a[i][j]); 6 } 7 printf("\n"); 8 } 9 } 10 int main(){ 11 int a[10][10]; 12 int k = 0; 13 //原图像 14 for(int i=0;i<10;i++){ 15 for(int j=0;j<10;j++){ 16 a[i][j] = k++; 17 } 18 } 19 //顺时针旋转90 20 int shun90[10][10]; 21 for(int i=0;i<10;i++){ 22 for(int j=0;j<10;j++){ 23 shun90[j][9-i] = a[i][j]; 24 } 25 } 26 //逆时针旋转90 27 int ni90[10][10]; 28 for(int i=0;i<10;i++){ 29 for(int j=0;j<10;j++){ 30 ni90[9-j][i] = a[i][j]; 31 } 32 } 33 //旋转180 34 int zhuan180[10][10]; 35 for(int i=0;i<10;i++){ 36 for(int j=0;j<10;j++){ 37 zhuan180[9-i][9-j] = a[i][j]; 38 } 39 } 40 printf("原图像\n\n"); 41 print(a); 42 printf("\n\n顺时针90\n\n"); 43 print(shun90); 44 printf("\n\n逆时针90\n\n"); 45 print(ni90); 46 printf("\n\n转180\n\n"); 47 print(zhuan180); 48 49 50 51 5