408 {
409 float num = 1f - amount;
410 float num2 = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.W;
411 if (num2 >= 0f)
412 {
413 result.X = num * quaternion1.X + amount * quaternion2.X;
414 result.Y = num * quaternion1.Y + amount * quaternion2.Y;
415 result.Z = num * quaternion1.Z + amount * quaternion2.Z;
416 result.W = num * quaternion1.W + amount * quaternion2.W;
417 }
418 else
419 {
420 result.X = num * quaternion1.X - amount * quaternion2.X;
421 result.Y = num * quaternion1.Y - amount * quaternion2.Y;
422 result.Z = num * quaternion1.Z - amount * quaternion2.Z;
423 result.W = num * quaternion1.W - amount * quaternion2.W;
424 }
425 float num3 = result.X * result.X + result.Y * result.Y + result.Z * result.Z + result.W * result.W;
426 float num4 = 1f / (float)
Math.
Sqrt(num3);
427 result.X *= num4;
428 result.Y *= num4;
429 result.Z *= num4;
430 result.W *= num4;
431 }
static double Sqrt(double d)