Brownian tree: Difference between revisions
Content added Content deleted
(Use Template:Libheader) |
No edit summary |
||
Line 72: | Line 72: | ||
FreeImage_Unload(img); |
FreeImage_Unload(img); |
||
}</lang> |
}</lang> |
||
=={{header|Ruby}}== |
|||
{{libheader|RMagick}} |
|||
<lang 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 |
|||
hit = false |
|||
until hit |
|||
# 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 |
|||
hit = true |
|||
puts "hit" |
|||
world[py][px] = 1 |
|||
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"</lang> |
Revision as of 18:54, 27 April 2010
This page uses content from Wikipedia. The original article was at Brownian_tree. The list of authors can be seen in the page history. As with Rosetta Code, the text of Wikipedia is available under the GNU FDL. (See links for details on variance) |
Brownian tree
You are encouraged to solve this task according to the task description, using any language you may know.
You are encouraged to solve this task according to the task description, using any language you may know.
Generate and draw a Brownian Tree.
C
<lang c>#include <string.h>
- include <stdlib.h>
- include <time.h>
- include <math.h>
- include <FreeImage.h>
- define NUM_PARTICLES 1000
- define SIZE 800
void draw_brownian_tree(int world[SIZE][SIZE]){
int px, py; // particle values int dx, dy; // offsets int hit; int i; // set the seed world[rand() % SIZE][rand() % SIZE] = 1;
for (i = 0; i < NUM_PARTICLES; i++){ // set particle's initial position px = rand() % SIZE; py = rand() % SIZE;
while (1){ // randomly choose a direction dx = rand() % 3 - 1; dy = rand() % 3 - 1;
if (dx + px < 0 || dx + px >= SIZE || dy + py < 0 || dy + py >= SIZE){ // plop the particle into some other random location px = rand() % SIZE; py = rand() % SIZE; }else if (world[py + dy][px + dx] != 0){ // bumped into something world[py][px] = 1; break; }else{ py += dy; px += dx; } } }
}
int main(){
int world[SIZE][SIZE]; FIBITMAP * img; RGBQUAD rgb; int x, y; memset(world, 0, sizeof world); srand((unsigned)time(NULL));
draw_brownian_tree(world);
img = FreeImage_Allocate(SIZE, SIZE, 32, 0, 0, 0);
for (y = 0; y < SIZE; y++){ for (x = 0; x < SIZE; x++){ rgb.rgbRed = rgb.rgbGreen = rgb.rgbBlue = (world[y][x] ? 255 : 0); FreeImage_SetPixelColor(img, x, y, &rgb); } } FreeImage_Save(FIF_BMP, img, "brownian_tree.bmp", 0); FreeImage_Unload(img);
}</lang>
Ruby
<lang 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
hit = false until hit # 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 hit = true puts "hit" world[py][px] = 1 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"</lang>