The orginal Graphics Without Greek notes were written back in the late '80s or very early '90s. I recently (October of 2011) discovered that this page was missing from my web archive and decided to reconstitute it.
This is about the stupidest simplest way you could generate a Mandelbrot set. It outputs a 512x512 raw RGB file, which you can view using ImageMagick by running:
convert -size 512x512 -depth 8 rgb:mandel.raw mandel.png display mandel.png
Here's the C:
#include <stdio.h> #include <assert.h> #define PALETTEENTRIES 8 unsigned char palette[PALETTEENTRIES][3] = { { 0, 0, 0 }, { 255, 0, 0 }, { 0, 255, 0 }, { 0, 0, 255 }, { 255, 255, 0 }, { 255, 0, 255 }, { 255, 255, 0 }, { 0, 255, 255 } }; // Takes a real and imaginary part of "c" int EvalMandel(double cr, double ci) { int times = 0; double zr = 0; double zi = 0; // We know the solution will diverge when the length // is > 2, but this avoids a square root; while (zr*zr+zi*zi < 4 && times < 1024) { double tzr = zr * zr - zi * zi + cr; zi = 2 * zr * zi + ci; zr = tzr; ++times; } return times - 1; } int main(int argc, char**argv) { double x, y; FILE *f = fopen("mandel.raw", "wb"); assert(f); for (y = -2.0; y < 2.0; y += 4.0/512.0) { for (x = -2.0; x < 2.0; x += 4.0/512.0) { int c = EvalMandel(x, y); c %= PALETTEENTRIES; fwrite(palette[c], 3, 1, f); } } fclose(f); return 0; }
And a Makefile
all : mandel ./mandel convert -size 512x512 -depth 8 rgb:mandel.raw mandel.png display mandel.png mandel : mandel.c gcc -o mandel mandel.c