2020-05-04 15:17:55 +00:00
|
|
|
class Vector
|
|
|
|
{
|
|
|
|
constructor(x = 0, y = 0)
|
|
|
|
{
|
|
|
|
this.x = x;
|
|
|
|
this.y = y;
|
|
|
|
}
|
|
|
|
|
|
|
|
add(vector)
|
|
|
|
{
|
|
|
|
this.x += vector.x;
|
|
|
|
this.y += vector.y;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
2020-05-04 16:17:25 +00:00
|
|
|
addMul(vector, scalar)
|
2020-05-04 15:17:55 +00:00
|
|
|
{
|
2020-05-04 16:17:25 +00:00
|
|
|
this.x += vector.x * scalar;
|
|
|
|
this.y += vector.y * scalar;
|
|
|
|
return this;
|
2020-05-04 15:17:55 +00:00
|
|
|
}
|
|
|
|
|
2020-05-04 16:17:25 +00:00
|
|
|
sub(vector)
|
2020-05-04 15:17:55 +00:00
|
|
|
{
|
|
|
|
this.x -= vector.x;
|
|
|
|
this.y -= vector.y;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
mul(scalar)
|
|
|
|
{
|
|
|
|
this.x *= scalar;
|
|
|
|
this.y *= scalar;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
div(scalar)
|
|
|
|
{
|
|
|
|
return this.mul(1 / scalar);
|
|
|
|
}
|
|
|
|
|
|
|
|
rotate(angle)
|
|
|
|
{
|
|
|
|
const cos = Math.cos(angle);
|
|
|
|
const sin = Math.sin(angle);
|
2020-05-04 16:17:25 +00:00
|
|
|
const nextX = cos * this.x - sin * this.y;
|
|
|
|
const nextY = cos * this.y + sin * this.x;
|
2020-05-04 15:17:55 +00:00
|
|
|
|
2020-05-04 16:17:25 +00:00
|
|
|
this.x = nextX;
|
|
|
|
this.y = nextY;
|
|
|
|
return this;
|
2020-05-04 15:17:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
angle()
|
|
|
|
{
|
|
|
|
return Math.PI / 2 - Math.atan2(this.x, this.y);
|
|
|
|
}
|
|
|
|
|
|
|
|
normSquared()
|
|
|
|
{
|
|
|
|
return this.x * this.x + this.y * this.y;
|
|
|
|
}
|
2020-05-04 16:17:25 +00:00
|
|
|
|
|
|
|
static distSquared(lhs, rhs)
|
|
|
|
{
|
|
|
|
return (
|
|
|
|
(lhs.x - rhs.x) * (lhs.x - rhs.x)
|
|
|
|
+ (lhs.y - rhs.y) * (lhs.y - rhs.y)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
reset()
|
|
|
|
{
|
|
|
|
this.x = 0;
|
|
|
|
this.y = 0;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
clone()
|
|
|
|
{
|
|
|
|
return new Vector(this.x, this.y);
|
|
|
|
}
|
2020-05-04 15:17:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export default Vector;
|