2013-03-13 335 views
0

我在写一个C#程序,它有一个立方体对象,允许用户在X轴和Z轴上移动它。不过,我希望他们能够旋转它。C#旋转矩阵

我矩阵的定义是这样: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轴旋转立方体?

编辑---

嗨,

我想通了如何旋转它,但它是从在左上角的方式这样做。

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

它怎么会从中心旋转?

+0

也许它只是我,但我不明白你的代码是如何工作的。请解释一下,矩阵中的数字意味着什么。 – Ari 2013-03-13 09:51:10

+0

要使它从中心旋转,首先需要对其进行翻译以便场景的中心位于原点,然后应用旋转矩阵,然后将场景翻译回其原始位置。 – antonijn 2013-03-13 09:59:29

回答

1

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

这有点拗口这样看着它这样可能会有所帮助:

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

有效地做的是将一个矩阵(Trans x Rotation x^Trans)应用到该立方体。

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