-
Notifications
You must be signed in to change notification settings - Fork 0
/
vector.js
56 lines (46 loc) · 1.04 KB
/
vector.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class Vector {
constructor(x, y) {
this.x = x;
this.y = y;
}
static diff(v1, v2) {
return new Vector(v1.x - v2.x, v1.y - v2.y);
}
static add(v1, v2) {
return Vector(v1.x + v2.x, v1.y + v2.y);
}
add(v) {
this.x += v.x;
this.y += v.y;
return this;
}
mult(factor) {
this.x *= factor;
this.y *= factor;
return this;
}
setValue(x, y) {
this.x = x;
this.y = y;
}
magnitude() {
return Math.sqrt(this.x * this.x + this.y * this.y);
}
normalize() {
var magnitudeVal = this.magnitude();
this.x /= Math.abs(magnitudeVal);
this.y /= Math.abs(magnitudeVal);
return this;
}
truncate(maxValue) {
var magnitudeVal = this.magnitude();
if (magnitudeVal > maxValue) {
this.normalize();
this.mult(maxValue);
}
return this;
}
get key() {
return Math.floor(this.x) + "|" + Math.floor(this.y);
}
}