github.com/nicgrayson/terraform@v0.4.3-0.20150415203910-c4de50829380/website/source/assets/javascripts/lib/Vector.js (about) 1 (function(global){ 'use strict'; 2 3 var Vector = function(x, y){ 4 this.x = x || 0; 5 this.y = y || 0; 6 }; 7 8 Vector.prototype = { 9 10 clone: function(){ 11 return new Vector(this.x, this.y); 12 }, 13 14 add: function(vec){ 15 this.x += vec.x; 16 this.y += vec.y; 17 return this; 18 }, 19 20 sub: function(vec){ 21 this.x -= vec.x; 22 this.y -= vec.y; 23 return this; 24 }, 25 26 subVal: function(val){ 27 this.x -= val; 28 this.y -= val; 29 return this; 30 }, 31 32 mult: function(mul){ 33 this.x *= mul; 34 this.y *= mul; 35 return this; 36 }, 37 38 div: function(div){ 39 if (div === 0) { 40 return this; 41 } 42 this.x /= div; 43 this.y /= div; 44 return this; 45 }, 46 47 mag: function(){ 48 return Math.sqrt( 49 this.x * this.x + 50 this.y * this.y 51 ); 52 }, 53 54 limit: function(max){ 55 if (this.mag() > max) { 56 this.normalize(); 57 this.mult(max); 58 } 59 return this; 60 }, 61 62 normalize: function(){ 63 var mag = this.mag(); 64 if (mag === 0) { 65 return this; 66 } 67 this.div(mag); 68 return this; 69 }, 70 71 heading: function(){ 72 return Math.atan2(this.y, this.x); 73 }, 74 75 set: function(vec){ 76 this.x = vec.x; 77 this.y = vec.y; 78 return this; 79 } 80 81 }; 82 83 Vector.add = function(vec1, vec2){ 84 return vec1.clone().add(vec2.clone()); 85 }; 86 87 Vector.sub = function(vec1, vec2){ 88 return vec1.clone().sub(vec2.clone()); 89 }; 90 91 Vector.mult = function(vec, mult){ 92 return vec.clone().mult(mult); 93 }; 94 95 Vector.div = function(vec, div){ 96 return vec.clone().div(div); 97 }; 98 99 // Ripped from processing 100 Vector.random2D = function(){ 101 var angle = Math.random(0, 1) * Math.PI * 2; 102 return new Vector(Math.cos(angle), Math.sin(angle)); 103 }; 104 105 Vector.coerce = function(obj){ 106 return new Vector(obj.x, obj.y); 107 }; 108 109 global.Vector = Vector; 110 111 })(this);