0

我正在编写一个 C# 程序,它有一个立方体对象,允许用户在 xy 和 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 轴?

编辑 - -

你好,

我已经想出了如何旋转它,但它是从左上角的方式进行的。

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

它怎么会从中心旋转?

4

1 回答 1

1

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

这有点拗口,所以以这种方式看待它可能会有所帮助:

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

实际上所做的是将矩阵(Trans x Rotation x ^Trans)应用于立方体。

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

于 2013-03-13T10:07:26.230 回答