RosettaCodeData/Task/Brownian-tree/Ruby/brownian-tree.rb

57 lines
1.1 KiB
Ruby

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"