vec2.js 1001 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. var vec2 = require('@antv/gl-matrix/lib/gl-matrix/vec2');
  2. var clamp = require('../math/clamp');
  3. vec2.angle = function (v1, v2) {
  4. var theta = vec2.dot(v1, v2) / (vec2.length(v1) * vec2.length(v2));
  5. return Math.acos(clamp(theta, -1, 1));
  6. };
  7. /**
  8. * 向量 v1 到 向量 v2 夹角的方向
  9. * @param {Array} v1 向量
  10. * @param {Array} v2 向量
  11. * @return {Boolean} >= 0 顺时针 < 0 逆时针
  12. */
  13. vec2.direction = function (v1, v2) {
  14. return v1[0] * v2[1] - v2[0] * v1[1];
  15. };
  16. vec2.angleTo = function (v1, v2, direct) {
  17. var angle = vec2.angle(v1, v2);
  18. var angleLargeThanPI = vec2.direction(v1, v2) >= 0;
  19. if (direct) {
  20. if (angleLargeThanPI) {
  21. return Math.PI * 2 - angle;
  22. }
  23. return angle;
  24. }
  25. if (angleLargeThanPI) {
  26. return angle;
  27. }
  28. return Math.PI * 2 - angle;
  29. };
  30. vec2.vertical = function (out, v, flag) {
  31. if (flag) {
  32. out[0] = v[1];
  33. out[1] = -1 * v[0];
  34. } else {
  35. out[0] = -1 * v[1];
  36. out[1] = v[0];
  37. }
  38. return out;
  39. };
  40. module.exports = vec2;