%PDF- %PDF-
Direktori : /home/opti/workflow/src/public/app-assets/vendors/js/charts/echarts/zrender/core/ |
Current File : /home/opti/workflow/src/public/app-assets/vendors/js/charts/echarts/zrender/core/vector.js |
define(function () { var ArrayCtor = typeof Float32Array === 'undefined' ? Array : Float32Array; /** * @typedef {Float32Array|Array.<number>} Vector2 */ /** * 二维向量类 * @exports zrender/tool/vector */ var vector = { /** * 创建一个向量 * @param {number} [x=0] * @param {number} [y=0] * @return {Vector2} */ create: function (x, y) { var out = new ArrayCtor(2); out[0] = x || 0; out[1] = y || 0; return out; }, /** * 复制向量数据 * @param {Vector2} out * @param {Vector2} v * @return {Vector2} */ copy: function (out, v) { out[0] = v[0]; out[1] = v[1]; return out; }, /** * 克隆一个向量 * @param {Vector2} v * @return {Vector2} */ clone: function (v) { var out = new ArrayCtor(2); out[0] = v[0]; out[1] = v[1]; return out; }, /** * 设置向量的两个项 * @param {Vector2} out * @param {number} a * @param {number} b * @return {Vector2} 结果 */ set: function (out, a, b) { out[0] = a; out[1] = b; return out; }, /** * 向量相加 * @param {Vector2} out * @param {Vector2} v1 * @param {Vector2} v2 */ add: function (out, v1, v2) { out[0] = v1[0] + v2[0]; out[1] = v1[1] + v2[1]; return out; }, /** * 向量缩放后相加 * @param {Vector2} out * @param {Vector2} v1 * @param {Vector2} v2 * @param {number} a */ scaleAndAdd: function (out, v1, v2, a) { out[0] = v1[0] + v2[0] * a; out[1] = v1[1] + v2[1] * a; return out; }, /** * 向量相减 * @param {Vector2} out * @param {Vector2} v1 * @param {Vector2} v2 */ sub: function (out, v1, v2) { out[0] = v1[0] - v2[0]; out[1] = v1[1] - v2[1]; return out; }, /** * 向量长度 * @param {Vector2} v * @return {number} */ len: function (v) { return Math.sqrt(this.lenSquare(v)); }, /** * 向量长度平方 * @param {Vector2} v * @return {number} */ lenSquare: function (v) { return v[0] * v[0] + v[1] * v[1]; }, /** * 向量乘法 * @param {Vector2} out * @param {Vector2} v1 * @param {Vector2} v2 */ mul: function (out, v1, v2) { out[0] = v1[0] * v2[0]; out[1] = v1[1] * v2[1]; return out; }, /** * 向量除法 * @param {Vector2} out * @param {Vector2} v1 * @param {Vector2} v2 */ div: function (out, v1, v2) { out[0] = v1[0] / v2[0]; out[1] = v1[1] / v2[1]; return out; }, /** * 向量点乘 * @param {Vector2} v1 * @param {Vector2} v2 * @return {number} */ dot: function (v1, v2) { return v1[0] * v2[0] + v1[1] * v2[1]; }, /** * 向量缩放 * @param {Vector2} out * @param {Vector2} v * @param {number} s */ scale: function (out, v, s) { out[0] = v[0] * s; out[1] = v[1] * s; return out; }, /** * 向量归一化 * @param {Vector2} out * @param {Vector2} v */ normalize: function (out, v) { var d = vector.len(v); if (d === 0) { out[0] = 0; out[1] = 0; } else { out[0] = v[0] / d; out[1] = v[1] / d; } return out; }, /** * 计算向量间距离 * @param {Vector2} v1 * @param {Vector2} v2 * @return {number} */ distance: function (v1, v2) { return Math.sqrt( (v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]) ); }, /** * 向量距离平方 * @param {Vector2} v1 * @param {Vector2} v2 * @return {number} */ distanceSquare: function (v1, v2) { return (v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]); }, /** * 求负向量 * @param {Vector2} out * @param {Vector2} v */ negate: function (out, v) { out[0] = -v[0]; out[1] = -v[1]; return out; }, /** * 插值两个点 * @param {Vector2} out * @param {Vector2} v1 * @param {Vector2} v2 * @param {number} t */ lerp: function (out, v1, v2, t) { out[0] = v1[0] + t * (v2[0] - v1[0]); out[1] = v1[1] + t * (v2[1] - v1[1]); return out; }, /** * 矩阵左乘向量 * @param {Vector2} out * @param {Vector2} v * @param {Vector2} m */ applyTransform: function (out, v, m) { var x = v[0]; var y = v[1]; out[0] = m[0] * x + m[2] * y + m[4]; out[1] = m[1] * x + m[3] * y + m[5]; return out; }, /** * 求两个向量最小值 * @param {Vector2} out * @param {Vector2} v1 * @param {Vector2} v2 */ min: function (out, v1, v2) { out[0] = Math.min(v1[0], v2[0]); out[1] = Math.min(v1[1], v2[1]); return out; }, /** * 求两个向量最大值 * @param {Vector2} out * @param {Vector2} v1 * @param {Vector2} v2 */ max: function (out, v1, v2) { out[0] = Math.max(v1[0], v2[0]); out[1] = Math.max(v1[1], v2[1]); return out; } }; vector.length = vector.len; vector.lengthSquare = vector.lenSquare; vector.dist = vector.distance; vector.distSquare = vector.distanceSquare; return vector; });