矩阵顺逆时针旋转90度180度

时间:2024-03-11 09:18:43

,用线性数的知识,找到基向量的位置。在通过旋转基向量来旋转矩阵。

基向量的位置如图,因为在矩阵中是以左上为起点的。所以第一维的箭头应该是向下的。

  

 

顺时针旋转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