http://qs321.pair.com?node_id=329492

This one might make a good console screensaver. It's a Mandelbrot explorer! It rotates, zooms in & out, and scrolls randomly to examine regions of the Mandelbrot set it deems "interesting." Points that escape more quickly are also represented by darker (or lighter, if you've got a dark on light console color scheme) characters. It looks pretty nice from a few feet back. For speed, the fractal iterations aren't very high, so detail falls off as we zoom in.

You can also control the size of the display with the $r and $c values at the beginning, but keep in mind this is quite a CPU hog even at 80x25! I've only tested it on Linux, but I've tried to write it so it works in Windows as well (clearing the screen with "cls").

#!/usr/bin/perl
 $r=25; $c=80;
                                              $xr=6;$yr=3;$xc=-0.5;$dw=$z=-4/
                                              100;local$";while($q=$dr=rand()
                                             /7){$w+=$dw;$_=join$/,map{$Y=$_*
                                             $yr/$r;
  join""                                    ,map{$                  x=$_*$
 xr/$c;($                                   x,$y)=                 ($xc+$x
  *cos($                                   w)-$Y*               sin$w,$yc+
                                           $x*sin              ($w)+$Y*cos
  $w);$                                   e=-1;$                    a=$b=0
;($a,$b)   =($u-$v+$x,2*$a*               $b+$y)                    while(
$ u=$a*$   a)+($v=$b*$b)<4.5  &&++$e     <15;if                     (($e>$
  q&&$e<   15)||($e==$q and   rand()     <$dr))  {$q=$e;($d0,$d1)   =($x,$
  y); }                        chr(+(   32,96,+  46,45,43,58,73,37  ,36,64
 ,32)[$                        e/1.5]   );}(-$   c/2)..($c/2)-1;}   (-$r/2
 )..($     r/2)-1;select$",     $",$", 0.015;                       system
$^O=~m     ~[wW]in~x?"cls":     "clear";print                       ;$xc=(
$d0+15     *$xc)/16;$yc=($       d1+15*$yc)/                        16;$_*=
1+$z for                         $xr,$yr;$dw                     *=-1 if rand
()<0.02;                          (++$i%110                      )||($z*=-1)}
Update: I put it in pre tags since it's wider than the default code wrap setting. It's 77 chars wide. Oops, and then I fixed the broken ['s ;) .. Ok, and then I also put it in code tags in a comment, so the "download code" link would work too.

blokhead

Replies are listed 'Best First'.
Re: Mandelbrot flythrough
by davido (Cardinal) on Feb 17, 2004 at 06:41 UTC
    It's gadgets like this that remind me how early I am in the learning curve. Great job.


    Dave

Re: Mandelbrot flythrough
by ysth (Canon) on Feb 17, 2004 at 06:32 UTC
    For $^O eq 'cygwin' you should use clear. I think just matching against 'Win' (uppercase W) for cls will work.
Re: Mandelbrot flythrough
by flyingmoose (Priest) on Feb 17, 2004 at 14:11 UTC

    Wow! Awesome work. I like these sort of things. Now I'm going to have to reformat it and study the math and zoom code for a bit...

    Would you happen to have one broken apartment and formatted that you could show us?

      Wow! Awesome work. I like these sort of things.

      Have to agree with you on this.

      Now I'm going to have to reformat it and study the math and zoom code for a bit...

      Would you happen to have one broken apartment and formatted that you could show us?

      Why do the reformating yourself, when you have perltidy ? ;)

      --
      b10m

      All code is usually tested, but rarely trusted.
        Doesn't work the same as the original, and yes I took care of the website wrapping on those three lines (with the red + symbols)
Re: Mandelbrot flythrough
by wolfger (Deacon) on Feb 17, 2004 at 14:45 UTC
    Works on Windows as well, although I had to enlarge the command-prompt window for it to display properly and quit flickering. Nice program, and formatted pretty to boot.


    Believe nothing, no matter where you read it, or who said it - even if I have said it - unless it agrees with your own reason and your own common sense. -- Buddha
Re: Mandelbrot flythrough
by hannibal (Scribe) on Feb 17, 2004 at 15:23 UTC
    This is extremely cool. Humbles me as a Perl programmer and reminds me that Perl can do anything ;)
Re: Mandelbrot flythrough
by OverlordQ (Hermit) on Feb 18, 2004 at 01:34 UTC
    oh . . . my . . . god . . . is there any way for me to ++ this more then once?
Re: Mandelbrot flythrough
by gri6507 (Deacon) on Feb 19, 2004 at 22:11 UTC
    So how does one decide to create something like this? This is absolutely spectacular, but what spraks this effort? I can only guess the thinking process involved:

    slowly rolling out of bed in the morning ....oO(I wonder how Alice felt when she was falling into the Rabbit hole)
    some time later, while brushing teeth ....oO(I bet I can model it in Perl)
    later still, while sipping the mandatory cup of coffee ....oO(Better still, I'll do a flythrough of the Mandelbrot!)

Re: Mandelbrot flythrough
by snowsmann (Scribe) on Feb 20, 2004 at 15:46 UTC
    very very cool, ++. on a related but somewhat diffrent note, has anyone on here read the book Chaos in Wonderland, dont remember the author. it had lots of very neat fractal theory and some very good pictures as well. in the back it talked about a certain chaos theory algorithm that created some extremely beatiful pictures. years ago i wrote a Qbasic program to recreate the images (before my perl days) and would like to know if anyone else knows what im talking about, i think i will try to redo the program in perl and post it
    Update:i found my old program and rewrote in perl using Image::Magick, it is here if interested Kings Dream
    ~michael