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

use*_*115 7 c# xna rotation matrix

我有一个[4,4]
X 阵列是唯一一个我"知道"的,其余的是用简单的双循环计算的.

x 0 0 0
0 0 1 0
0 1 1 0
0 1 0 0
Run Code Online (Sandbox Code Playgroud)

我想要一个采用这个数组的函数,并将其旋转90度+/ - 而x的位置保持不变.(它应该是俄罗斯方块)

x 0 0 0
1 1 0 0
0 1 1 0
0 0 0 0
Run Code Online (Sandbox Code Playgroud)

我知道某些方法来对这些排列进行硬编码,但这对我来说什么都不会学到什么,坦率地说这很无聊.

非常感谢帮助:>

ASt*_*oob 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];
Run Code Online (Sandbox Code Playgroud)

旋转饰面:

0, 0, 0, 0,
0, 0, 1, 1,
0, 1, 1, 0,
0, 0, 0, 0,
Run Code Online (Sandbox Code Playgroud)

现在这是一个对角线翻转(编辑:它只是发生在我身上,这将使x保持在同一位置:也许这就是你的意思?),但只是做一个水平翻转它应该没问题:

for (int i=0; i<4; i++)
    for (int j=0; j<4; j++)
        rotate[i][3-j] = start[j][i];
Run Code Online (Sandbox Code Playgroud)

旋转饰面:

0, 0, 0, 0,
1, 1, 0, 0,
0, 1, 1, 0,
0, 0, 0, 0,
Run Code Online (Sandbox Code Playgroud)

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

:)