http://t3x.org/t3x/exam-mandel.html (light|dark)
Examples: fibonacci | mandelbrot | number-conversion | strings
Draw a Mandelbrot set using ASCII characters. See the program output here.
! Denominator for fixed-point computations
const SCALE = 100;
! ASCII renditions of filled rectangles:
const FULL = 'M', ! completely filled
UPPER = '"', ! upper half filled
LOWER = 'm', ! lower half filled
EMPTY = '\s'; ! empty
! Compute the color of a point x+yi
f(x, y) do
var cr, ci, zr, zi, ir;
var i;
zr := 0; ! z = 0+0i
zi := 0;
cr := x*SCALE/25; ! c = x+yi
ci := y*SCALE/20;
! try 100 iterations
for (i=0, 100) do
! z := z^2+c
ir := zr*zr/SCALE - zi*zi/SCALE;
zi := zr*zi/SCALE + zi*zr/SCALE + ci;
zr := ir + cr;
! if |z| > 2+2i, x+yi is not a member
! of the Mandelbrot set M
if (zi > 2*SCALE \/ zr > 2*SCALE \/
zi < -2*SCALE\/ zr < -2*SCALE
)
return 0;
end
! |z| <= 2+2i after 100 iterations,
! so x+yi is probably in M
return %1;
end
do
var x, y, r; ! coordinates, point color
var line::79; ! line buffer
var even; ! even line flag
even := 0;
for (y=-24, 25) do ! lines
for (x=-59, 20) do ! columns
r := \f(x,y);
! When drawing an even line,
! merge the color of r into the
! current rectangle ...
ie (even)
line::(x+59) :=
line::(x+59)->
! odd point was on
r-> FULL: UPPER:
! odd point was off
r-> LOWER: EMPTY;
! ... else just memorize the color
else
line::(x+59) := r;
end
! Even line completed, print it
if (even) do
t.write(1, line, 79);
t.write(1, "\n", 1);
end
even := \even;
end
end
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" MM"MMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" "MMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM"MMM" MM"MMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM "" """""MMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM"" MMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" "MMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM""M" """"MM MMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMM"" "" mMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMM"MM" mMMMMMMMMMM MMMMMMMMMmmmmmmmmmmmmm mm ""MMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMmm MMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM m MM mMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmMMMMMMm "MMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM mMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMm MMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmmM"mmm mm mMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" "MMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMm mm"MMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM