(* * LANGUAGE : ANS Forth * PROJECT : Forth Environments * DESCRIPTION : Mandelbrot set of c + z - sin(z) * CATEGORY : Graphic example * AUTHOR : Marcel Hendrix * LAST CHANGE : Wednesday, December 31, 2003 2:02 AM, Marcel Hendrix *) NEEDS -miscutil NEEDS -graphics REVISION -mansin "ÄÄÄ Mandelbrot c+z-sin Version 1.00 ÄÄÄ" PRIVATES DOC (* Mandelbrot set of c + z - sin(z) *) ENDDOC -- Parameters PI*2 FVALUE delH PI 1.5e F* FVALUE delV 9 VALUE amp -- Globals 0. DVALUE @XY PRIVATE : COLORIZE ( ix -- ) 3 * palette + C@+ amp * >S C@+ amp * >< S> OR >S C@ amp * #16 LSHIFT S> OR >S @XY S> SET-MDOT ; : INNERLOOP ( x y -- ) 2DUP TO @XY UNSCALE? DROP FLOCALS| yy xx | xx yy 0e 0e 0e 0e 0e 0e 0e FLOCALS| y1 x1 cs ss ch sh c1 b1 a1 | a1 FSQR b1 FSQR F+ 5e FSWAP FSQR F- 0.25e F* TO c1 a1 FSQR c1 F2* F1+ c1 FSQR F2* F- ( d1) b1 FSQR F+ F< IF 3 COLORIZE EXIT ENDIF CLEAR xx CLEAR yy #100 1 DO yy FABS 12e F> IF I #50 < IF I ELSE 3 ENDIF COLORIZE UNLOOP EXIT ENDIF yy FEXP FDUP 1/F ( u v ) F2DUP F+ F2/ TO ch F- F2/ TO sh xx FSINCOS TO cs TO ss a1 xx F+ ss ch F* F- TO x1 b1 yy F+ cs sh F* F- TO y1 xx x1 F- FABS yy y1 F- FABS F+ 1e-3 F< ?LEAVE x1 TO xx y1 TO yy LOOP 3 COLORIZE ;P : COMPUTE TEXTMODE? DUP >R IF GRAPHICS ENDIF 0 0 Xmax Ymax 0e 0e delH delV SET-GWINDOW GCLEAR #100 RANDOMPALETTE RESET-MDOTS Xmax 0 ?DO Ymax 0 ?DO J I INNERLOOP LOOP LOOP FLUSH-MDOTS R> IF TEXT ENDIF ; :ABOUT CR ." Type COMPUTE for a Mandelbot fractal." CR CR ." 1.4e TO delH 1.4e TO delV -- zoom picture " CR ." 9 TO amp COMPUTE -- influence contrast " ; .ABOUT -mansin CR DEPRIVE (* End of Source *)