Title:
Fractal Box Fitting
Steps:
Given any rectangular area, place a reactange inside, divide the remaining space into 8 new areas, loop until area is too small.
Interaction:
Color Change when you wiggle your mouse [SIZE=1](on a 2 second timer)[/SIZE]
Click to reset the whole thing.
Code:
function drawRect(mc:MovieClip) {
mc.beginFill(vars_obj.color, (Math.floor(Math.abs(mc.x2-mc.x)*Math.abs(mc.y2-mc.y))/(vars_obj.minSize*30+10))*100);
//1
mc.moveTo(mc.x, mc.y);
//2
for (var i in mc.coords_array) {
//3
mc.lineTo(mc.coords_array*[0], mc.coords_array*[1]);
//4
}
mc.endFill();
//5
var myTween = new mx.transitions.Tween(mc, "_y", mx.transitions.easing.Elastic.easeOut, -100, 0, (Math.round(Math.random()*0)+.4), true);
//6
}
function makeRegion(x, y, x2, y2) {
if (((x2-x)>vars_obj.minSize) && ((y2-y)>vars_obj.minSize)) vars_obj.queue.push({x:x, y:y, x2:x2, y2:y2});
//7
}
function recursive(obj) {
var mc = vars_obj.holder.createEmptyMovieClip("region"+obj.x+":"+obj.y, vars_obj.holder.getNextHighestDepth());
//8
mc.x = (Math.random()*((obj.x2-vars_obj.minSize)-obj.x))+obj.x;
//9
mc.x2 = (Math.random()*((mc.x+vars_obj.minSize)-(obj.x2)))+(obj.x2);
//10
mc.y = (Math.random()*((obj.y2-vars_obj.minSize)-obj.y))+obj.y;
//11
mc.y2 = (Math.random()*((obj.y2)-(mc.y+vars_obj.minSize)))+(mc.y+vars_obj.minSize);
//12
mc.coords_array = [[mc.x2, mc.y], [mc.x2, mc.y2], [mc.x, mc.y2], [mc.x, mc.y]];
//13
var region_array = [[obj.x, obj.y, mc.x, mc.y], [mc.x, obj.y, mc.x2, mc.y], [mc.x2, obj.y, obj.x2, mc.y], [obj.x, mc.y, mc.x, mc.y2], [mc.x2, mc.y, obj.x2, mc.y2], [obj.x, mc.y2, mc.x, obj.y2], [mc.x, mc.y2, mc.x2, obj.y2], [mc.x2, mc.y2, obj.x2, obj.y2]];
//14
for (var i in region_array) {
//15
makeRegion(region_array*[0], region_array*[1], region_array*[2], region_array*[3]);
//16
}
drawRect(mc);
//17
}
_root.onEnterFrame = function() {
vars_obj.queue.length>0 ? recursive(vars_obj.queue.pop()) : null;
//18
};
_root.onMouseMove = function() {
if (vars_obj.colorTimer == null) {
//19
vars_obj.colorTimer = true;
//20
vars_obj.color = (Math.random()*0xffffff);
//21
setTimeout(function () {vars_obj.colorTimer = null;}, 2*1000);
//22
}
};
_root.onMouseUp = init=function () {
vars_obj = {minSize:8, color:(Math.random()*0xffffff), queue:new Array(), holder:_root.createEmptyMovieClip("holder", 1)};
//23
makeRegion(0, 0, Stage.width, Stage.height);
//24
};
init();
//25
Hope you all like it