function Rand(min, max)
{
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Page = (
{
makeBranch:function(sx, sy, ln, an, sz, lv)
{
if(lv>this.maxl) return;
lv++;
if(sz<1) sz=1;
var path = this.r.path().attr(
{
"stroke": '#030',
"stroke-width": sz,
"stroke-linejoin": "miter",
"stroke-linecap":"butt",
"stroke-miterlimit":1
});
path.moveTo(sx,sy,10);
var ex = sx + ln * Math.cos(an) ;
var ey = sy + ln * Math.sin(an) ;
path.lineTo ( ex, ey ) ;
if(lv>this.maxl)
{
var col=Rand(0,(this.cols.length-1));
var dot = this.r.circle(ex, ey, sz*2).attr(
{
fill: this.cols[col],
stroke: this.cols[col]
});
}
var sub_branch = Rand (1, this.max_sub_branch - 1) + 2 ;
var branch_length_dimin = 0.5 + Math.random()/2 ;
for ( var i=0; i < sub_branch; i ++ )
{
var newLength = ln * branch_length_dimin * 0.9;
var newAngle = an + Math.random() * this.max_sub_angle - this.max_sub_angle / 2 ;
var newSize = sz - 1 ;
this.makeBranch ( ex, ey, newLength, newAngle, newSize, lv) ;
}
},
ini: function()
{
this.cols=['#f00','#ff0','#fa0','#f0f'];
var w = 640;
var h = 480;
this.maxl=6;
this.max_sub_branch = 2 ;
this.max_sub_angle = 3*Math.PI/4 ;
this.max_size = 8 ;
this.branch_length = 5 ;
this.r = Raphael("graph", w, h);
this.makeBranch(w/2, h-5, h/4.5, -Math.PI/(Rand(10,60)/10), 5, 0);
}
});
window.addEvent('domready', Page.ini.bind(Page))
When I sleep, I dream too much
|