(* inuyasha1.ml - Don Yang (uguu.org) 01/09/02 *) type coord = {x : float; y : float};; let rec convert_list_to_coord points = match points with x::y::tail -> {x = x; y = y} :: convert_list_to_coord tail | _ -> [];; let curve_coord = convert_list_to_coord [4.; -5.; 4.; 5.; 0.; 6.; 6.; 5.; 6.; -5.; 0.; -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 = let p1 = rand 20. 600. in let p2 = rand 20. 440. in let p3 = rand 0. (4. *. atan2 1. 0.) in let p4 = rand 10. 30. in let p5 = rand 10. 20. in List.map (transform p1 p2 p3 p4 p5) 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();;