-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvector.js
More file actions
32 lines (25 loc) · 1.06 KB
/
vector.js
File metadata and controls
32 lines (25 loc) · 1.06 KB
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
export default class Vector {
constructor(x, y, z) {
this.components = [x, y, z];
this.magnitude = Math.sqrt(x*x + y*y + z*z);
}
normalize() {
this.components = this.components.map(component => component/this.magnitude);
}
subtract(vector) {
return new Vector(...this.components.map((component, index) => component - vector.components[index]));
}
scale(factor) {
return new Vector(...this.components.map((component, index) => component * factor));
}
dot(vector) {
return this.components.map((component, index) => component * vector.components[index]).reduce((prev, current) => prev + current);
}
cross(vector) {
return new Vector(
this.components[1] * vector.components[2] - this.components[2] * vector.components[1],
this.components[2] * vector.components[0] - this.components[0] * vector.components[2],
this.components[0] * vector.components[1] - this.components[1] * vector.components[0],
);
}
}