summaryrefslogtreecommitdiff
path: root/rect.js
diff options
context:
space:
mode:
Diffstat (limited to 'rect.js')
-rw-r--r--rect.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/rect.js b/rect.js
new file mode 100644
index 0000000..f643b6f
--- /dev/null
+++ b/rect.js
@@ -0,0 +1,90 @@
+function rect (x0,y0,x1,y1){
+ if (x0 instanceof vec2) {
+ this.x = x0
+ this.y = y0
+ }
+ else if (x1 === undefined) {
+ this.x = new vec2(x0,x0)
+ this.y = new vec2(y0,y0)
+ }
+ else {
+ this.x = new vec2(x0,x1)
+ this.y = new vec2(y0,y1)
+ }
+ this.translation = new vec2(0,0)
+}
+rect.prototype.clone = function(){
+ return new rect( this.x.clone(), this.y.clone() )
+}
+rect.prototype.center = function(){
+ return new vec2(this.x.midpoint(), this.y.midpoint())
+}
+rect.prototype.area = function(){
+ return this.x.length() * this.y.length()
+}
+rect.prototype.normalize = function(){
+ this.x.normalize().add(this.translation.a)
+ this.y.normalize().add(this.translation.b)
+ this.translation.a = this.translation.b = 0
+ return this
+}
+rect.prototype.contains = function(x,y){
+ return this.x.contains(x) && this.y.contains(y)
+}
+rect.prototype.intersects = function(r){
+ return this.x.intersects(r.x) && this.y.intersects(r.y)
+}
+rect.prototype.width = function(){ return this.x.length() }
+rect.prototype.height = function(){ return this.y.length() }
+rect.prototype.fill = function(){
+ ctx.fillRect(this.x.a + this.translation.a, this.y.a + this.translation.b, this.x.length(), this.y.length())
+}
+rect.prototype.stroke = function(){
+ ctx.beginPath()
+ ctx.moveTo(this.x.a, this.y.a)
+ ctx.lineTo(this.x.b, this.y.b)
+ ctx.stroke()
+}
+rect.prototype.perimeter = function(){
+ line( this.x.a, this.y.a, this.x.b, this.y.a, this.translation )
+ line( this.x.a, this.y.b, this.x.b, this.y.b, this.translation )
+ line( this.x.a, this.y.a, this.x.a, this.y.b, this.translation )
+ line( this.x.b, this.y.a, this.x.b, this.y.b, this.translation )
+}
+rect.prototype.toString = function(){
+ return "[" + this.x.toString() + " " + this.y.toString() + "]"
+}
+rect.prototype.quantize = function(n){
+ this.x.quantize(n)
+ this.y.quantize(n)
+}
+rect.prototype.reset = function(){
+ var copy = this.clone()
+ copy.sides = 0xf
+ this.regions = [ copy ]
+}
+rect.prototype.clipTo = function(r){
+ // for each of this rect's regions split the region if necessary
+ for (var i = 0, len = regions.length; i < len; i++) {
+ if (regions[i] && regions[i].intersects(r)) {
+ var splits = regions[i].split(r)
+ regions.concat(splits)
+ regions[i] = null
+ }
+ }
+}
+rect.prototype.split = function(r){
+ var splits = []
+
+
+
+ // 1 split (horizontal)
+ // 1 split (vertical)
+ // 2 splits (top left)
+ // 2 splits (top right)
+ // 2 splits (bottom left)
+ // 2 splits (bottom right)
+ // 3 splits (center)
+
+ return splits
+}