var vec2 = require('@antv/gl-matrix/lib/gl-matrix/vec2'); var clamp = require('../math/clamp'); vec2.angle = function (v1, v2) { var theta = vec2.dot(v1, v2) / (vec2.length(v1) * vec2.length(v2)); return Math.acos(clamp(theta, -1, 1)); }; /** * 向量 v1 到 向量 v2 夹角的方向 * @param {Array} v1 向量 * @param {Array} v2 向量 * @return {Boolean} >= 0 顺时针 < 0 逆时针 */ vec2.direction = function (v1, v2) { return v1[0] * v2[1] - v2[0] * v1[1]; }; vec2.angleTo = function (v1, v2, direct) { var angle = vec2.angle(v1, v2); var angleLargeThanPI = vec2.direction(v1, v2) >= 0; if (direct) { if (angleLargeThanPI) { return Math.PI * 2 - angle; } return angle; } if (angleLargeThanPI) { return angle; } return Math.PI * 2 - angle; }; vec2.vertical = function (out, v, flag) { if (flag) { out[0] = v[1]; out[1] = -1 * v[0]; } else { out[0] = -1 * v[1]; out[1] = v[0]; } return out; }; module.exports = vec2;