在System.Numerics中构建旋转矩阵时出现意外符号



我用的是System。数值和我试图建立一个旋转矩阵使用方法,如CreateFromAxisAngle(Vector3, Single)CreateRotationY(Single)

假设我想建立一个旋转矩阵,表示绕y轴旋转90°。我期望的输出是:

0 0 1 0
0 1 0 0
-1 0 0 0
0 0 0 1

例如,这是Matlab生成的输出,以及维基百科上的公式建议的结果。

然而,当我执行Matrix4x4.CreateRotationY((float)(Math.PI / 2))Matrix4x4.CreateFromAxisAngle(new Vector3(0, 1, 0), (float)(Math.PI / 2))时,我得到的输出是:

0 0 -1 0
0 1  0 0
1 0  0 0
0 0  0 1

我可以很容易地实现我自己的功能来创建旋转矩阵,但我试图理解如果系统。数字使用不同的标准,或者如果我遗漏了什么。

感谢我可以在这里添加CreateRotationY(Single)的实现,很明显他们在矩阵的位置1,3使用-sin,这里应该是sin。

float num1 = (float) Math.Cos((double) radians);
float num2 = (float) Math.Sin((double) radians);
Matrix4x4 rotationY;
rotationY.M11 = num1;
rotationY.M12 = 0.0f;
rotationY.M13 = -num2;
rotationY.M14 = 0.0f;
rotationY.M21 = 0.0f;
rotationY.M22 = 1f;
rotationY.M23 = 0.0f;
rotationY.M24 = 0.0f;
rotationY.M31 = num2;
rotationY.M32 = 0.0f;
rotationY.M33 = num1;
rotationY.M34 = 0.0f;
rotationY.M41 = 0.0f;
rotationY.M42 = 0.0f;
rotationY.M43 = 0.0f;
rotationY.M44 = 1f;

3D坐标系可以是左手坐标系也可以是右手坐标系,然而,据我所知,两者都是左手坐标系。数字和数学实验室使用右手。与DirectX相反,DirectX是左手的。注意,手性只与某些类型的函数相关,比如创建旋转矩阵。

我怀疑旋转矩阵只是简单的转置。这是矩阵排序和相乘的另一个约定。你应该能够通过将矩阵与任意向量相乘来检验这个。这应该在Matlab和系统中给出相同的结果。如果有问题,请使用数字。

最新更新