public static bool SafeNormalize( ref Quaternion q )
{
float lenSq = q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;
if( lenSq > IKEpsilon ) {
if( lenSq >= 1.0f - IKEpsilon && lenSq <= 1.0 + IKEpsilon ) {
return true;
} else {
float s = 1.0f / Mathf.Sqrt( lenSq );
q.x *= s;
q.y *= s;
q.z *= s;
q.w *= s;
return true;
}
}
return false;
}