6 let side_length (ax,ay) (bx,by) =
7 sqrt (((bx -. ax) ** 2.0) +. ((by -. ay) ** 2.0)) ;;
9 let triangle_area a_pt b_pt c_pt =
10 let a = (side_length a_pt b_pt)
11 and b = (side_length b_pt c_pt)
12 and c = (side_length c_pt a_pt) in
13 let s = (a +. b +. c) /. 2.0 in
14 sqrt (s *. (s -. a) *. (s -. b) *. (s -. c)) ;;
16 let point_in_triangle (pta,ptb,ptc) x y =
17 let delta = 0.0000001 in (* Error *)
20 let a_area = triangle_area pta ptb ptx
21 and b_area = triangle_area ptb ptc ptx
22 and c_area = triangle_area ptc pta ptx
23 and x_area = triangle_area pta ptb ptc in
24 let result = (abs_float (a_area +. b_area +. c_area -. x_area)) < delta
29 let triangle_class pts ob meth args =
33 C_list [ x_arg ; y_arg ] ->
34 let xa = x_arg as float
35 and ya = y_arg as float in
36 (point_in_triangle pts xa ya) to bool
37 | _ -> raise (Failure "cover needs two double arguments."))
38 | _ -> (invoke ob) meth args ;;
40 let dist (ax,ay) (bx,by) =
41 let dx = ax -. bx and dy = ay -. by in
42 sqrt ((dx *. dx) +. (dy *. dy))
44 let waveplot_depth events distance pt =
45 (List.fold_left (+.) 0.0
48 let t = dist pt (x,y) in
52 let waveplot_class events distance ob meth args =
56 C_list [ x_arg ; y_arg ] ->
57 let xa = x_arg as float
58 and ya = y_arg as float in
59 (waveplot_depth events distance (xa,ya)) to float
60 | _ -> raise (Failure "cover needs two double arguments."))
61 | _ -> (invoke ob) meth args ;;
66 (triangle_class ((0.0,0.0),(0.5,1.0),(1.0,0.6)))
72 (waveplot_class [ 0.01,0.01,3.0 ; 1.01,-2.01,1.5 ] 5.0)
75 let _ = _draw_shape_coverage '(triangle, 60, 20) ;;
76 let _ = _draw_depth_map '(waveplot, 60, 20) ;;