Brownian tree

You are encouraged to solve this task according to the task description, using any language you may know.



Task

Generate and draw a   Brownian Tree.



A Brownian Tree is generated as a result of an initial seed, followed by the interaction of two processes.

 The initial "seed" is placed somewhere within the field. Where is not particularly important; it could be randomized, or it could be a fixed point.
 Particles are injected into the field, and are individually given a (typically random) motion pattern.
 When a particle collides with the seed or tree, its position is fixed, and it's considered to be part of the tree.

Because of the lax rules governing the random nature of the particle's placement and motion, no two resulting trees are really expected to be the same, or even necessarily have the same general shape. 



require 'rubygems'
require 'RMagick'
 
NUM_PARTICLES = 1000
SIZE          = 800
 
def draw_brownian_tree world
  # set the seed
  world[rand SIZE][rand SIZE] = 1
 
  NUM_PARTICLES.times do
    # set particle's position
    px = rand SIZE
    py = rand SIZE
 
    loop do
      # randomly choose a direction
      dx = rand(3) - 1
      dy = rand(3) - 1
 
      if dx + px < 0 or dx + px >= SIZE or dy + py < 0 or dy + py >= SIZE
        # plop the particle into some other random location
        px = rand SIZE
        py = rand SIZE
      elsif world[py + dy][px + dx] != 0
        # bumped into something
        world[py][px] = 1
        break
      else
        py += dy
        px += dx
      end
    end
  end
end
 
world = Array.new(SIZE) { Array.new(SIZE, 0) }
srand Time.now.to_i
 
draw_brownian_tree world
 
img = Magick::Image.new(SIZE, SIZE) do 
  self.background_color = "black"
end
 
draw = Magick::Draw.new
draw.fill "white"
 
world.each_with_index do |row, y|
  row.each_with_index do |colour, x|
    draw.point x, y if colour != 0
  end
end
 
draw.draw img
img.write "brownian_tree.bmp"