(* inuyasha0.ml - Don Yang (uguu.org) 01/09/02 *) type coord = {x : float; y : float};; let minx = 0;; let maxx = 640;; let miny = 0;; let maxy = 480;; let margin = 20;; 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 rotate angle point = {x = (cos angle) *. point.x -. (sin angle) *. point.y; y = (sin angle) *. point.x +. (cos angle) *. point.y};; let translate dx dy point = {x = point.x +. dx; y = point.y +. dy};; let scale sx sy point = {x = point.x *. sx; y = point.y *. sy};; let transform p1 p2 p3 p4 p5 point = translate p1 p2 (rotate p3 (scale p4 p5 point));; let random_transform pointlist = let p1 = (float (minx + margin)) +. Random.float (float (maxx - minx - 2 * margin)) in let p2 = (float (miny + margin)) +. Random.float (float (maxy - miny - 2 * margin)) in let p3 = Random.float (4. *. atan2 1. 0.) in let p4 = 10. +. Random.float 30. in let p5 = 10. +. Random.float 20. in List.map (transform p1 p2 p3 p4 p5) pointlist;; let random_color () = print_float (0.5 +. Random.float 0.5); print_char ' '; print_float (Random.float 0.1); print_char ' '; print_float (Random.float 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 rec draw_curve_debug0 pointlist = match pointlist with p::tail -> ( draw_coord p; print_string "lineto "; draw_curve_debug0 tail ) | _ -> print_string "closepath stroke\n";; let draw_curve_debug pointlist = draw_coord (List.hd pointlist); print_string "moveto\n"; draw_curve_debug0 (List.tl pointlist);; let draw_object () = random_color(); (*draw_curve_debug (random_transform curve_coord);*) draw_curve (random_transform curve_coord);; let page_header () = print_string "%!PS-Adobe-2.0\n"; print_string "%%Pages: 1\n"; print_string "%%BoundingBox: "; print_int minx; print_char ' '; print_int miny; print_char ' '; print_int maxx; print_char ' '; print_int maxy; print_char '\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();;