summaryrefslogtreecommitdiff
path: root/rect.js
blob: f643b6f8236522d54b9fd4c0ea3a2c66fcfbc1d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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
}