MathUtils.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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 c2 = cos(b / 2);
  10. var s2 = sin(b / 2);
  11. var c13 = cos((a + c) / 2);
  12. var s13 = sin((a + c) / 2);
  13. var c1_3 = cos((a - c) / 2);
  14. var s1_3 = sin((a - c) / 2);
  15. var c3_1 = cos((c - a) / 2);
  16. var s3_1 = sin((c - a) / 2);
  17. if (order === 'XYX') {
  18. q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13);
  19. } else if (order === 'YZY') {
  20. q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13);
  21. } else if (order === 'ZXZ') {
  22. q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13);
  23. } else if (order === 'XZX') {
  24. q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13);
  25. } else if (order === 'YXY') {
  26. q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13);
  27. } else if (order === 'ZYZ') {
  28. q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13);
  29. }
  30. else {
  31. console.warn('THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order.');
  32. }
  33. }
  34. }