Files
esengine/source/src/Math/Vector2.ts

80 lines
2.1 KiB
TypeScript
Raw Normal View History

2020-06-08 11:49:45 +08:00
/** 2d 向量 */
class Vector2 {
2020-06-08 16:23:48 +08:00
public x: number = 0;
public y: number = 0;
2020-06-09 22:32:18 +08:00
private static readonly zeroVector = new Vector2(0, 0);
private static readonly unitVector = new Vector2(1, 1);
2020-06-08 16:23:48 +08:00
public static get One(){
2020-06-09 22:32:18 +08:00
return this.unitVector;
}
public static get Zero(){
return this.zeroVector;
2020-06-08 16:23:48 +08:00
}
2020-06-08 11:49:45 +08:00
/**
* 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;
}
2020-06-08 16:23:48 +08:00
2020-06-09 22:32:18 +08:00
/**
*
* @param value1
* @param value2
*/
public static dot(value1: Vector2, value2: Vector2): number{
return (value1.x * value2.x) + (value1.y * value2.y);
}
/**
*
* @param value1
* @param value2
*/
public static distanceSquared(value1: Vector2, value2: Vector2){
let v1 = value1.x - value2.x, v2 = value1.y - value2.y;
return (v1 * v1) + (v2 * v2);
}
2020-06-08 16:23:48 +08:00
public static transform(position: Vector2, matrix: Matrix2D){
return new Vector2((position.x * matrix.m11) + (position.y * matrix.m21), (position.x * matrix.m12) + (position.y * matrix.m22));
}
2020-06-08 11:49:45 +08:00
}