summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/rectangles/models/vec2.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/rectangles/models/vec2.js')
-rw-r--r--public/assets/javascripts/rectangles/models/vec2.js39
1 files changed, 38 insertions, 1 deletions
diff --git a/public/assets/javascripts/rectangles/models/vec2.js b/public/assets/javascripts/rectangles/models/vec2.js
index 9c6fd99..4480473 100644
--- a/public/assets/javascripts/rectangles/models/vec2.js
+++ b/public/assets/javascripts/rectangles/models/vec2.js
@@ -80,7 +80,7 @@
return clamp(n, this.a+r, this.b-r)
}
vec2.prototype.intersects = function(v){
- if (this.a == v.a) { // || this.b == v.b || this.a == v.b || this.b == v.a) {
+ if (this.a == v.a || this.b == v.b || this.a == v.b || this.b == v.a) {
return true
}
else if (this.a < v.a) {
@@ -106,6 +106,43 @@
return new vec2( max(this.a,v.a), min(this.b, v.b) )
}
}
+
+ // given two vectors, test how they overlap
+ // return the set of overlapping segments in the initial vector, labelled with sides
+ vec2.prototype.split = function(v, left, right){
+ var intervals = []
+
+ if (this.eq(v)) {
+ intervals.push([ new vec2( this.a, this.b ), left | right ])
+ }
+
+ // a---A===b---B (rightways overlap)
+ else if (this.contains(v.a) && v.contains(this.b)) {
+ intervals.push([ new vec2( this.a, v.a ), left ])
+ intervals.push([ new vec2( v.a, this.b ), 0 ])
+ }
+
+ // A---a===B---b (leftways overlap)
+ else if (v.contains(this.a) && this.contains(v.b)) {
+ intervals.push([ new vec2( this.a, v.b ), 0 ])
+ intervals.push([ new vec2( v.b, this.b ), right ])
+ }
+
+ // a---A===B---b (contains v)
+ else if (this.contains(v.a) && this.contains(v.b)) {
+ intervals.push([ new vec2( this.a, v.a ), left ])
+ intervals.push([ new vec2( v.a, v.b ), 0 ])
+ intervals.push([ new vec2( v.b, this.b ), right ])
+ }
+
+ // A---a===b---B (contained in v)
+ else { // if (v.contains(this.a) && v.contains(v.b)) {
+ intervals.push([ new vec2( this.a, this.b ), 0 ])
+ }
+
+ return intervals
+ }
+
vec2.prototype.toString = function(){
return "[" + ~~this.a + " " + ~~this.b + "]"
}