旋轉矩陣的構造和螺旋三角陣的構造

2021-09-25 22:46:12 字數 2479 閱讀 1218

旋轉矩陣,顧名思義就是從外到內一圈一圈旋轉的矩陣。他的形式可以像這樣

1  2  3  4  5  

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

也可以像這樣

25 24 23 22 21  

10 9 8 7 20

11 2 1 6 19

12 3 4 5 18

13 14 15 16 17

那麼如何構造乙個旋轉矩陣呢?思想是先求出 row行 column列的矩陣有多少個元素,max = row * column;用 l( left )代表沒填得的最左邊是第幾列,r( right )代表沒填得的最右邊是第幾列。u( up )代表沒填得的最上面邊是第幾行,d( down )代表沒填得的最下面邊是第幾行。

然後從u行的第l列開始填數,直到填到r列。代表沒填的最上面一行填完了,u++代表沒填的最上一行往下移一行。然後從r列的第u行開始填數,直到填到d行。代表沒填的最右邊一列填完,r–代表沒填的最右一列往左移一列。(注意:這兒從第u行開始填是正確的,因為在這之前u已經向下移了一行了,後面的也是一樣的。每次填數前 l r u d 構成的矩陣都是沒填過的,可以自己畫矩陣圖來理解)。

然後從d行的第r列開始填數,直到填到l列。代表沒填的最下面一行填完了,d–代表沒填的最下一行往上移一行。然後從l列的第d行開始填數,直到填到u行。代表沒填的最左邊一列填完,l++代表沒填的最左一列往右移一列。

不斷迴圈,直到最大值減為0。代表max =row * column 個數填完了。矩陣的構造結束

#include

using std::endl;

using std::cin;

using std::cout;

intmain()

u++;for

(int i = u;

(i <= d)

&&(max >0)

; i++

) r--

;for

(int i = r;

(i >= l)

&&(max >0)

; i--

) d--

;for

(int i = d;

(i >= u)

&&(max >0)

; i--

) l++;}

//到這兒就完成構建了,num這個二維陣列現在是旋轉陣列了

for(

int i =

0; i < row; i++

) cout << num[i]

[column-1]

<< endl;

}return0;

}

-----------------------2020.6.15更新分割線----------------------------------

為啥更新,做劍指offer19題時想到這個旋轉矩陣。劍指offer 19、順時針列印矩陣 python c++

-----------------------2020.6.15更新分割線----------------------------------

學會了構建旋轉矩陣,那麼如何構造乙個螺旋三角陣呢,它長這樣

1  2  3  4  5  6  7  8  9  10

27 28 29 30 31 32 33 34 11

26 45 46 47 48 49 35 12

25 44 54 55 50 36 13

24 43 53 51 37 14

23 42 52 38 15

22 41 39 16

21 40 17

20 18

19

思想和旋轉矩陣構造類似,按著思路理一遍就可以了。注意點是這兒的 r 和d 合併了。直接上**。

#include

using std::endl;

using std::cin;

using std::cout;

intmain()

u++;for

(int i = u,j =1;

(i <= d)

&&(max >= min)

; i++

,j++

) d--

;for

(int i = d;

(i >= u)

&&(max >= min)

; i--

) d--

; l++;}

for(

int i =

0; i < row; i++

) cout << num[i]

[row-i-1]

<< endl;}}

return0;

}

旋轉矩陣的理解和使用

點a以列表示且右乘旋轉矩陣 原座標軸改變至新座標軸 旋轉矩陣m 繞原座標軸原點旋轉角度a 旋轉矩陣m 以上兩者意思一樣,不難證明 不論繞哪點旋轉,物體旋轉相同角度後的形狀均相同。要繞特定點旋轉,只需要在旋轉後將同樣進行旋轉變化後的旋轉中心移動回原本的旋轉中心即可。pragma once includ...

尤拉角和旋轉矩陣的轉換

尤拉角是一種常用的描述方位的方法。這項技術是著名數學家leonhard euler 1707 1783 的名字命名的,他證明了角位移序列等價於單個角位移。想詳細了解的維基百科 1,什麼是尤拉角 尤拉角的基本思想是將角位移分解為繞三個互相垂直軸的三個旋轉組成的序列。這聽起來複雜,其實它是非常直觀的。之...

三維旋轉矩陣的計算

在三維空間中,旋轉變換是最基本的變換型別之一,有多種描述方式,如euler角 旋轉矩陣 旋轉軸 旋轉角度 四元數等。本文將介紹各種描述方式以及它們之間的轉換。1.旋轉矩陣 用乙個3階正交矩陣來表示旋轉變換,是一種最常用的表示方法。容易證明,3階正交陣的自由度為3。注意,它的行列式必須等於1,當等於 ...