I have made a different approach though WIP:
init_subdivision() generates subdivision.
EDIT: More work done, but still buggy. :/. Only if I can manage to subdivide properly beyond the first iteration.
rep_random_subdivide:
skip ${3=4},${4=500}
1,1,1,5,[0,w#-1-1,0,h#-1-1,0]
1,1,1,1,0
#Last two values for array above#
#-2==iteration#
#-1==skip#
eval ${-math_lib}"
const ww=w#-3-1;
const hh=h#-3-1;
const border_size=$2;
const max_division=$1;
const max_iter=$3;
const arr_limit=$4;
find_orientation(a,b)=a<border_size?1:b<border_size?0:u(0,1)<.5?1;
find_diff_w(a)=a[1]-a[0];
find_diff_h(a)=a[3]-a[2];
init_subdivision(a,c_iter,insertion_point)=(
ri=int(u(0,max_division))+1;
nw=find_diff_w(a);
nh=find_diff_h(a);
orientation=find_orientation(nw,hh);
end_pos_x=a[1];
end_pos_y=a[3];
if(orientation,
step_size=nh/ri;
pos=a[2];
repeat(ri,iter,
(iter==(ri-1))?(
min_pos=pos+border_size;
max_pos=end_pos_y-border_size;
new_dim_pos=round(u(min_pos,max_pos));
dar_insert(#-2,[a[0],end_pos_x,pos,new_dim_pos,c_iter],insertion_point);
dar_insert(#-2,[a[0],end_pos_x,new_dim_pos+1,end_pos_y,c_iter],insertion_point);
dar_insert(#-1,u(0,1)<.5,insertion_point);
dar_insert(#-1,u(0,1)<.5,insertion_point);
):(
min_pos=pos+border_size;
max_pos=step_size*(iter+1);
new_dim_pos=round(u(min_pos,max_pos));
dar_insert(#-2,[a[0],end_pos_x,pos,new_dim_pos,c_iter],insertion_point);
dar_insert(#-1,u(0,1)<.5,insertion_point);
pos=new_dim_pos+1;
if(pos>=(end_pos_y-border_size),break(););
);
);
,
step_size=nw/ri;
pos=a[0];
repeat(ri,iter,
(iter==(ri-1))?(
min_pos=pos+border_size;
max_pos=end_pos_x-border_size;
new_dim_pos=round(u(min_pos,max_pos));
dar_insert(#-2,[pos,new_dim_pos,a[2],end_pos_y,c_iter],insertion_point);
dar_insert(#-2,[new_dim_pos+1,end_pos_x,a[2],end_pos_y,c_iter],insertion_point);
dar_insert(#-1,u(0,1)<.5,insertion_point);
dar_insert(#-1,u(0,1)<.5,insertion_point);
):(
min_pos=pos+border_size;
max_pos=step_size*(iter+1);
new_dim_pos=round(u(min_pos,max_pos));
dar_insert(#-2,[pos,new_dim_pos,a[2],end_pos_y,c_iter],insertion_point);
dar_insert(#-1,u(0,1)<.5,insertion_point);
pos=new_dim_pos+1;
if(pos>=(end_pos_x-border_size),break(););
);
);
);
);
m=0;
add_subdivision(insertion_point)=(
ci=I(#-2,0,insertion_point);
iter_lvl=ci[4];
if(iter_lvl<max_iter,
dar_remove(#-2,insertion_point);
dar_remove(#-1,insertion_point);
init_subdivision(ci,iter_lvl+1,insertion_point);
,
i(#-1,0,insertion_point)=1;
);
);
add_subdivision(a,c_iter,insertion_point)=(
nw=find_diff_w(a);
nh=find_diff_h(a);
if(nw<border_size&&nh<border_size,
m++;
i(#-1,0,insertion_point);
,
init_subdivision(a,c_iter,insertion_point);
);
);
(ww<border_size)&&(hh<border_size)?run('error inv_dim');
initial_pixel=I(#-2,0,0,0);
find_pos(p)=int(u(p));
init_subdivision(initial_pixel,1,0);
add_subdivision(find_pos(dar_size(#-1)));
resize(#-2,1,dar_size(#-2),1,4,0);
resize(#-1,1,dar_size(#-1),1,1,0);"
r[-3] 100%,100%,1,4
eval.. "
begin(
convert2coords(c)=(
tl=[c[0],c[2]];
tr=[c[1],c[2]];
bl=[c[0],c[3]];
br=[c[1],c[3]];
[tl,tr,br,bl];
);
);
polygon(#-3,4,convert2coords(vector(#s,I)),1,I);"