UnityEditor.MathUtils.Slerp C# (CSharp) Method

Slerp() public static method

public static Slerp ( Quaternion p, Quaternion q, float t ) : Quaternion
p UnityEngine.Quaternion
q UnityEngine.Quaternion
t float
return UnityEngine.Quaternion
        public static Quaternion Slerp(Quaternion p, Quaternion q, float t)
        {
            Quaternion quaternion;
            float f = Quaternion.Dot(p, q);
            if ((1f + f) > 1E-05)
            {
                float num2;
                float num3;
                if ((1f - f) > 1E-05)
                {
                    float num4 = Mathf.Acos(f);
                    float num5 = 1f / Mathf.Sin(num4);
                    num2 = Mathf.Sin((1f - t) * num4) * num5;
                    num3 = Mathf.Sin(t * num4) * num5;
                }
                else
                {
                    num2 = 1f - t;
                    num3 = t;
                }
                quaternion.x = (num2 * p.x) + (num3 * q.x);
                quaternion.y = (num2 * p.y) + (num3 * q.y);
                quaternion.z = (num2 * p.z) + (num3 * q.z);
                quaternion.w = (num2 * p.w) + (num3 * q.w);
                return quaternion;
            }
            float num6 = Mathf.Sin(((1f - t) * 3.141593f) * 0.5f);
            float num7 = Mathf.Sin((t * 3.141593f) * 0.5f);
            quaternion.x = (num6 * p.x) - (num7 * p.y);
            quaternion.y = (num6 * p.y) + (num7 * p.x);
            quaternion.z = (num6 * p.z) - (num7 * p.w);
            quaternion.w = p.z;
            return quaternion;
        }
    }

Usage Example

示例#1
0
        public static Quaternion GetQuatSquad(float t, Quaternion q0, Quaternion q1, Quaternion a0, Quaternion a1)
        {
            float      t1         = (float)(2.0 * (double)t * (1.0 - (double)t));
            Quaternion quaternion = MathUtils.Slerp(MathUtils.Slerp(q0, q1, t), MathUtils.Slerp(a0, a1, t), t1);
            float      num        = Mathf.Sqrt((float)((double)quaternion.x * (double)quaternion.x + (double)quaternion.y * (double)quaternion.y + (double)quaternion.z * (double)quaternion.z + (double)quaternion.w * (double)quaternion.w));

            quaternion.x /= num;
            quaternion.y /= num;
            quaternion.z /= num;
            quaternion.w /= num;
            return(quaternion);
        }
All Usage Examples Of UnityEditor.MathUtils::Slerp