Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Just for fun



On Thu, 16 Oct 2008 08:05:47 -0700
Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
> A long time ago Alan Third posted the following function to zsh-users.
> Anyone want to have a stab at updating it to use the new prompt coloring
> code for better accuracy?
> 
> function most_useless_use_of_zsh {
>     local lines columns colour a b p q i pnew
>     ((columns=COLUMNS-1, lines=LINES-1, colour=0))
>     for ((b=-1.5; b<=1.5; b+=3.0/lines)) do
>         for ((a=-2.0; a<=1; a+=3.0/columns)) do
>             for ((p=0.0, q=0.0, i=0; p*p+q*q < 4 && i < 32; i++)) do
>                 ((pnew=p*p-q*q+a, q=2*p*q+b, p=pnew))
>             done
>             ((colour=(i/4)%8))
>             echo -n "\\e[4${colour}m " 
>         done
>         echo
>     done
> }

Hmmm.... trivially tweaking it to use more colours is easy (I'm not sure
that "colours*4" and "(i/4)%colours" are still appropriate, I haven't done any
of the maths, just changed the obvious bits).  You do have to remember that if
you're printing " " that changing the foreground colour is a bit pointless,
however.  If you've really got lots of colours you could probably do something
cleverer with the RGB space.

The trouble is the only interesting part of the Mandelbrot set is near
the border, so without some cleverer change it doesn't actually look very
different on this scale---most of it is still (on my terminal, at least) either
red or black.

Maybe the thing to do is to narrow in on one particular part of the
boundary (and upgrade your CPU).

Unfortunately it's time I did something else...

function most_useless_use_of_zsh {
    integer colours

    if (( $# )); then
      colours=$1
    else
      colours=$(echotc Co) || return 1
    fi

    local lines columns colour a b p q i pnew
    ((columns=COLUMNS-1, lines=LINES-1, colour=0))
    for ((b=-1.5; b<=1.5; b+=3.0/lines)) do
        for ((a=-2.0; a<=1; a+=3.0/columns)) do
            for ((p=0.0, q=0.0, i=0; p*p+q*q < 4 && i < colours*4; i++)) do
                ((pnew=p*p-q*q+a, q=2*p*q+b, p=pnew))
            done
            ((colour=(i/4)%colours))
	    print -nP "%${colour}K %k"
        done
        echo
    done
}

-- 
Peter Stephenson <pws@xxxxxxx>                  Software Engineer
CSR PLC, Churchill House, Cambridge Business Park, Cowley Road
Cambridge, CB4 0WZ, UK                          Tel: +44 (0)1223 692070



Messages sorted by: Reverse Date, Date, Thread, Author