summaryrefslogtreecommitdiff
path: root/vec2.js
diff options
context:
space:
mode:
Diffstat (limited to 'vec2.js')
-rw-r--r--vec2.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/vec2.js b/vec2.js
new file mode 100644
index 0000000..1860179
--- /dev/null
+++ b/vec2.js
@@ -0,0 +1,66 @@
+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.normalize = 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)
+}
+