351 {
352 float num = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.W;
353 bool flag = false;
354 if (num < 0f)
355 {
356 flag = true;
357 num = 0f - num;
358 }
359 float num2;
360 float num3;
361 if (num > 0.999999f)
362 {
363 num2 = 1f - amount;
364 num3 = (flag ? (0f - amount) : amount);
365 }
366 else
367 {
369 float num5 = (float)(1.0 /
Math.
Sin(num4));
370 num2 = (float)
Math.
Sin((1f - amount) * num4) * num5;
371 num3 = (flag ? ((float)(0.0 -
Math.
Sin(amount * num4)) * num5) : ((float)
Math.Sin(amount * num4) * num5));
372 }
373 result.X = num2 * quaternion1.X + num3 * quaternion2.X;
374 result.Y = num2 * quaternion1.Y + num3 * quaternion2.Y;
375 result.Z = num2 * quaternion1.Z + num3 * quaternion2.Z;
376 result.W = num2 * quaternion1.W + num3 * quaternion2.W;
377 }
static double Acos(double d)
static double Sin(double a)