MathUtils.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /**
  2. * @author WestLangley
  3. * @author thezwap
  4. */
  5. THREE.MathUtils = {
  6. setQuaternionFromProperEuler: function (q, a, b, c, order) {
  7. var cos = Math.cos;
  8. var sin = Math.sin;
  9. var c1 = cos(a / 2);
  10. var c2 = cos(b / 2);
  11. var c3 = cos(c / 2);
  12. var s1 = sin(a / 2);
  13. var s2 = sin(b / 2);
  14. var s3 = sin(c / 2);
  15. var c13 = cos((a + c) / 2);
  16. var s13 = sin((a + c) / 2);
  17. var c1_3 = cos((a - c) / 2);
  18. var s1_3 = sin((a - c) / 2);
  19. var c3_1 = cos((c - a) / 2);
  20. var s3_1 = sin((c - a) / 2);
  21. var qx = 0;
  22. var qy = 0;
  23. var qz = 0;
  24. var qw = 0;
  25. if (order === 'XYX') {
  26. qx = c2 * s13;
  27. qy = s2 * c1_3;
  28. qz = s2 * s1_3;
  29. qw = c2 * c13;
  30. } else if (order === 'YZY') {
  31. qx = s2 * s1_3;
  32. qy = c2 * s13;
  33. qz = s2 * c1_3;
  34. qw = c2 * c13;
  35. } else if (order === 'ZXZ') {
  36. qx = s2 * c1_3;
  37. qy = s2 * s1_3;
  38. qz = c2 * s13;
  39. qw = c2 * c13;
  40. } else if (order === 'XZX') {
  41. qx = c2 * s13;
  42. qy = s2 * s3_1;
  43. qz = s2 * c3_1;
  44. qw = c2 * c13;
  45. } else if (order === 'YXY') {
  46. qx = s2 * c3_1;
  47. qy = c2 * s13;
  48. qz = s2 * s3_1;
  49. qw = c2 * c13;
  50. } else if (order === 'ZYZ') {
  51. qx = s2 * s3_1;
  52. qy = s2 * c3_1;
  53. qz = c2 * s13;
  54. qw = c2 * c13;
  55. }
  56. else {
  57. console.warn('THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order.');
  58. }
  59. q.set( qx, qy, qz, qw);
  60. }
  61. }