open Graphics;; let size = 300;; (* The size of the square screen windows in pixels *) let resolution = 100;; (* The resolution: maximum number of iterations allowed *) let threshold = 4.0;; (* The thresold: the maximum size allowed. *) let distance = 2.0 /. (float size -. 1.0);; (* The distance between two rows. *) (* Convert an integer in the range [0..resolution] into a screen color *) let color_of c resolution = Pervasives.truncate ((float c /. float resolution) *. float white);; (* Compute the color of a pixel by iterating z_m+1 = z_m^2 + c *) (* j is the k-th row, initialised so that j.(i), k are the coordinates *) (* of the pixel (i, k) *) let pixel_row (j, k, resolution, size) = let zr = ref 0.0 and zi = ref 0.0 and cr = ref 0.0 and ci = ref 0.0 and zrs = ref 0.0 and zis = ref 0.0 let coloured_row = Array.create size black in for s = 0 to size - 1 do let j1 = ref (float j.(s)) in let k1 = ref (float k) in zr := !j1 *. distance -. 1.0; zi := !k1 *. distance -. 1.0; cr := !zr; ci := !zi; zrs := 0.0; zis := 0.0; for i = 0 to resolution - 1 do if not (!zrs +. !zis > threshold) then begin zrs := !zr *. !zr; zis := !zi *. !zi; zi := 2.0 *. !zr *. !zi +. !ci; zr := !zrs -. !zis +. !cr; Array.set coloured_row s (color_of i resolution); end done done; (coloured_row, k);; (* draw a line on the screen using fast image functions *) let show_a_result (col,j) = draw_image (make_image [| col |]) 0 j;; (* generate the tasks *) let gen_rows = let seed = ref 0 in let iniv = Array.init size (fun i -> i) in (function () -> if !seed >= size then raise End_of_file else let r = (iniv, !seed, resolution, size) in incr seed; r;; (* initialize the stop node: open the graphics window *) let stopinitf () = print_string "opening..."; print_newline (); open_graph (Printf.sprintf " %ix%i" size size);; (* finalize: close the window *) let stopfinalize () = Unix.sleep 120; close_graph ();; (* the skeleton expression to compute the image *) let prog () = startstop (gen_rows, ignore) (show_a_result, stopinitf, stopfinalize) (farm (seq (pixel_row), 10)) in pardo prog;;