diff options
| author | Julie Lala <jules@okfoc.us> | 2014-07-23 11:11:08 -0400 |
|---|---|---|
| committer | Julie Lala <jules@okfoc.us> | 2014-07-23 11:11:08 -0400 |
| commit | 8a8b78b3f6a4ce930263099fe14b0fe86d11597f (patch) | |
| tree | 005aa6cd0d9e73cd75a02a6aab12f785788e0cc6 /public/assets/javascripts/rectangles/models/vec2.js | |
| parent | 52d18ddb211a7f4ee814ef23ff09656134810519 (diff) | |
shorter stack traces
Diffstat (limited to 'public/assets/javascripts/rectangles/models/vec2.js')
| -rw-r--r-- | public/assets/javascripts/rectangles/models/vec2.js | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/public/assets/javascripts/rectangles/models/vec2.js b/public/assets/javascripts/rectangles/models/vec2.js index 4480473..447c7a3 100644 --- a/public/assets/javascripts/rectangles/models/vec2.js +++ b/public/assets/javascripts/rectangles/models/vec2.js @@ -110,7 +110,7 @@ // 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 = [] + var intervals = [], _len if (this.eq(v)) { intervals.push([ new vec2( this.a, this.b ), left | right ]) @@ -119,12 +119,12 @@ // 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 ]) + intervals.push([ new vec2( v.a, this.b ), right ]) } // 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( this.a, v.b ), left ]) intervals.push([ new vec2( v.b, this.b ), right ]) } @@ -137,7 +137,20 @@ // 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 ]) + intervals.push([ new vec2( this.a, this.b ), left | right ]) + } + + // cull empty vectors + _len = intervals.length + if (_len > 1) { + if (intervals[0][0].magnitude() == 0) { + intervals[1][1] |= intervals[0][1] + intervals.shift() + } + else if (intervals[_len-1][0].magnitude() == 0) { + intervals[_len-2][1] |= intervals[_len-1][1] + intervals.pop() + } } return intervals |
