,用線性代數的知識,找到基向量的位置。在通過旋轉基向量來旋轉矩陣。
基向量的位置如圖,因為在矩陣中是以左上為起點的。所以第一維的箭頭應該是向下的。
順時針旋轉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