modeling/src/maths/vec3/rotateX.js

  1. /**
  2. * Rotate the given vector around the given origin, X axis only.
  3. *
  4. * @param {vec3} out - receiving vector
  5. * @param {vec3} vector - vector to rotate
  6. * @param {vec3} origin - origin of the rotation
  7. * @param {Number} radians - angle of rotation
  8. * @returns {vec3} out
  9. * @alias module:modeling/maths/vec3.rotateX
  10. */
  11. const rotateX = (out, vector, origin, radians) => {
  12. const p = []
  13. const r = []
  14. // translate point to the origin
  15. p[0] = vector[0] - origin[0]
  16. p[1] = vector[1] - origin[1]
  17. p[2] = vector[2] - origin[2]
  18. // perform rotation
  19. r[0] = p[0]
  20. r[1] = p[1] * Math.cos(radians) - p[2] * Math.sin(radians)
  21. r[2] = p[1] * Math.sin(radians) + p[2] * Math.cos(radians)
  22. // translate to correct position
  23. out[0] = r[0] + origin[0]
  24. out[1] = r[1] + origin[1]
  25. out[2] = r[2] + origin[2]
  26. return out
  27. }
  28. module.exports = rotateX