public static Quaternion FactoryFromAxisAngle(Vector axis, float angle) { if (axis.LengthSquared() == 0.0f) return FactoryIdentity; float sinAngleOverAxisLength = Calc.Sin(angle / 2) / axis.Length(); return Quaternion.Normalize(new Quaternion( axis.X * sinAngleOverAxisLength, axis.Y * sinAngleOverAxisLength, axis.Z * sinAngleOverAxisLength, Calc.Cos(angle / 2))); }