StructV2/src/Common/vector.ts
Phenom 72fcf5394a 基本重构完成
底层渲染库舍弃 zrender,换为 antvG6
2021-04-06 21:45:11 +08:00

118 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export const Vector = {
/**
* 向量相加
* @param v1
* @param v2
*/
add(v1: [number, number], v2: [number, number]): [number, number] {
return [v1[0] + v2[0], v1[1] + v2[1]];
},
/**
* 向量相减
* @param v1
* @param v2
*/
subtract(v1: [number, number], v2: [number, number]): [number, number] {
return [v1[0] - v2[0], v1[1] - v2[1]];
},
/**
* 向量点积
* @param v1
* @param v2
*/
dot(v1: [number, number], v2: [number, number]): number {
return v1[0] * v2[0] + v1[1] * v2[1];
},
/**
* 向量缩放
* @param v
* @param n
*/
scale(v: [number, number], n: number): [number, number] {
return [v[0] * n, v[1] * n];
},
/**
* 向量求模长
* @param v
*/
length(v: [number, number]): number {
return Math.sqrt(v[0]**2 + v[1]**2);
},
/**
* 绕某点旋转向量
* @param radian 角度(弧度制)
* @param point 旋转的点
* @param center 绕的点
*/
rotation(radian: number, point: [number, number], center: [number, number] = [0, 0]): [number, number] {
if(radian === 0) return point;
radian = -radian;
let cos = Math.cos(radian),
sin = Math.sin(radian),
dv = [point[0] - center[0], point[1] - center[1]],
v = [0, 0];
v[0] = center[0] + (dv[0] * cos - dv[1] * sin);
v[1] = center[1] + (dv[0] * sin + dv[1] * cos);
return v as [number, number];
},
/**
* 求向量法向
*/
tangent(v: [number, number]): [number, number] {
return [-v[1], v[0]];
},
/**
* 向量单位化
*/
normalize(v: [number, number]): [number, number] {
let len = Vector.length(v);
if(len === 0) {
return [0, 0];
}
else if(len === 1) {
return v;
}
else {
return [v[0] / len, v[1] / len];
}
},
/**
* 求一个向量按照direction方向延长len长度后的坐标
* @param v
* @param direction
* @param len
*/
location(v: [number, number], direction: [number, number], len: number): [number, number] {
return Vector.add(v, Vector.scale(Vector.normalize(direction), len));
},
/**
* 向量取反
*/
negative(v: [number, number]): [number, number] {
return Vector.scale(v, -1);
}
};