M=Math;MR=M.random;W=c.width=window.innerWidth-20;H=c.height=window.innerHeight-20;MI=0;var D;var S=40;pi=M.PI;function F(x,y){MI=M.round(MR()*4)+4;a.strokeStyle='rgba(255,255,255,1)';D=[];if(!x){x=(MR()-1/2)*W/S;y=(MR()-1/2)*H/S}for(var i=0;i<MI;i++){D.push(MR()/2+1/3)}for(var i=0;i<6;i++){B(i*pi/3,1,x,y,0,1)}}function CLS(){a.fillStyle="rgba(0,0,0,0.05)";a.fillRect(0,0,W,H);a.fill()}function B(r,l,x,y,G,T){r=(r+2*pi)%(2*pi);var x2=M.cos(r)*l+x;var y2=M.sin(r)*l+y;var l2=l*D[G];var G2=G+1;a.beginPath();a.lineWidth=M.ceil(l*10);a.moveTo(S*x+W/2,S*y+H/2);a.lineTo(S*x2+W/2,S*y2+H/2);a.closePath();a.stroke();if(G<MI&&l>1/S){B(r-pi/3,l2,x2,y2,G2);B(r+pi/3,l2,x2,y2,G2);if(T)B(r,l*0.8,x2,y2,G2,T);else B(r,l2,x2,y2,G2)}}a.fillStyle="black";a.fillRect(0,0,W,H);F();F();setInterval("F( )",1500);setInterval("CLS()",4000);
<!DOCTYPE html>
<!-- saved from url=(0035)http://js1k.com/2010-xmas/shim.html -->
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>look at source</title>
<meta charset="utf-8">
</head>
<body>
<canvas></canvas>
<script>
var c = document.getElementsByTagName('canvas')[0];
var b = document.body;
var a = c.getContext('2d');
</script>
<script>
// your submission will be put here
var W = c.width = window.innerWidth;
var H = c.height = window.innerHeight;
var max_it = 12;
var depths=[];
var pi = Math.PI;
function flake( x,y)
{
max_it = Math.round(Math.random()*4) + 4;
a.strokeStyle = 'rgba(255,255,255,1)';
depths = [];
if( !x)
{
x =( Math.random() -1/2 )* W/ 40;
y = (Math.random() -1/2)* H /40;
}
for( var i=0; i < max_it;i++)
{
depths.push( Math.random()/2 + 1/3);
}
for( var i=0; i < 6 ; i++)
{
blade( i * pi/3, 1, x,y,0, 1)
}
}
function clearScreen()
{
a.fillStyle = "rgba(0,0,0,0.05)";
a.fillRect(0,0,W,H);
a.fill();
}
function blade( r, l, x, y, depth, trunk)
{
// _log.push( " [ " + r + "," + l + "," + x + "," + y + "," +depth+ "," +trunk+ " ] \n" );
r = (r + 2*pi)%(2*pi);
var x2 = Math.cos(r) * l + x;
var y2 = Math.sin(r) * l + y;
var l2 = l * depths[depth] ;
var depth2 = depth + 1;
//draw
a.beginPath();
a.lineWidth = Math.ceil( l * 10);
a.moveTo(40*x + W/2,40*y+H/2);
a.lineTo(40*x2 + W/2, 40*y2+H/2);
a.closePath();
a.stroke();
//recurse
if( depth < max_it && l > 1/40)
{
blade( r - pi/3, l2, x2, y2, depth2);
blade( r + pi/3, l2, x2, y2, depth2);
if(trunk)
blade( r, l * 0.8,x2,y2, depth2, trunk);
else
blade(r,l2,x2,y2,depth2);
}
}
a.fillStyle = "black";
a.fillRect(0,0,W,H);
a.fill()
setInterval("flake( )", 2000);
setInterval("clearScreen()", 300);
flake(1,0)
</script>
</body></html>