Vector class
by Artem
JavaScript
'use strict';
var Vector = function(components) {
this.components = components;
};
Vector.prototype.isCorrect = function(vector) {
if (this.components.length !== vector.components.length) throw new Error('Different vector lengths');
};
Vector.prototype.toString = function() {
return '(' + this.components.toString() + ')';
};
Vector.prototype.equals = function(vector) {
if (this.components.length !== vector.components.length) return false;
const result = this.components.every((component, i) => component === vector.components[i]);
return result;
};
Vector.prototype.add = function(vector) {
try {
this.isCorrect(vector);
const result = this.components.map((component, i) => component + vector.components[i]);
return new Vector(result);
} catch (e) {
console.log(e);
throw e;
}
};
Vector.prototype.subtract = function(vector) {
try {
this.isCorrect(vector);
const result = this.components.map((component, i) => component - vector.components[i]);
return new Vector(result);
} catch (e) {
console.log(e);
throw e;
}
};
Vector.prototype.dot = function(vector) {
try {
this.isCorrect(vector);
const result = this.components.reduce((sum, prev, i) => {
return sum + prev * vector.components[i];
}, 0);
return result;
} catch (e) {
console.log(e);
throw e;
}
};
Vector.prototype.dot = function(vector) {
try {
this.isCorrect(vector);
const result = this.components.reduce((sum, prev, i) => {
return sum + prev * vector.components[i];
}, 0);
return result;
} catch (e) {
console.log(e);
throw e;
}
};
Vector.prototype.norm = function() {
const result = this.components.reduce((sum, prev, i) => {
return sum + Math.pow(prev, 2);
}, 0);
return Math.sqrt(result);
};
var a = new Vector([1, 2, 3]);
var b = new Vector([3, 4, 5]);
var c = new Vector([5, 6, 7, 8]);
console.log(a.add(b).equals(new Vector([4, 6, 8, 6])));