window.onload = function(){
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var tcanvas = document.createElement("canvas");
var tctx = tcanvas.getContext("2d");
single_particle_area = total_area/total_particles;
area_length = Math.sqrt(single_particle_area);
console.log(area_length);
for(var i = 1; i <= total_particles; i++)
particles.push(new particle(i));
this.r = Math.round(Math.random()*255);
this.g = Math.round(Math.random()*255);
this.b = Math.round(Math.random()*255);
this.x = (i*area_length)%W;
this.y = (i*area_length)/W*area_length;
this.radius = 2+Math.random()*8;
tctx.fillStyle = "white";
tctx.fillRect(0, 0, W, H)
tctx.font = "bold 350px arial";
text = Math.round(100 + Math.random()*899);
tctx.strokeStyle = "black";
tctx.strokeText(text, 5, 275);
image_data = tctx.getImageData(0, 0, W, H);
pixels = image_data.data;
for(var i = 0; i < pixels.length; i = i+4)
if(pixels[i] != 255 && pixels[i+1] != 255 && pixels[i+2] != 255)
position = {x: i/4%W, y: i/4/W}
positions.push(position);
for(var i = 0; i < particles.length; i++)
ctx.fillStyle = "rgb("+p.r+", "+p.g+", "+p.b+")";
ctx.fillStyle = "rgba("+p.r+", "+p.g+", "+p.b+", "+p.alpha+")";
ctx.arc(p.x, p.y, p.radius, Math.PI*2, false);
function get_destinations()
for(var i = 0; i < particles.length; i++)
for(var n = 0; n < positions.length; n++)
distance[n] = Math.sqrt((pa.x-po.x)*(pa.x-po.x) + (pa.y-po.y)*(pa.y-po.y));
if(distance[n] <= distance[nearest_position])
particles[i].dx = positions[nearest_position].x;
particles[i].dy = positions[nearest_position].y;
particles[i].distance = distance[nearest_position];
var po1 = positions[nearest_position];
for(var n = 0; n < positions.length; n++)
distance = Math.sqrt((po1.x-po2.x)*(po1.x-po2.x) + (po1.y-po2.y)*(po1.y-po2.y));
setInterval(draw, 16.67);
setInterval(new_positions, 2000);