46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
|
|
/** 2d 向量 */
|
||
|
|
class Vector2 {
|
||
|
|
public x: number;
|
||
|
|
public y: number;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 从两个值构造一个带有X和Y的二维向量。
|
||
|
|
* @param x 二维空间中的x坐标
|
||
|
|
* @param y 二维空间的y坐标
|
||
|
|
*/
|
||
|
|
constructor(x: number, y: number){
|
||
|
|
this.x = x;
|
||
|
|
this.y = y;
|
||
|
|
}
|
||
|
|
|
||
|
|
public static add(value1: Vector2, value2: Vector2){
|
||
|
|
value1.x += value2.x;
|
||
|
|
value1.y += value2.y;
|
||
|
|
return value1;
|
||
|
|
}
|
||
|
|
|
||
|
|
public static divide(value1: Vector2, value2: Vector2){
|
||
|
|
value1.x /= value2.x;
|
||
|
|
value1.y /= value2.y;
|
||
|
|
return value1;
|
||
|
|
}
|
||
|
|
|
||
|
|
public static multiply(value1: Vector2, value2: Vector2){
|
||
|
|
value1.x *= value2.x;
|
||
|
|
value1.y *= value2.y;
|
||
|
|
return value1;
|
||
|
|
}
|
||
|
|
|
||
|
|
public static subtract(value1: Vector2, value2: Vector2){
|
||
|
|
value1.x -= value2.x;
|
||
|
|
value1.y -= value2.y;
|
||
|
|
return value1;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 变成一个方向相同的单位向量 */
|
||
|
|
public normalize(){
|
||
|
|
let val = 1 / Math.sqrt((this.x * this.x) + (this.y * this.y));
|
||
|
|
this.x *= val;
|
||
|
|
this.y *= val;
|
||
|
|
}
|
||
|
|
}
|