Working on LEAVE and example.
[forth.jl.git] / examples / mandelbrot.4th
diff --git a/examples/mandelbrot.4th b/examples/mandelbrot.4th
new file mode 100644 (file)
index 0000000..2767738
--- /dev/null
@@ -0,0 +1,42 @@
+( --- Complex integer arithmetic --- )
+
+: c* ( x1 y1 x2 y2 -- x3 y3 )
+        swap rot                ( x1 x2 y1 y2 )
+        2dup * negate           ( x1 x2 y1 y2 -y1y2 )
+        4 pick 4 pick * +       ( x1 x2 y1 y2 (x1x2-y1y2))
+        4 roll 2 roll *         ( x2 y1 (x1x2-y1y2) x1y2 )
+        3 roll 3 roll * +       ( (x1x2-y1y2) (x1y2+x2y1) )
+;
+
+: c+ ( x1 y1 x2 y2 -- x3 y3 )
+        rot +
+        -rot +
+        swap
+;
+
+: csq 2dup c* ;
+
+; cmagsq ( x1 y1 -- mag )
+        csq abs
+;
+
+( --- Mandelbrot set calculations  --- )
+
+: iterate ( cr ci zr zi -- cr ci z'r z'i )
+        csq c+
+;
+
+: inSet? ( cr ci -- res )
+    
+    100 0 DO
+
+        2SWAP 2DUP 5 ROLL 5 ROLL
+        iterate
+        2DUP cmagsq
+        100 > IF
+            LEAVE
+        THEN
+
+    LOOP
+;
+