2013-02-14 177 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];

:)