57 lines
1.1 KiB
Ruby
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"
|