From: Koni Marti Date: 2007-12-29T00:02:31+09:00 Subject: Re: Thought I'd share this and get some advice Hiato Xaero wrote: > Thanks :) > > Wow, Ruby is really awesome and these different methods are prime examples. > Thanks Sander and Sebastien for making my script officially Rubified :) > > (I'm stuck in an eternal loop of procedural programming because of Delphi :( > ) > Nice example. Ruby is definitely awesome! It also allows you to get rid of possible computational bottelnecks by simple c extensions (which makes Ruby ideally for scientific purposes as well). -- Koni Check this out, it makes the script 2-3 times faster and I'm sure one can still improve that: * mandelbrot.rb require 'Mandelbrot' f=Mandelbrot.new (-24..23).each do |i| puts((-64..62).inject("") do |s,k| p = x = y = 0 while ((x*x)+(y*y)<4) x, y = f.calculate(x,y,k,i) #x, y = x*x - y*y + (k-23)/43.5, 2*x*y + i/22.0 p += 6 break unless p<260 end s << (p > 250 ? ' ' : (65 + (p-1)/10).chr) end) end * mandelbrot.c #include static VALUE rb_mandel; static VALUE rb_calculate(VALUE self, VALUE xval, VALUE yval, VALUE kval, VALUE ival) { VALUE result; double x, y, k, i; x = NUM2DBL(xval); y = NUM2DBL(yval); k = NUM2DBL(kval); i = NUM2DBL(ival); result = rb_ary_new2(2); rb_ary_push(result, rb_float_new((x*x - y*y + (k-23.0)/43.5))); rb_ary_push(result, rb_float_new((2.0*x*y + i/22.0))); return result; } void Init_mandelbrot(void ) { rb_mandel = rb_define_class("Mandelbrot",rb_cObject); rb_define_method(rb_mandel, "calculate", rb_calculate, 4); } * extconf.rb require 'mkmf' create_makefile('mandelbrot')