(* inuyasha3.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 write_number x = print_float x; print_char ' ';; let draw_coord c = write_number c.x; write_number c.y;; 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 closepath fill\n" ) | _ -> ();; let draw_object () = write_number (rand 0.5 0.5); write_number (rand 0. 0.1); write_number (rand 0. 0.1); print_string "setrgbcolor\n"; draw_curve (random_transform curve_coord);; let rec main index = if index > 0 then (draw_object(); main (index - 1));; Random.self_init();; print_string "%!PS-Adobe-2.0\n%%BoundingBox: 0 0 640 480\n";; main (16 + Random.int 16);; print_string "%%EOF\n";;