System.Numerics构建旋转矩阵时符号异常问题咨询
System.Numerics旋转矩阵与标准公式的差异问题
我在使用System.Numerics库,通过CreateFromAxisAngle(Vector3, Single)和CreateRotationY(Single)方法构建旋转矩阵时,遇到了结果不符的问题。
我想要构建一个绕Y轴旋转90°的旋转矩阵,根据Matlab输出以及标准旋转矩阵公式,预期结果应为:
0 0 1 0 0 1 0 0 -1 0 0 0 0 0 0 1
但当我执行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
我可以自行实现旋转矩阵的创建函数,但想搞清楚System.Numerics是否采用了不同的标准,或是我的理解存在疏漏。
以下是CreateRotationY(Single)的实现代码,可以看到它在矩阵(1,3)位置使用了-num2(即-sine值),而按预期应该是sine值:
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;
内容的提问来源于stack exchange,提问作者Gianluca Bardaro
相关产品推荐
相关产品推荐

