41 lines
1012 B
JavaScript

export class Vector2 {
constructor(x = 0, y = 0) {
this.x = x;
this.y = y;
}
// 向量加法
add(v) {
return new Vector2(this.x + v.x, this.y + v.y);
}
// 向量减法
subtract(v) {
return new Vector2(this.x - v.x, this.y - v.y);
}
// 向量缩放
scale(scalar) {
return new Vector2(this.x * scalar, this.y * scalar);
}
// 向量归一化
normalize() {
const len = this.length();
return len > 0 ? this.scale(1 / len) : new Vector2();
}
// 向量长度
length() {
return Math.sqrt(this.x * this.x + this.y * this.y);
}
// 计算两点间距离
distanceTo(v) {
return this.subtract(v).length();
}
// 克隆向量
clone() {
return new Vector2(this.x, this.y);
}
// 限制向量长度
clampLength(maxLength) {
const len = this.length();
return len > maxLength ? this.normalize().scale(maxLength) : this.clone();
}
}