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 <ruby.h>

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')