C#旋转矩阵

时间:2013-03-13 09:36:44

标签: c# matrix rotational-matrices

我正在编写一个C#程序,它有一个立方体对象,允许用户在x和z轴上移动它。但是我希望他们能够旋转它。

我的矩阵定义如下:public double[, ] matrix = new double[4, 4];

例如,我可以通过此代码扩展多维数据集。

public void initAsScalingMatrix(double sx, double sy, double sz) {

initAsIdentityMatrix();
matrix[0, 0] = sx; // scale x
matrix[1, 1] = sy; // scale y
matrix[2, 2] = sz; // scale z
matrix[3, 3] = 1;
}

所以我的问题是。我怎样才能使用相同的方法旋转立方体,例如x轴?

EDIT ---

您好,

我已经想出了如何旋转它,但它是从左上角开始的。

matrix[0, 0] = Math.Cos(rz);
matrix[0, 1] = Math.Sin(rz);
matrix[1, 0] = -(Math.Sin(rz));
matrix[1, 1] = Math.Cos(rz);

它怎么能从中心旋转?

1 个答案:

答案 0 :(得分:1)

您需要将旋转矩阵乘以平移矩阵,以获得一个矩阵,使您的对象围绕非原点位置旋转。

这有点拗口,所以这样看会有所帮助:

首先将平移矩阵应用于您的立方体,将立方体(或旋转原点)的中心移动到世界原点(0,0)。现在应用您的旋转矩阵。现在应用相反的平移将立方体放回原始位置。当然现在它将被旋转并且处于原始的“位置”,这就是你想要的。

有效地完成了将矩阵(Trans x Rotation x ^ Trans)应用到立方体。

您的旋转矩阵是2D。如果要围绕任意3D轴旋转,则需要使用3D旋转矩阵。如果您为C#安装XNA框架,您将免费获得矩阵数学库。 XNA应该用于游戏,但是根据你正在做的事情你可能会发现用于矩阵数学而不是自己动手。