C# 在从旋转矩阵转换为四元数时,不确定如何防止270度与90度混淆
我有一个3x3整数旋转矩阵的结构,我需要在3D环境中存储对象旋转的数据,以便轻松地序列化为XML并由另一个程序解释 TL;博士,不确定如何实现270度四元数的修正,结果是90度C# 在从旋转矩阵转换为四元数时,不确定如何防止270度与90度混淆,c#,unity3d,matrix,quaternions,euler-angles,C#,Unity3d,Matrix,Quaternions,Euler Angles,我有一个3x3整数旋转矩阵的结构,我需要在3D环境中存储对象旋转的数据,以便轻松地序列化为XML并由另一个程序解释 TL;博士,不确定如何实现270度四元数的修正,结果是90度 public struct IntegerMatrix3x3 { public int m00; public int m10; public int m20; public int m01; public int m11;
public struct IntegerMatrix3x3
{
public int m00;
public int m10;
public int m20;
public int m01;
public int m11;
public int m21;
public int m02;
public int m12;
public int m22;
/*
m00 m01 m02
m10 m11 m12
m20 m21 m22
*/
}
我遇到的问题是,我使用一个函数将矩阵转换为Euler角向量,我可以使用它在unity环境中设置游戏对象变换
public Vector3 ToEulers()
{
// NTS: http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm
Quaternion q = new Quaternion();
q.w = Mathf.Sqrt(Mathf.Max(0, 1 + m00 + m11 + m22)) / 2;
q.x = Mathf.Sqrt(Mathf.Max(0, 1 + m00 - m11 - m22)) / 2;
q.y = Mathf.Sqrt(Mathf.Max(0, 1 - m00 + m11 - m22)) / 2;
q.z = Mathf.Sqrt(Mathf.Max(0, 1 - m00 - m11 + m22)) / 2;
q.x *= Mathf.Sign(q.x * (m21 - m12));
q.y *= Mathf.Sign(q.y * (m02 - m20));
q.z *= Mathf.Sign(q.z * (m10 - m01));
// Find euler angles from quaternion derived from matrix
Debug.Log(q.eulerAngles);
return q.eulerAngles;
}
当我将角度(0,270,0)编码到矩阵中,然后使用所述函数将矩阵转换回角度,它输出(0,90,0)。我读了一点书,发现这是四元数/矩阵的一种衰落,但我不确定如何实现它的解决方案/解决方法
谢谢,尼弗利