2013-02-14 178 views
7

我有一個[4,4]
的數組X是我所知道的唯一一個,其餘的是用一個簡單的double for-loop來計算的。如何旋轉4x4矩陣(C#/ XNA)

x 0 0 0 
0 0 1 0 
0 1 1 0 
0 1 0 0 

我想要一個函數,該數組旋轉90度+/- 而x的位置保持不變。 (這應該是俄羅斯方塊)

x 0 0 0 
1 1 0 0 
0 1 1 0 
0 0 0 0 

我知道一些方法來硬編碼排列,但什麼也不會學到我什麼,它是坦言很無聊。

會欣賞的幫助:>

+0

退房的Rot90這裏定義:http://pastebin.com/k667ujJ8 – AlexFoxGill 2013-02-14 15:02:04

回答

10

我不知道你打算如何準確90度旋轉矩陣,但仍然具有的旋轉版本左上角的左上方X,但旋轉一些東西90度,我只是做一個新的陣列,交換行和列,並水平翻轉。

int[][] start = new int[4][]; 
start[0] = new int[4] { x, 0, 0, 0 } 
start[1] = new int[4] { 0, 0, 1, 0 } 
start[2] = new int[4] { 0, 1, 1, 0 } 
start[3] = new int[4] { 0, 1, 0, 0 } 

int[][] rotate = new int[4][]; 
for (int i=0; i<4; i++) rotate[i] = new int[4]; 
for (int i=0; i<4; i++) 
    for (int j=0; j<4; j++) 
     rotate[i][j] = start[j][i]; 

旋轉完成有:

0, 0, 0, 0, 
0, 0, 1, 1, 
0, 1, 1, 0, 
0, 0, 0, 0, 

現在,這是一個對角翻轉(編輯:剛剛發生,我認爲這將讓X在同樣的位置:或許這就是你的意思?) ,但只是做了horisontal翻轉,它應該是罰款:

0, 0, 0, 0, 
1, 1, 0, 0, 
0, 1, 1, 0, 
0, 0, 0, 0, 
0123:

for (int i=0; i<4; i++) 
    for (int j=0; j<4; j++) 
     rotate[i][3-j] = start[j][i]; 

與旋轉完成

(要傾斜的其他方式:rotate[i][j] = start[j][3-i];

:)