(* inuyasha2.ml - Don Yang (uguu.org) 01/09/02 *) type coord = {x : float; y : float};; let curve_coord = [{x = 4.; y = -5.}; {x = 4.; y = 5.}; {x = 0.; y = 6.}; {x = 6.; y = 5.}; {x = 6.; y = -5.}; {x = 0.; y = -6.}];; let transform tx ty angle sx sy point = {x = tx +. (cos angle) *. point.x *. sx -. (sin angle) *. point.y *. sy; y = ty +. (sin angle) *. point.x *. sx +. (cos angle) *. point.y *. sy};; let rand lowerbound range = lowerbound +. Random.float range;; let random_transform pointlist = List.map (transform (rand 20. 600.) (rand 20. 440.) (rand 0. (4. *. atan2 1. 0.)) (rand 10. 30.) (rand 10. 20.)) pointlist;; let random_color () = print_float (rand 0.5 0.5); print_char ' '; print_float (rand 0. 0.1); print_char ' '; print_float (rand 0. 0.1); print_string " setrgbcolor\n";; let draw_coord c = print_float c.x; print_char ' '; print_float c.y; print_char ' ';; let draw_curve pointlist = match pointlist with a::b::c::d::e::f::[] -> ( print_string "newpath "; draw_coord f; print_string "moveto\n"; draw_coord a; draw_coord b; draw_coord c; print_string "curveto\n"; draw_coord d; draw_coord e; draw_coord f; print_string "curveto\n"; print_string "closepath fill\n" ) | _ -> ();; let draw_object () = random_color(); draw_curve (random_transform curve_coord);; let page_header () = print_string "%!PS-Adobe-2.0\n"; print_string "%%Pages: 1\n"; print_string "%%BoundingBox: 0 0 640 480\n";; let page_footer () = print_string "%%EOF\n";; let rec main index = if index > 0 then (draw_object(); main (index - 1));; Random.self_init();; page_header();; main (16 + Random.int 16);; page_footer();;