Working on LEAVE and example.
[forth.jl.git] / examples / mandelbrot.4th
1 ( --- Complex integer arithmetic --- )
2
3 : c* ( x1 y1 x2 y2 -- x3 y3 )
4         swap rot                ( x1 x2 y1 y2 )
5         2dup * negate           ( x1 x2 y1 y2 -y1y2 )
6         4 pick 4 pick * +       ( x1 x2 y1 y2 (x1x2-y1y2))
7         4 roll 2 roll *         ( x2 y1 (x1x2-y1y2) x1y2 )
8         3 roll 3 roll * +       ( (x1x2-y1y2) (x1y2+x2y1) )
9 ;
10
11 : c+ ( x1 y1 x2 y2 -- x3 y3 )
12         rot +
13         -rot +
14         swap
15 ;
16
17 : csq 2dup c* ;
18
19 ; cmagsq ( x1 y1 -- mag )
20         csq abs
21 ;
22
23 ( --- Mandelbrot set calculations  --- )
24
25 : iterate ( cr ci zr zi -- cr ci z'r z'i )
26         csq c+
27 ;
28
29 : inSet? ( cr ci -- res )
30     
31     100 0 DO
32
33         2SWAP 2DUP 5 ROLL 5 ROLL
34         iterate
35         2DUP cmagsq
36         100 > IF
37             LEAVE
38         THEN
39
40     LOOP
41 ;
42