[alt.sources] Looking for source code for producing fractal images

staceyc@sco.COM (Stacey Campbell) (03/12/91)

In article <9103080303.AA15566@cat3.cs.wisc.edu> cheukki@GARFIELD.CS.WISC.EDU writes:
>Hello guys, I'm looking for either C or Pascal source code for producing
>fractal images. If you have one or you know where can I get it,please 
>tell me. Thank you.

Try not to gag, but here is my color curses version of the Mandelbrot
Set.  If you don't have color it's still fairly easy to get working.
Resolution is _great_(*)!  I've written a slightly better optimized
X/Motif version, that includes rubberbanding code for magnification,
that's under 400 lines and is reasonably understandable if anyone is
interested.

Stacey.

* - on a terminal with 1000 lines and columns at a distance of 10 yards!

#!/bin/sh
# This is a shell archive (produced by shar 3.49)
# To extract the files from this archive, save it to a file, remove
# everything above the "!/bin/sh" line above, and type "sh file_name".
#
# existing files will NOT be overwritten unless -c is specified
#
# This shar contains:
# length  mode       name
# ------ ---------- ------------------------------------------
#    106 -rw-rw-r-- Makefile
#   1054 -rw-rw-r-- code.c
#
# ============= Makefile ==============
if test -f 'Makefile' -a X"$1" != X"-c"; then
	echo 'x - skipping Makefile (File already exists)'
else
echo 'x - extracting Makefile (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
LIBS= -lcurses
OBJS= code.o
CFLAGS= -O
CC= cc
X
mandel: $(OBJS)
X	$(CC) $(CFLAGS) $(OBJS) $(LIBS) -o mandel
SHAR_EOF
chmod 0664 Makefile ||
echo 'restore of Makefile failed'
Wc_c="`wc -c < 'Makefile'`"
test 106 -eq "$Wc_c" ||
	echo 'Makefile: original size 106, current size' "$Wc_c"
fi
# ============= code.c ==============
if test -f 'code.c' -a X"$1" != X"-c"; then
	echo 'x - skipping code.c (File already exists)'
else
echo 'x - extracting code.c (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'code.c' &&
#include <curses.h>
X
static void Plot();
X
int main()
X
{
X	int a, b, K, k, M, n_p, n_q, i;
X	double p_min, p_max, q_min, q_max, delta_p, delta_q, p, q, x, y;
X	double x_2, y_2, r, new_x;
X
X	initscr();
X	start_color();
X	for (i = 1; i <= COLOR_WHITE; ++i)
X		init_pair(i, i, COLOR_BLACK);
X	a = COLS;
X	b = LINES;
X	p_min = -2.25;
X	p_max = 0.75;
X	q_min = -1.5;
X	q_max = 1.5;
X	K = 'z' - 'a';
X	M = 100;
X	delta_p = (p_max - p_min) / (a - 1);
X	delta_q = (q_max - q_min) / (b - 1);
X	for (n_p = 0; n_p < a; ++n_p)
X		for (n_q = 0; n_q < b; ++n_q)
X		{
X			p = p_min + n_p * delta_p;
X			q = q_min + n_q * delta_q;
X			k = 0;
X			x = 0;
X			y = 0;
X			do
X			{
X				x_2 = x * x;
X				y_2 = y * y;
X				new_x = x_2 - y_2 + p;
X				y = 2 * x * y + q;
X				x = new_x;
X				++k;
X				r = x_2 + y_2;
X			} while (r <= M && k != K);
X			Plot(n_q, n_p, k != K ? k : 0);
X		}
X	endwin();
X	return 0;
}
X
static void Plot(y, x, color)
X
int y, x, color;
X
{
X	if (color != 0)
X		mvwaddch(stdscr, y, x, 'a' + color | COLOR_PAIR((color % 7) +
X		    1) | A_STANDOUT);
X	wmove(stdscr, y, x);
X	wrefresh(stdscr);
}
SHAR_EOF
chmod 0664 code.c ||
echo 'restore of code.c failed'
Wc_c="`wc -c < 'code.c'`"
test 1054 -eq "$Wc_c" ||
	echo 'code.c: original size 1054, current size' "$Wc_c"
fi
exit 0
-- 
                             Stacey Campbell       
                        Internet: staceyc@sco.com
     UUCP: {uunet,ucscc,att,sq,altos,lotus,sun,microsoft}!sco!staceyc