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

6

我有一个 [4,4] 的数组
只有 X 是我“知道”的,其他的都是通过简单的双重循环计算得出的。

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

我知道一些硬编码排列的方法,但这并不能让我学到什么东西,而且实际上相当无聊。

非常感谢您的帮助 :>


请查看此处的Rot90定义:http://pastebin.com/k667ujJ8 - Alex
1个回答

9

我不确定您如何将矩阵旋转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在同一位置:也许这就是你的意思?),但只需水平翻转即可解决问题:
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,

(将其倾斜另一边:rotate[i][j] = start[j][3-i];)
:)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接