public static GetQuatLog ( |
||
q | ||
return |
public static Quaternion GetQuatLog(Quaternion q)
{
Quaternion quaternion = q;
quaternion.w = 0f;
if (Mathf.Abs(q.w) < 1f)
{
float f = Mathf.Acos(q.w);
float num2 = Mathf.Sin(f);
if (Mathf.Abs(num2) > 0.0001)
{
float num3 = f / num2;
quaternion.x = q.x * num3;
quaternion.y = q.y * num3;
quaternion.z = q.z * num3;
}
}
return quaternion;
}
public static Quaternion GetSquadIntermediate(Quaternion q0, Quaternion q1, Quaternion q2) { Quaternion quatConjugate = MathUtils.GetQuatConjugate(q1); Quaternion quatLog = MathUtils.GetQuatLog(quatConjugate * q0); Quaternion quatLog2 = MathUtils.GetQuatLog(quatConjugate * q2); Quaternion q3 = new Quaternion(-0.25f * (quatLog.x + quatLog2.x), -0.25f * (quatLog.y + quatLog2.y), -0.25f * (quatLog.z + quatLog2.z), -0.25f * (quatLog.w + quatLog2.w)); return(q1 * MathUtils.GetQuatExp(q3)); }