HP15c CE Enhanced at the same price as standard - until Oct. 10 - Limited units

Mandelbrot set

// Mandelbrot set for the HP Prime

// Date : April 2013

// Version 1.0

iteration(c, bailoutValue, maxIter)

BEGIN

LOCAL iter := 0;

LOCAL z := (0,0);

WHILE (ABS(z) <= bailoutValue) AND (iter < maxIter) DO

z := z*z+c;

iter := iter+1;

END;

RETURN iter;

END;

LSclr(Ndx)

BEGIN

Ndx := ROUND(Ndx*186,0);

IF Ndx < 31 THEN RETURN 0+ 1*Ndx; END;

IF Ndx < 62 THEN RETURN 31+ 32*(Ndx-31); END;

IF Ndx < 93 THEN RETURN 1023- 1*(Ndx-62); END;

IF Ndx < 124 THEN RETURN 992+ 1024*(Ndx-93); END;

IF Ndx < 155 THEN RETURN 32736- 32*(Ndx-124); END;

IF Ndx < 186 THEN RETURN 31744+ 1*(Ndx-155); END;

RETURN 31775;

END;

colorize(itVal, maxIt)

BEGIN

IF itVal==maxIt THEN

// we're inside the Mandelbrot map

// so draw the pixel in black

RETURN 0;

ELSE

RETURN LSclr(itVal/maxIt);

END;

END;

EXPORT Mandelbrot()

BEGIN

// clear the screen (G0):

RECT();

LOCAL dx, dy, c, xp, yp;

LOCAL iter, color;

// these 4 variables define

// our window of the complex

// plane:

LOCAL xmin, xmax, ymin, ymax;

LOCAL maxIterations := 50;

LOCAL maxRadius := 2;

// Location

// ratio width:height should be 4:3

xmin := -2.5;

xmax := 1.5;

ymin := -1.5;

ymax := 1.5;

// another nice set of parameters:

//xmin := 0.315625;

//xmax := 0.515625;

//ymin := 0.28125;

//ymax := 0.43125;

dx := (xmax-xmin)/320;

dy := (ymax-ymin)/240;

c := (xmin,ymin);

// we loop over every pixel

// of the Prime's screen:

FOR yp FROM 0 TO 239 DO

FOR xp FROM 0 TO 319 DO

// create the complex number c

// we need for the iteration:

c := (xmin+xp*dx, ymax-yp*dy);

// now iterate the formula and

// get back the number of

// iteration steps it took until

// the complex number jumped out

// of the convergence radius:

iter := iteration(c, maxRadius, maxIterations);

// determine a color for this iteration number:

color := colorize(iter, maxIterations);

// set the pixel in that color:

PIXON_P(xp, yp, color);

END;

END;

// leave the image on the screen

// until a key is pressed:

REPEAT UNTIL GETKEY() == -1;

FREEZE;

END;