如何旋转4x4矩阵(C#/XNA)

如何旋转4x4矩阵(C#/XNA),c#,matrix,xna,rotation,C#,Matrix,Xna,Rotation,我有一个[4,4]的数组 X是我唯一“知道”的,其余的是用一个简单的double for循环计算的 x 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 我想要一个函数,在x的位置保持不变的情况下,将这个数组旋转90度+/-。(应该是俄罗斯方块) 我知道一些硬编码排列的方法,但这并不能让我学到任何东西,坦白说,这很无聊 非常感谢您的帮助:>我不确定您打算如何将矩阵旋转90度,但旋转版本的左上角仍然有左上角的X,但要将某个矩阵旋转90度,我只需要创建一个新数组,交换行和列,并水平翻转

我有一个[4,4]的数组
X是我唯一“知道”的,其余的是用一个简单的double for循环计算的

x 0 0 0
0 0 1 0
0 1 1 0
0 1 0 0
我想要一个函数,在x的位置保持不变的情况下,将这个数组旋转90度+/-。(应该是俄罗斯方块)

我知道一些硬编码排列的方法,但这并不能让我学到任何东西,坦白说,这很无聊


非常感谢您的帮助:>

我不确定您打算如何将矩阵旋转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];
现在这是一个对角线翻转(编辑:我突然想到这将使x保持在相同的位置:也许这就是你的意思?),但只要做一个水平翻转,就可以了:

for (int i=0; i<4; i++)
    for (int j=0; j<4; j++)
        rotate[i][3-j] = start[j][i];
(以其他方式倾斜:
旋转[i][j]=启动[j][3-i];


:)

在这里查看Rot90的定义:
0, 0, 0, 0,
0, 0, 1, 1,
0, 1, 1, 0,
0, 0, 0, 0,
for (int i=0; i<4; i++)
    for (int j=0; j<4; j++)
        rotate[i][3-j] = start[j][i];
0, 0, 0, 0,
1, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0,