-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvector.js
More file actions
94 lines (79 loc) · 2.12 KB
/
vector.js
File metadata and controls
94 lines (79 loc) · 2.12 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
export default class Vector {
constructor(components) {
this.data = components;
}
size() {
return this.data.length;
}
add(vector) {
if (vector.size() !== this.size()) {
throw new Error('vector: Incompatible vectors.');
}
return new Vector(this.data.map((el, index) => el + vector.data[index]));
}
subtract(vector) {
if (vector.size() !== this.size()) {
throw new Error('vector: Incompatible vectors.');
}
return new Vector(this.data.map((el, index) => el - vector.data[index]));
}
dot(vector) {
if (vector.size() !== this.size()) {
throw new Error('vector: Incompatible vectors.');
}
return this.data.reduce(
(product, el, i) => product + el * vector.data[i],
0
);
}
norm() {
return Math.sqrt(
this.data.reduce((output, el) => output + el ** 2),
0
);
}
toString() {
return `(${this.data.join(',')})`;
}
equals(vector) {
return this.data.every((el, i) => el === vector.data[i]);
}
}
/**
export default function Vector(components) {
this.data = components;
}
Vector.prototype.size = function () {
return this.data.length;
};
Vector.prototype.add = function (vector) {
if (vector.size() !== this.size()) {
throw new Error('vector: Incompatible vectors.');
}
return new Vector(this.data.map((el, index) => el + vector.data[index]));
};
Vector.prototype.subtract = function (vector) {
if (vector.size() !== this.size()) {
throw new Error('vector: Incompatible vectors.');
}
return new Vector(this.data.map((el, index) => el - vector.data[index]));
};
Vector.prototype.dot = function (vector) {
if (vector.size() !== this.size()) {
throw new Error('vector: Incompatible vectors.');
}
return this.data.reduce((product, el, i) => product + el * vector.data[i], 0);
};
Vector.prototype.norm = function () {
return Math.sqrt(
this.data.reduce((output, el) => output + el ** 2),
0
);
};
Vector.prototype.toString = function () {
return `(${this.data.join(',')})`;
};
Vector.prototype.equals = function (vector) {
return this.data.every((el, i) => el === vector.data[i]);
};
*/