/// <summary>
/// Lerps a rotation by time.
/// </summary>
/// <param name="aTime">The time.</param>
/// <returns>The rotation.</returns>
public BEPUutilities.Quaternion LerpRotate(double aTime)
{
if (Rotations.Count == 0)
{
return(BEPUutilities.Quaternion.Identity);
}
if (Rotations.Count == 1)
{
return(Rotations[0]);
}
int index = FindRotate(aTime);
int nextIndex = index + 1;
if (nextIndex >= Rotations.Count)
{
return(Rotations[0]);
}
double deltaT = RotTimes[nextIndex] - RotTimes[index];
double factor = (aTime - RotTimes[index]) / deltaT;
if (factor < 0 || factor > 1)
{
return(Rotations[0]);
}
BEPUutilities.Quaternion start = Rotations[index];
BEPUutilities.Quaternion end = Rotations[nextIndex];
BEPUutilities.Quaternion res = BEPUutilities.Quaternion.Slerp(start, end, (double)factor);
res.Normalize();
return(res);
}