UnityEditor.QuaternionCurveTangentCalculation.GetEulerFromQuaternion C# (CSharp) Method

GetEulerFromQuaternion() public static method

public static GetEulerFromQuaternion ( Quaternion q, Vector3 refEuler ) : Vector3
q UnityEngine.Quaternion
refEuler Vector3
return Vector3
        public static Vector3 GetEulerFromQuaternion(Quaternion q, Vector3 refEuler)
        {
            Vector3[] equivalentEulerAngles = GetEquivalentEulerAngles(q);
            for (int i = 0; i < equivalentEulerAngles.Length; i++)
            {
                equivalentEulerAngles[i] = new Vector3((Mathf.Repeat((equivalentEulerAngles[i].x - refEuler.x) + 180f, 360f) + refEuler.x) - 180f, (Mathf.Repeat((equivalentEulerAngles[i].y - refEuler.y) + 180f, 360f) + refEuler.y) - 180f, (Mathf.Repeat((equivalentEulerAngles[i].z - refEuler.z) + 180f, 360f) + refEuler.z) - 180f);
                float num2 = Mathf.Repeat(equivalentEulerAngles[i].x, 360f);
                if (Mathf.Abs((float) (num2 - 90f)) < 1f)
                {
                    float num3 = equivalentEulerAngles[i].z - equivalentEulerAngles[i].y;
                    float num4 = refEuler.z - refEuler.y;
                    float num5 = num3 - num4;
                    equivalentEulerAngles[i].z = refEuler.z + (num5 * 0.5f);
                    equivalentEulerAngles[i].y = refEuler.y - (num5 * 0.5f);
                }
                if (Mathf.Abs((float) (num2 - 270f)) < 1f)
                {
                    float num6 = equivalentEulerAngles[i].z + equivalentEulerAngles[i].y;
                    float num7 = refEuler.z + refEuler.y;
                    float num8 = num6 - num7;
                    equivalentEulerAngles[i].z = refEuler.z + (num8 * 0.5f);
                    equivalentEulerAngles[i].y = refEuler.y + (num8 * 0.5f);
                }
            }
            Vector3 vector = equivalentEulerAngles[0];
            Vector3 vector2 = equivalentEulerAngles[0] - refEuler;
            float sqrMagnitude = vector2.sqrMagnitude;
            for (int j = 1; j < equivalentEulerAngles.Length; j++)
            {
                Vector3 vector3 = equivalentEulerAngles[j] - refEuler;
                float num11 = vector3.sqrMagnitude;
                if (num11 < sqrMagnitude)
                {
                    sqrMagnitude = num11;
                    vector = equivalentEulerAngles[j];
                }
            }
            return vector;
        }

Usage Example

        public float CalculateLinearTangent(Keyframe from, Keyframe to, int component)
        {
            float      num    = 0.01f;
            Vector3    vector = this.EvaluateEulerCurvesDirectly(to.time);
            Vector3    euler  = this.EvaluateEulerCurvesDirectly(from.time);
            Quaternion a      = Quaternion.Euler(vector);
            Quaternion b      = Quaternion.Euler(euler);
            Quaternion q      = Quaternion.Slerp(a, b, num);
            Vector3    eulerFromQuaternion = QuaternionCurveTangentCalculation.GetEulerFromQuaternion(q, vector);

            switch (component)
            {
            case 0:
                return((eulerFromQuaternion.x - vector.x) / num / -(to.time - from.time));

            case 1:
                return((eulerFromQuaternion.y - vector.y) / num / -(to.time - from.time));

            case 2:
                return((eulerFromQuaternion.z - vector.z) / num / -(to.time - from.time));

            default:
                return(0f);
            }
        }
All Usage Examples Of UnityEditor.QuaternionCurveTangentCalculation::GetEulerFromQuaternion