/* vect3.js Vector in 3-d Cartesian coordinate system Sparisoma Viridi | dudung@gmail.com 20171226 Create this object (again). 20171227 Add some comments for clearer documentation. */ // Define class of Vect3 class Vect3 { // Create three different types of constructor constructor() { if(arguments.length == 0) { this.x = 0.0; this.y = 0.0; this.z = 0.0; } else if(arguments.length == 3) { this.x = arguments[0]; this.y = arguments[1]; this.z = arguments[2]; } else if(arguments.length == 1) { if(arguments[0] instanceof Vect3) this.x = arguments[0].x; this.y = arguments[0].y; this.z = arguments[0].z; } } // Get string value strval() { var s = "("; s += this.x + ", "; s += this.y + ", "; s += this.z; s += ")"; return s; } // Add some Vect3 static add() { var N = arguments.length; var x = 0.0; var y = 0.0; var z = 0.0; for(var i = 0; i < N; i++) { x += arguments[i].x; y += arguments[i].y; z += arguments[i].z; } var p = new Vect3(x, y, z); return p; } // Substract two Vect3 static sub() { var x = arguments[0].x - arguments[1].x; var y = arguments[0].y - arguments[1].y; var z = arguments[0].z - arguments[1].z; var p = new Vect3(x, y, z); return p; } // Multiply Vect3 with scalar or vice versa static mul() { var a = arguments[0]; var b = arguments[1]; var x, y, z; if(a instanceof Vect3) { x = a.x * b; y = a.y * b; z = a.z * b; } else if(b instanceof Vect3) { x = a * b.x; y = a * b.y; z = a * b.z; } var p = new Vect3(x, y, z); return p; } // Divide Vect3 with scalar static div() { var a = arguments[0]; var b = arguments[1]; var x = a.x / b; var y = a.y / b; var z = a.z / b; var p = new Vect3(x, y, z); return p; } // Dot two Vect3 static dot() { var a = arguments[0]; var b = arguments[1]; var xx = a.x * b.x; var yy = a.y * b.y; var zz = a.z * b.z; var d = xx + yy + zz; return d; } // Cross two Vect3 static cross() { var a = arguments[0]; var b = arguments[1]; var x = a.y * b.z - a.z * b.y; var y = a.z * b.x - a.x * b.z; var z = a.x * b.y - a.y * b.x; var p = new Vect3(x, y, z) return p; } // Get length of a Vect3 len() { var l = Math.sqrt(Vect3.dot(this, this)); return l; } // Get unit vector of a Vect3 unit() { var l = this.len(); var p = Vect3.div(this, l); return p; } }