Mandelbrot set
Mandelbrot draws a mandelbrot set in little window. Mandelbrot demonstrates how to spawn a thread for drawing and do some RPN expressions to plot the pixels to window. Written in plain Ano script, no C involved.
Compilation
Easiest way to get Mandelbrot running is to go to examples directory in package root, and run:
$ ./build.sh gui_mandelbrot
build.sh script compiles Ano script to C, copies source files in place and pops up instructions what to do next. Follow them. Check also examples/README for more info.
Screenshots
Preview
; ; @ANO_SCRIPT_NAME gui_mandelbrot ; @ANO_SCRIPT_VERSION 0.0.3 ; @ANO_SCRIPT_DESCRIPTION Example how to plot some pixels to window ; ; @ANO_FLAGS_VAR_NAME_SUBS [x] ; @ANO_FLAGS_VAR_WARN_UNUSED [ ] ; ; Copyright (c) 2016-2023, Jani Salonen <salojan at goto10 piste co> ; All rights reserved. ; ; Global uninitialized variables var [handle] handle_window_main ; Global pre-initialized variables mov win_w ([uint] 640) mov win_h ([uint] 400) ; Initialize windowing system window_init ; Open main window window_open ("Mandelbrot", NULL, \ [handle] @0, [uint] 0, [uint] 0, [uint] 1, \ [int] -1, [int] -1, win_w, win_h, \ NULL, NULL, NULL, NULL, NULL, NULL, \ NULL, NULL, "cb_destroy", \ NULL, NULL, NULL, "cb_open") end callback cb_open (_hnd) { mov handle_window_main (_hnd) ; Map main window window_map (handle_window_main) ; Create drawing thread thread_spawn ("Mandelbrot thread", "mandelbrot_thread") } callback cb_destroy { window_close (handle_window_main) exit } thread mandelbrot_thread { call "mandelbrot_draw" (1.0, [uint] 120, [int] 0, [int] 0) } function mandelbrot_draw (_zoom, _maxiterations, _posx, _posy) { var [color] _c loop (mov _y (0); _y < win_h; inc _y) { loop (mov _x (0); _x < win_w; inc _x) { mov _pr (1.5 * (_x - win_w / 2.0) / (0.5 * _zoom * win_w) + _posx) mov _pi ((_y - win_h / 2.0) / (0.5 * _zoom * win_h) + _posy) mov _ne (0) mov _nf (0) mov _i ([int] 0) : "mandelbrot_loop_c" mov _oe (_ne) mov _of (_nf) mov _ne (_oe * _oe - _of * _of + _pr) mov _nf (2.0 * _oe * _of + _pi) mov _t (_ne * _ne + _nf * _nf) cmp _t (4) jae "mandelbrot_loop_d" inc _i cmp _i (_maxiterations) jb "mandelbrot_loop_c" : "mandelbrot_loop_d" ; Plot the pixel adjusting colors a bit mov _c (# 0) add _c.red (_i) add _c.green (_i * 2.0) draw_pixel (handle_window_main, _x, _y, _c) } } }
Copyright © 2023, Jani Salonen <salojan at goto10 piste co>. Piste is finnish word and means dot. All rights reserved.