UnityEditor.QuaternionCurveTangentCalculation.SafeDeltaDivide C# (CSharp) Method

SafeDeltaDivide() public static method

public static SafeDeltaDivide ( float dy, float dx ) : float
dy float
dx float
return float
        public static float SafeDeltaDivide(float dy, float dx)
        {
            if (dx == 0f)
            {
                return 0f;
            }
            return (dy / dx);
        }

Usage Example

        public float CalculateSmoothTangent(int index, int component)
        {
            AnimationCurve curve = this.GetCurve(component);
            float          result;

            if (curve.length < 2)
            {
                result = 0f;
            }
            else if (index <= 0)
            {
                result = this.CalculateLinearTangent(curve[0], curve[1], component);
            }
            else if (index >= curve.length - 1)
            {
                result = this.CalculateLinearTangent(curve[curve.length - 1], curve[curve.length - 2], component);
            }
            else
            {
                float      time        = curve[index - 1].time;
                float      time2       = curve[index].time;
                float      time3       = curve[index + 1].time;
                Vector3    euler       = this.EvaluateEulerCurvesDirectly(time);
                Vector3    vector      = this.EvaluateEulerCurvesDirectly(time2);
                Vector3    euler2      = this.EvaluateEulerCurvesDirectly(time3);
                Quaternion quaternion  = Quaternion.Euler(euler);
                Quaternion quaternion2 = Quaternion.Euler(vector);
                Quaternion quaternion3 = Quaternion.Euler(euler2);
                if (quaternion.x * quaternion2.x + quaternion.y * quaternion2.y + quaternion.z * quaternion2.z + quaternion.w * quaternion2.w < 0f)
                {
                    quaternion = new Quaternion(-quaternion.x, -quaternion.y, -quaternion.z, -quaternion.w);
                }
                if (quaternion3.x * quaternion2.x + quaternion3.y * quaternion2.y + quaternion3.z * quaternion2.z + quaternion3.w * quaternion2.w < 0f)
                {
                    quaternion3 = new Quaternion(-quaternion3.x, -quaternion3.y, -quaternion3.z, -quaternion3.w);
                }
                Quaternion quaternion4 = default(Quaternion);
                float      dx          = time2 - time;
                float      dx2         = time3 - time2;
                for (int i = 0; i < 4; i++)
                {
                    float dy   = quaternion2[i] - quaternion[i];
                    float dy2  = quaternion3[i] - quaternion2[i];
                    float num  = QuaternionCurveTangentCalculation.SafeDeltaDivide(dy, dx);
                    float num2 = QuaternionCurveTangentCalculation.SafeDeltaDivide(dy2, dx2);
                    quaternion4[i] = 0.5f * num + 0.5f * num2;
                }
                float      num3 = Mathf.Abs(time3 - time) * 0.01f;
                Quaternion q    = new Quaternion(quaternion2.x - quaternion4.x * num3, quaternion2.y - quaternion4.y * num3, quaternion2.z - quaternion4.z * num3, quaternion2.w - quaternion4.w * num3);
                Quaternion q2   = new Quaternion(quaternion2.x + quaternion4.x * num3, quaternion2.y + quaternion4.y * num3, quaternion2.z + quaternion4.z * num3, quaternion2.w + quaternion4.w * num3);
                Vector3    eulerFromQuaternion  = QuaternionCurveTangentCalculation.GetEulerFromQuaternion(q, vector);
                Vector3    eulerFromQuaternion2 = QuaternionCurveTangentCalculation.GetEulerFromQuaternion(q2, vector);
                result = ((eulerFromQuaternion2 - eulerFromQuaternion) / (num3 * 2f))[component];
            }
            return(result);
        }
All Usage Examples Of UnityEditor.QuaternionCurveTangentCalculation::SafeDeltaDivide