记录一下开发过程用到的向量方法
向量夹角的cos值
export function vectorAngleCos(a, b) {
return (
(a[0] * b[0] + a[1] * b[1]) /
(Math.sqrt(a[0] ** 2 + a[1] ** 2) * Math.sqrt(b[0] ** 2 + b[1] ** 2))
);
}
向量夹角的一半的cos值
export function vectorAngleCosHalf(a, b) {
return Math.sqrt((1 + vectorAngleCos(a, b)) / 2);
}
将点绕原点旋转
export function rotateVector([x1, y1], angle) {
let x2 = x1 * Math.cos(angle) - y1 * Math.sin(angle);
let y2 = y1 * Math.cos(angle) + x1 * Math.sin(angle);
return [x2, y2];
}
三个点求中间点夹角的cos值,
export function vectorAngleCos(p1, p2, p3, x = "x", y = "y") {
let a = [p2[x] - p1[x], p2[y] - p1[y]];
let b = [p3[x] - p2[x], p3[y] - p2[y]];
return (
(a[0] * b[0] + a[1] * b[1]) /
(Math.sqrt(a[0] ** 2 + a[1] ** 2) * Math.sqrt(b[0] ** 2 + b[1] ** 2))
);
}