summaryrefslogtreecommitdiff
path: root/rectangles.html
diff options
context:
space:
mode:
Diffstat (limited to 'rectangles.html')
-rw-r--r--rectangles.html43
1 files changed, 32 insertions, 11 deletions
diff --git a/rectangles.html b/rectangles.html
index 882b862..0c054d5 100644
--- a/rectangles.html
+++ b/rectangles.html
@@ -134,32 +134,53 @@ function line (x,y,a,b,translation){
function solve_rects(){
rects = sort_rects()
+
+ for (var i = 0; i < rects.length; i++) {
+ rects[i].reset()
+ }
regions = []
- var x_intervals = []
- var y_intervals = []
+
var left, right
for (var i = 0; i < rects.length; i++) {
left = rects[i]
- for (var j = 0; j < rects.length; j++) {
+ for (var j = i+1; j < rects.length; j++) {
right = rects[j]
if (left.intersects(right)) {
-// left.clipTo(right)
-// right.clipTo(left)
+ left.clipTo(right)
+ right.clipTo(left)
}
if (left.x.b < right.x.a) {
break
}
}
}
-// for (var i = 0; i < rects.length; i++) {
-// regions.concat(rect[i].regions)
-// }
+ for (var i = 0; i < rects.length; i++) {
+ regions = regions.concat(rects[i].regions)
+ }
// handle when two walls are coplanar
// generate floor and ceiling for some regions
// generate walls from surviving regions
// generate ceiling-walls where ceiling has discontinuity
-
- document.getElementById("intersects").innerHTML = rects.join("<br>")
+
+ document.getElementById("intersects").innerHTML = regions.join("<br>")
+
+ var colors = [
+ "rgba(255,0,0,0.5)",
+ "rgba(255,128,0,0.5)",
+ "rgba(128,255,0,0.5)",
+ "rgba(0,255,0,0.5)",
+ "rgba(0,255,128,0.5)",
+ "rgba(0,128,255,0.5)",
+ "rgba(0,0,255,0.5)",
+ "rgba(128,0,255,0.5)",
+ "rgba(255,0,255,0.5)",
+ "rgba(255,0,128,0.5)",
+ ]
+ regions = regions.filter(function(r){ return !!r })
+ for (var i = 0; i < regions.length; i++) {
+ ctx.fillStyle = colors[i % colors.length]
+ regions[i] && regions[i].fill()
+ }
}
function sort_rects(){
return rects.sort(function(a,b){
@@ -188,7 +209,7 @@ function draw_rects(){
for (var i = 0; i < rects.length; i++) {
ctx.fillStyle = "rgba(0,200,220,0.2)"
- rects[i].fill()
+// rects[i].fill()
// line(rect.x, 0, rect.x, rect.y)
// line(0, rect.y, rect.x, rect.y)
}