UnityEditor.QuaternionCurveTangentCalculation.GetEquivalentEulerAngles C# (CSharp) Method

GetEquivalentEulerAngles() public static method

public static GetEquivalentEulerAngles ( Quaternion quat ) : Vector3[]
quat UnityEngine.Quaternion
return Vector3[]
        public static Vector3[] GetEquivalentEulerAngles(Quaternion quat)
        {
            Vector3 eulerAngles = quat.eulerAngles;
            return new Vector3[] { eulerAngles, new Vector3(180f - eulerAngles.x, eulerAngles.y + 180f, eulerAngles.z + 180f) };
        }

Usage Example

示例#1
0
        public static Vector3 GetEulerFromQuaternion(Quaternion q, Vector3 refEuler)
        {
            Vector3[] equivalentEulerAngles = QuaternionCurveTangentCalculation.GetEquivalentEulerAngles(q);
            for (int index = 0; index < equivalentEulerAngles.Length; ++index)
            {
                equivalentEulerAngles[index] = new Vector3((float)((double)Mathf.Repeat((float)((double)equivalentEulerAngles[index].x - (double)refEuler.x + 180.0), 360f) + (double)refEuler.x - 180.0), (float)((double)Mathf.Repeat((float)((double)equivalentEulerAngles[index].y - (double)refEuler.y + 180.0), 360f) + (double)refEuler.y - 180.0), (float)((double)Mathf.Repeat((float)((double)equivalentEulerAngles[index].z - (double)refEuler.z + 180.0), 360f) + (double)refEuler.z - 180.0));
                float num1 = Mathf.Repeat(equivalentEulerAngles[index].x, 360f);
                if ((double)Mathf.Abs(num1 - 90f) < 1.0)
                {
                    float num2 = equivalentEulerAngles[index].z - equivalentEulerAngles[index].y - (refEuler.z - refEuler.y);
                    equivalentEulerAngles[index].z = refEuler.z + num2 * 0.5f;
                    equivalentEulerAngles[index].y = refEuler.y - num2 * 0.5f;
                }
                if ((double)Mathf.Abs(num1 - 270f) < 1.0)
                {
                    float num2 = equivalentEulerAngles[index].z + equivalentEulerAngles[index].y - (refEuler.z + refEuler.y);
                    equivalentEulerAngles[index].z = refEuler.z + num2 * 0.5f;
                    equivalentEulerAngles[index].y = refEuler.y + num2 * 0.5f;
                }
            }
            Vector3 vector3 = equivalentEulerAngles[0];
            float   num     = (equivalentEulerAngles[0] - refEuler).sqrMagnitude;

            for (int index = 1; index < equivalentEulerAngles.Length; ++index)
            {
                float sqrMagnitude = (equivalentEulerAngles[index] - refEuler).sqrMagnitude;
                if ((double)sqrMagnitude < (double)num)
                {
                    num     = sqrMagnitude;
                    vector3 = equivalentEulerAngles[index];
                }
            }
            return(vector3);
        }
All Usage Examples Of UnityEditor.QuaternionCurveTangentCalculation::GetEquivalentEulerAngles