C# 在从旋转矩阵转换为四元数时,不确定如何防止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;

我有一个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 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)。我读了一点书,发现这是四元数/矩阵的一种衰落,但我不确定如何实现它的解决方案/解决方法

谢谢,尼弗利