320 {
321 float num = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.W;
322 bool flag = false;
323 if (num < 0f)
324 {
325 flag = true;
326 num = 0f - num;
327 }
328 float num2;
329 float num3;
330 if (num > 0.999999f)
331 {
332 num2 = 1f - amount;
333 num3 = (flag ? (0f - amount) : amount);
334 }
335 else
336 {
338 float num5 = (float)(1.0 /
Math.
Sin(num4));
339 num2 = (float)
Math.
Sin((1f - amount) * num4) * num5;
340 num3 = (flag ? ((float)(0.0 -
Math.
Sin(amount * num4)) * num5) : ((float)
Math.Sin(amount * num4) * num5));
341 }
343 result.X = num2 * quaternion1.X + num3 * quaternion2.X;
344 result.Y = num2 * quaternion1.Y + num3 * quaternion2.Y;
345 result.Z = num2 * quaternion1.Z + num3 * quaternion2.Z;
346 result.W = num2 * quaternion1.W + num3 * quaternion2.W;
347 return result;
348 }
static double Acos(double d)
static double Sin(double a)
Quaternion(float x, float y, float z, float w)