5using Microsoft.Xna.Framework.Design;
13 [SuppressMessage(
"Microsoft.Design",
"CA1051:DoNotDeclareVisibleInstanceFields")]
16 [SuppressMessage(
"Microsoft.Design",
"CA1051:DoNotDeclareVisibleInstanceFields")]
19 [SuppressMessage(
"Microsoft.Design",
"CA1051:DoNotDeclareVisibleInstanceFields")]
22 [SuppressMessage(
"Microsoft.Design",
"CA1051:DoNotDeclareVisibleInstanceFields")]
48 return string.Format(currentCulture,
"{{X:{0} Y:{1} Z:{2} W:{3}}}",
X.ToString(currentCulture),
Y.ToString(currentCulture),
Z.ToString(currentCulture),
W.ToString(currentCulture));
72 return X.GetHashCode() +
Y.GetHashCode() +
Z.GetHashCode() +
W.GetHashCode();
77 return X *
X +
Y *
Y +
Z *
Z +
W *
W;
82 float num =
X *
X +
Y *
Y +
Z *
Z +
W *
W;
88 float num =
X *
X +
Y *
Y +
Z *
Z +
W *
W;
89 float num2 = 1f / (float)
Math.
Sqrt(num);
98 float num = quaternion.X * quaternion.X + quaternion.Y * quaternion.Y + quaternion.Z * quaternion.Z + quaternion.W * quaternion.
W;
99 float num2 = 1f / (float)
Math.
Sqrt(num);
101 result.X = quaternion.X * num2;
102 result.Y = quaternion.Y * num2;
103 result.Z = quaternion.Z * num2;
104 result.W = quaternion.W * num2;
110 float num = quaternion.X * quaternion.X + quaternion.Y * quaternion.Y + quaternion.Z * quaternion.Z + quaternion.W * quaternion.W;
111 float num2 = 1f / (float)
Math.
Sqrt(num);
112 result.X = quaternion.X * num2;
113 result.Y = quaternion.Y * num2;
114 result.Z = quaternion.Z * num2;
115 result.W = quaternion.W * num2;
129 result.Y = 0f -
value.Y;
130 result.Z = 0f -
value.Z;
137 result.X = 0f -
value.X;
138 result.Y = 0f -
value.Y;
139 result.Z = 0f -
value.Z;
145 float num = quaternion.X * quaternion.X + quaternion.Y * quaternion.Y + quaternion.Z * quaternion.Z + quaternion.W * quaternion.
W;
146 float num2 = 1f / num;
148 result.X = (0f - quaternion.
X) * num2;
149 result.Y = (0f - quaternion.
Y) * num2;
150 result.Z = (0f - quaternion.
Z) * num2;
151 result.W = quaternion.W * num2;
157 float num = quaternion.X * quaternion.X + quaternion.Y * quaternion.Y + quaternion.Z * quaternion.Z + quaternion.W * quaternion.W;
158 float num2 = 1f / num;
159 result.X = (0f - quaternion.X) * num2;
160 result.Y = (0f - quaternion.Y) * num2;
161 result.Z = (0f - quaternion.Z) * num2;
162 result.W = quaternion.W * num2;
167 float num = angle * 0.5f;
168 float num2 = (float)
Math.
Sin(num);
169 float w = (float)
Math.
Cos(num);
171 result.X = axis.X * num2;
172 result.Y = axis.Y * num2;
173 result.Z = axis.Z * num2;
180 float num = angle * 0.5f;
181 float num2 = (float)
Math.
Sin(num);
182 float w = (float)
Math.
Cos(num);
183 result.X = axis.X * num2;
184 result.Y = axis.Y * num2;
185 result.Z = axis.Z * num2;
191 float num = roll * 0.5f;
192 float num2 = (float)
Math.
Sin(num);
193 float num3 = (float)
Math.
Cos(num);
194 float num4 = pitch * 0.5f;
195 float num5 = (float)
Math.
Sin(num4);
196 float num6 = (float)
Math.
Cos(num4);
197 float num7 = yaw * 0.5f;
198 float num8 = (float)
Math.
Sin(num7);
199 float num9 = (float)
Math.
Cos(num7);
201 result.X = num9 * num5 * num3 + num8 * num6 * num2;
202 result.Y = num8 * num6 * num3 - num9 * num5 * num2;
203 result.Z = num9 * num6 * num2 - num8 * num5 * num3;
204 result.W = num9 * num6 * num3 + num8 * num5 * num2;
210 float num = roll * 0.5f;
211 float num2 = (float)
Math.
Sin(num);
212 float num3 = (float)
Math.
Cos(num);
213 float num4 = pitch * 0.5f;
214 float num5 = (float)
Math.
Sin(num4);
215 float num6 = (float)
Math.
Cos(num4);
216 float num7 = yaw * 0.5f;
217 float num8 = (float)
Math.
Sin(num7);
218 float num9 = (float)
Math.
Cos(num7);
219 result.X = num9 * num5 * num3 + num8 * num6 * num2;
220 result.Y = num8 * num6 * num3 - num9 * num5 * num2;
221 result.Z = num9 * num6 * num2 - num8 * num5 * num3;
222 result.W = num9 * num6 * num3 + num8 * num5 * num2;
227 float num = matrix.M11 + matrix.M22 + matrix.
M33;
231 float num2 = (float)
Math.
Sqrt(num + 1f);
232 result.W = num2 * 0.5f;
234 result.X = (matrix.M23 - matrix.
M32) * num2;
235 result.Y = (matrix.M31 - matrix.
M13) * num2;
236 result.Z = (matrix.M12 - matrix.
M21) * num2;
238 else if (matrix.
M11 >= matrix.
M22 && matrix.
M11 >= matrix.
M33)
241 float num4 = 0.5f / num3;
242 result.X = 0.5f * num3;
243 result.Y = (matrix.M12 + matrix.
M21) * num4;
244 result.Z = (matrix.M13 + matrix.
M31) * num4;
245 result.W = (matrix.M23 - matrix.
M32) * num4;
247 else if (matrix.
M22 > matrix.
M33)
250 float num6 = 0.5f / num5;
251 result.X = (matrix.M21 + matrix.
M12) * num6;
252 result.Y = 0.5f * num5;
253 result.Z = (matrix.M32 + matrix.
M23) * num6;
254 result.W = (matrix.M31 - matrix.
M13) * num6;
259 float num8 = 0.5f / num7;
260 result.X = (matrix.M31 + matrix.
M13) * num8;
261 result.Y = (matrix.M32 + matrix.
M23) * num8;
262 result.Z = 0.5f * num7;
263 result.W = (matrix.M12 - matrix.
M21) * num8;
270 float num = matrix.M11 + matrix.M22 + matrix.M33;
273 float num2 = (float)
Math.
Sqrt(num + 1f);
274 result.W = num2 * 0.5f;
276 result.X = (matrix.M23 - matrix.M32) * num2;
277 result.Y = (matrix.M31 - matrix.M13) * num2;
278 result.Z = (matrix.M12 - matrix.M21) * num2;
280 else if (matrix.M11 >= matrix.M22 && matrix.M11 >= matrix.M33)
282 float num3 = (float)
Math.
Sqrt(1f + matrix.M11 - matrix.M22 - matrix.M33);
283 float num4 = 0.5f / num3;
284 result.X = 0.5f * num3;
285 result.Y = (matrix.M12 + matrix.M21) * num4;
286 result.Z = (matrix.M13 + matrix.M31) * num4;
287 result.W = (matrix.M23 - matrix.M32) * num4;
289 else if (matrix.M22 > matrix.M33)
291 float num5 = (float)
Math.
Sqrt(1f + matrix.M22 - matrix.M11 - matrix.M33);
292 float num6 = 0.5f / num5;
293 result.X = (matrix.M21 + matrix.M12) * num6;
294 result.Y = 0.5f * num5;
295 result.Z = (matrix.M32 + matrix.M23) * num6;
296 result.W = (matrix.M31 - matrix.M13) * num6;
300 float num7 = (float)
Math.
Sqrt(1f + matrix.M33 - matrix.M11 - matrix.M22);
301 float num8 = 0.5f / num7;
302 result.X = (matrix.M31 + matrix.M13) * num8;
303 result.Y = (matrix.M32 + matrix.M23) * num8;
304 result.Z = 0.5f * num7;
305 result.W = (matrix.M12 - matrix.M21) * num8;
311 return quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.
W;
316 result = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.W;
321 float num = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.
W;
333 num3 = (flag ? (0f - amount) : amount);
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));
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;
352 float num = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.W;
364 num3 = (flag ? (0f - amount) : amount);
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));
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;
381 float num = 1f - amount;
383 float num2 = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.
W;
386 result.X = num * quaternion1.X + amount * quaternion2.
X;
387 result.Y = num * quaternion1.Y + amount * quaternion2.
Y;
388 result.Z = num * quaternion1.Z + amount * quaternion2.
Z;
389 result.W = num * quaternion1.W + amount * quaternion2.
W;
393 result.X = num * quaternion1.X - amount * quaternion2.
X;
394 result.Y = num * quaternion1.Y - amount * quaternion2.
Y;
395 result.Z = num * quaternion1.Z - amount * quaternion2.
Z;
396 result.W = num * quaternion1.W - amount * quaternion2.
W;
398 float num3 = result.X * result.X + result.Y * result.Y + result.Z * result.Z + result.W * result.
W;
399 float num4 = 1f / (float)
Math.
Sqrt(num3);
409 float num = 1f - amount;
410 float num2 = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.W;
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;
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;
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);
443 float num = y * z2 - z * y2;
444 float num2 = z * x2 - x * z2;
445 float num3 = x * y2 - y * x2;
446 float num4 = x * x2 + y * y2 + z * z2;
448 result.X = x * w2 + x2 * w + num;
449 result.Y = y * w2 + y2 * w + num2;
450 result.Z = z * w2 + z2 * w + num3;
451 result.W = w * w2 - num4;
465 float num = y * z2 - z * y2;
466 float num2 = z * x2 - x * z2;
467 float num3 = x * y2 - y * x2;
468 float num4 = x * x2 + y * y2 + z * z2;
469 result.X = x * w2 + x2 * w + num;
470 result.Y = y * w2 + y2 * w + num2;
471 result.Z = z * w2 + z2 * w + num3;
472 result.W = w * w2 - num4;
478 result.X = 0f - quaternion.
X;
479 result.Y = 0f - quaternion.
Y;
480 result.Z = 0f - quaternion.
Z;
481 result.W = 0f - quaternion.
W;
487 result.X = 0f - quaternion.X;
488 result.Y = 0f - quaternion.Y;
489 result.Z = 0f - quaternion.Z;
490 result.W = 0f - quaternion.W;
496 result.X = quaternion1.X + quaternion2.
X;
497 result.Y = quaternion1.Y + quaternion2.
Y;
498 result.Z = quaternion1.Z + quaternion2.
Z;
499 result.W = quaternion1.W + quaternion2.
W;
505 result.X = quaternion1.X + quaternion2.X;
506 result.Y = quaternion1.Y + quaternion2.Y;
507 result.Z = quaternion1.Z + quaternion2.Z;
508 result.W = quaternion1.W + quaternion2.W;
514 result.X = quaternion1.X - quaternion2.
X;
515 result.Y = quaternion1.Y - quaternion2.
Y;
516 result.Z = quaternion1.Z - quaternion2.
Z;
517 result.W = quaternion1.W - quaternion2.
W;
523 result.X = quaternion1.X - quaternion2.X;
524 result.Y = quaternion1.Y - quaternion2.Y;
525 result.Z = quaternion1.Z - quaternion2.Z;
526 result.W = quaternion1.W - quaternion2.W;
531 float x = quaternion1.
X;
532 float y = quaternion1.
Y;
533 float z = quaternion1.
Z;
534 float w = quaternion1.
W;
535 float x2 = quaternion2.
X;
536 float y2 = quaternion2.
Y;
537 float z2 = quaternion2.
Z;
538 float w2 = quaternion2.
W;
539 float num = y * z2 - z * y2;
540 float num2 = z * x2 - x * z2;
541 float num3 = x * y2 - y * x2;
542 float num4 = x * x2 + y * y2 + z * z2;
544 result.X = x * w2 + x2 * w + num;
545 result.Y = y * w2 + y2 * w + num2;
546 result.Z = z * w2 + z2 * w + num3;
547 result.W = w * w2 - num4;
553 float x = quaternion1.X;
554 float y = quaternion1.Y;
555 float z = quaternion1.Z;
556 float w = quaternion1.W;
557 float x2 = quaternion2.X;
558 float y2 = quaternion2.Y;
559 float z2 = quaternion2.Z;
560 float w2 = quaternion2.W;
561 float num = y * z2 - z * y2;
562 float num2 = z * x2 - x * z2;
563 float num3 = x * y2 - y * x2;
564 float num4 = x * x2 + y * y2 + z * z2;
565 result.X = x * w2 + x2 * w + num;
566 result.Y = y * w2 + y2 * w + num2;
567 result.Z = z * w2 + z2 * w + num3;
568 result.W = w * w2 - num4;
574 result.X = quaternion1.X * scaleFactor;
575 result.Y = quaternion1.Y * scaleFactor;
576 result.Z = quaternion1.Z * scaleFactor;
577 result.W = quaternion1.W * scaleFactor;
583 result.X = quaternion1.X * scaleFactor;
584 result.Y = quaternion1.Y * scaleFactor;
585 result.Z = quaternion1.Z * scaleFactor;
586 result.W = quaternion1.W * scaleFactor;
591 float x = quaternion1.
X;
592 float y = quaternion1.
Y;
593 float z = quaternion1.
Z;
594 float w = quaternion1.
W;
595 float num = quaternion2.X * quaternion2.X + quaternion2.Y * quaternion2.Y + quaternion2.Z * quaternion2.Z + quaternion2.W * quaternion2.
W;
596 float num2 = 1f / num;
597 float num3 = (0f - quaternion2.
X) * num2;
598 float num4 = (0f - quaternion2.
Y) * num2;
599 float num5 = (0f - quaternion2.
Z) * num2;
600 float num6 = quaternion2.W * num2;
601 float num7 = y * num5 - z * num4;
602 float num8 = z * num3 - x * num5;
603 float num9 = x * num4 - y * num3;
604 float num10 = x * num3 + y * num4 + z * num5;
606 result.X = x * num6 + num3 * w + num7;
607 result.Y = y * num6 + num4 * w + num8;
608 result.Z = z * num6 + num5 * w + num9;
609 result.W = w * num6 - num10;
615 float x = quaternion1.X;
616 float y = quaternion1.Y;
617 float z = quaternion1.Z;
618 float w = quaternion1.W;
619 float num = quaternion2.X * quaternion2.X + quaternion2.Y * quaternion2.Y + quaternion2.Z * quaternion2.Z + quaternion2.W * quaternion2.W;
620 float num2 = 1f / num;
621 float num3 = (0f - quaternion2.X) * num2;
622 float num4 = (0f - quaternion2.Y) * num2;
623 float num5 = (0f - quaternion2.Z) * num2;
624 float num6 = quaternion2.W * num2;
625 float num7 = y * num5 - z * num4;
626 float num8 = z * num3 - x * num5;
627 float num9 = x * num4 - y * num3;
628 float num10 = x * num3 + y * num4 + z * num5;
629 result.X = x * num6 + num3 * w + num7;
630 result.Y = y * num6 + num4 * w + num8;
631 result.Z = z * num6 + num5 * w + num9;
632 result.W = w * num6 - num10;
638 result.X = 0f - quaternion.
X;
639 result.Y = 0f - quaternion.
Y;
640 result.Z = 0f - quaternion.
Z;
641 result.W = 0f - quaternion.
W;
647 if (quaternion1.
X == quaternion2.
X && quaternion1.
Y == quaternion2.
Y && quaternion1.
Z == quaternion2.
Z)
649 return quaternion1.W == quaternion2.
W;
656 if (quaternion1.
X == quaternion2.
X && quaternion1.
Y == quaternion2.
Y && quaternion1.
Z == quaternion2.
Z)
658 return quaternion1.W != quaternion2.
W;
666 result.X = quaternion1.X + quaternion2.
X;
667 result.Y = quaternion1.Y + quaternion2.
Y;
668 result.Z = quaternion1.Z + quaternion2.
Z;
669 result.W = quaternion1.W + quaternion2.
W;
676 result.X = quaternion1.X - quaternion2.
X;
677 result.Y = quaternion1.Y - quaternion2.
Y;
678 result.Z = quaternion1.Z - quaternion2.
Z;
679 result.W = quaternion1.W - quaternion2.
W;
685 float x = quaternion1.
X;
686 float y = quaternion1.
Y;
687 float z = quaternion1.
Z;
688 float w = quaternion1.
W;
689 float x2 = quaternion2.
X;
690 float y2 = quaternion2.
Y;
691 float z2 = quaternion2.
Z;
692 float w2 = quaternion2.
W;
693 float num = y * z2 - z * y2;
694 float num2 = z * x2 - x * z2;
695 float num3 = x * y2 - y * x2;
696 float num4 = x * x2 + y * y2 + z * z2;
698 result.X = x * w2 + x2 * w + num;
699 result.Y = y * w2 + y2 * w + num2;
700 result.Z = z * w2 + z2 * w + num3;
701 result.W = w * w2 - num4;
708 result.X = quaternion1.X * scaleFactor;
709 result.Y = quaternion1.Y * scaleFactor;
710 result.Z = quaternion1.Z * scaleFactor;
711 result.W = quaternion1.W * scaleFactor;
717 float x = quaternion1.
X;
718 float y = quaternion1.
Y;
719 float z = quaternion1.
Z;
720 float w = quaternion1.
W;
721 float num = quaternion2.X * quaternion2.X + quaternion2.Y * quaternion2.Y + quaternion2.Z * quaternion2.Z + quaternion2.W * quaternion2.
W;
722 float num2 = 1f / num;
723 float num3 = (0f - quaternion2.
X) * num2;
724 float num4 = (0f - quaternion2.
Y) * num2;
725 float num5 = (0f - quaternion2.
Z) * num2;
726 float num6 = quaternion2.W * num2;
727 float num7 = y * num5 - z * num4;
728 float num8 = z * num3 - x * num5;
729 float num9 = x * num4 - y * num3;
730 float num10 = x * num3 + y * num4 + z * num5;
732 result.X = x * num6 + num3 * w + num7;
733 result.Y = y * num6 + num4 * w + num8;
734 result.Z = z * num6 + num5 * w + num9;
735 result.W = w * num6 - num10;
static CultureInfo CurrentCulture
static double Acos(double d)
static double Cos(double d)
static double Sqrt(double d)
static double Sin(double a)
static bool operator==(Quaternion quaternion1, Quaternion quaternion2)
static Quaternion CreateFromRotationMatrix(Matrix matrix)
static Quaternion Subtract(Quaternion quaternion1, Quaternion quaternion2)
static void CreateFromAxisAngle(ref Vector3 axis, float angle, out Quaternion result)
static bool operator!=(Quaternion quaternion1, Quaternion quaternion2)
static void Lerp(ref Quaternion quaternion1, ref Quaternion quaternion2, float amount, out Quaternion result)
override string ToString()
static void CreateFromYawPitchRoll(float yaw, float pitch, float roll, out Quaternion result)
static Quaternion Conjugate(Quaternion value)
static void Subtract(ref Quaternion quaternion1, ref Quaternion quaternion2, out Quaternion result)
static void Multiply(ref Quaternion quaternion1, float scaleFactor, out Quaternion result)
static Quaternion Lerp(Quaternion quaternion1, Quaternion quaternion2, float amount)
static Quaternion operator*(Quaternion quaternion1, Quaternion quaternion2)
static void Negate(ref Quaternion quaternion, out Quaternion result)
static Quaternion CreateFromAxisAngle(Vector3 axis, float angle)
static void Add(ref Quaternion quaternion1, ref Quaternion quaternion2, out Quaternion result)
static void Conjugate(ref Quaternion value, out Quaternion result)
static Quaternion Normalize(Quaternion quaternion)
Quaternion(float x, float y, float z, float w)
static void Dot(ref Quaternion quaternion1, ref Quaternion quaternion2, out float result)
override int GetHashCode()
bool Equals(Quaternion other)
static void Concatenate(ref Quaternion value1, ref Quaternion value2, out Quaternion result)
static void Normalize(ref Quaternion quaternion, out Quaternion result)
static Quaternion Identity
static Quaternion Inverse(Quaternion quaternion)
static Quaternion Slerp(Quaternion quaternion1, Quaternion quaternion2, float amount)
static void Slerp(ref Quaternion quaternion1, ref Quaternion quaternion2, float amount, out Quaternion result)
static float Dot(Quaternion quaternion1, Quaternion quaternion2)
static Quaternion Add(Quaternion quaternion1, Quaternion quaternion2)
static Quaternion Multiply(Quaternion quaternion1, float scaleFactor)
static Quaternion Concatenate(Quaternion value1, Quaternion value2)
Quaternion(Vector3 vectorPart, float scalarPart)
static void CreateFromRotationMatrix(ref Matrix matrix, out Quaternion result)
static Quaternion operator/(Quaternion quaternion1, Quaternion quaternion2)
static Quaternion CreateFromYawPitchRoll(float yaw, float pitch, float roll)
override bool Equals(object obj)
static Quaternion Divide(Quaternion quaternion1, Quaternion quaternion2)
static void Inverse(ref Quaternion quaternion, out Quaternion result)
static void Divide(ref Quaternion quaternion1, ref Quaternion quaternion2, out Quaternion result)
static Quaternion operator+(Quaternion quaternion1, Quaternion quaternion2)
static Quaternion Multiply(Quaternion quaternion1, Quaternion quaternion2)
static Quaternion Negate(Quaternion quaternion)
static void Multiply(ref Quaternion quaternion1, ref Quaternion quaternion2, out Quaternion result)
static Quaternion operator-(Quaternion quaternion)
static Quaternion _identity