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

标签 c# matrix xna rotation

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

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

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

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

我知道一些对排列进行硬编码的方法,但那不会让我学到任何东西,而且坦率地说,这很无聊。

非常感谢您的帮助:>

最佳答案

我不确定你打算如何将矩阵旋转 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];)

:)

关于c# - 如何旋转 4x4 矩阵 (C#/XNA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14875698/

相关文章:

C#套接字数据报溢出

c# - 如何使用 Naudio 播放 WAV 文件中的多声道音频?

R:组合两个不等长的矩阵/向量,根据相同的值匹配行

c - 通过管道函数在 C 中计算行列式矩阵。修订代码

video - 如何从 XNA 中的文件加载视频? (仅限电脑)

c# - 如何避免在 WebView 中失去对 HTML 元素的输入焦点?

c# - 在后面的代码中将类添加到转发器内部的 anchor 标记

c++ - 如何计算和使用 cvMat 平均值

xna - 你如何编写一个什么都不做的顶点着色器?

c# - 如何在按键持续一定时间后重复操作?