c#旋转矩阵

本文关键字:旋转 | 更新日期: 2023-09-27 18:03:43

我正在写一个c#程序,它有一个立方体对象,允许用户在x y和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);

它怎么能从中心旋转呢?

c#旋转矩阵

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

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

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

实际上,我们所做的是对立方体应用一个矩阵(Trans x Rotation x ^Trans)。

旋转矩阵是二维的。如果你想绕任意3D轴旋转,你需要使用3D旋转矩阵。如果你为c#安装了XNA框架,你会得到一个免费的矩阵数学库。XNA应该是用于游戏的,但根据你所做的事情,你可能会发现它更适合用于矩阵数学,而不是自己动手。