function vec2(a,b){ this.a = a this.b = b } vec2.prototype.magnitude = function(){ return this.b-this.a } vec2.prototype.length = function(){ return abs(this.b-this.a) } vec2.prototype.clone = function(){ return new vec2(this.a, this.b) } vec2.prototype.abs = function(){ if (this.b < this.a) { this.a = this.a ^ this.b this.b = this.a ^ this.b this.a = this.a ^ this.b } return this } vec2.prototype.midpoint = function(){ return lerp(0.5, this.a, this.b) } vec2.prototype.add = function(n){ this.a += n this.b += n } vec2.prototype.sub = function(n){ this.a -= n this.b -= n } vec2.prototype.mul = function(n){ this.a *= n this.b *= n } vec2.prototype.div = function(n){ this.a /= n this.b /= n } vec2.prototype.contains = function(n){ return this.a <= n && n <= this.b } // assumes (vec2)v falls to the right of (vec2)this vec2.prototype.intersects = function(v){ return (this.b > v.a) || (v.b > this.a) } vec2.prototype.union = function(v){ if (this.intersects(v)) { return new vec2( min(this.a,v.a), max(this.b, v.b) ) } } vec2.prototype.intersection = function(v){ if (this.intersects(v)) { return new vec2( max(this.a,v.a), min(this.b, v.b) ) } } vec2.prototype.toString = function(){ return "[" + this.a + " " + this.b + "]" } vec2.prototype.quantize = function(n){ n = n || 10 this.a = quantize(this.a, n) this.b = quantize(this.b, n) }