File: example_prog.ml

package info (click to toggle)
renderdoc 1.2%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 79,584 kB
  • sloc: cpp: 491,671; ansic: 285,823; python: 12,617; java: 11,345; cs: 7,181; makefile: 6,703; yacc: 5,682; ruby: 4,648; perl: 3,461; php: 2,119; sh: 2,068; lisp: 1,835; tcl: 1,068; ml: 747; xml: 137
file content (76 lines) | stat: -rw-r--r-- 2,093 bytes parent folder | download | duplicates (19)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
(* example_prog.ml *)

open Swig ;;
open Example ;;

let side_length (ax,ay) (bx,by) =
  sqrt (((bx -. ax) ** 2.0) +. ((by -. ay) ** 2.0)) ;;

let triangle_area a_pt b_pt c_pt =
  let a = (side_length a_pt b_pt) 
  and b = (side_length b_pt c_pt)
  and c = (side_length c_pt a_pt) in
  let s = (a +. b +. c) /. 2.0 in
    sqrt (s *. (s -. a) *. (s -. b) *. (s -. c)) ;;

let point_in_triangle (pta,ptb,ptc) x y =
  let delta = 0.0000001 in (* Error *)
  let ptx = (x,y) in
    begin
      let a_area = triangle_area pta ptb ptx
      and b_area = triangle_area ptb ptc ptx
      and c_area = triangle_area ptc pta ptx
      and x_area = triangle_area pta ptb ptc in
      let result = (abs_float (a_area +. b_area +. c_area -. x_area)) < delta
      in
	result
    end ;;

let triangle_class pts ob meth args =
  match meth with
      "cover" ->
	(match args with
	     C_list [ x_arg ; y_arg ] ->
	       let xa = x_arg as float 
	       and ya = y_arg as float in
		 (point_in_triangle pts xa ya) to bool
	   | _ -> raise (Failure "cover needs two double arguments."))
    | _ -> (invoke ob) meth args ;;

let dist (ax,ay) (bx,by) = 
  let dx = ax -. bx and dy = ay -. by in
    sqrt ((dx *. dx) +. (dy *. dy))

let waveplot_depth events distance pt =
  (List.fold_left (+.) 0.0 
     (List.map 
	(fun (x,y,d) -> 
	   let t = dist pt (x,y) in
	     ((sin t) /. t) *. d)
	events)) +. distance

let waveplot_class events distance ob meth args =
  match meth with
      "depth" ->
	(match args with
	     C_list [ x_arg ; y_arg ] ->
	       let xa = x_arg as float 
	       and ya = y_arg as float in
		 (waveplot_depth events distance (xa,ya)) to float
	   | _ -> raise (Failure "cover needs two double arguments."))
    | _ -> (invoke ob) meth args ;;

let triangle =
  new_derived_object 
    new_shape
    (triangle_class ((0.0,0.0),(0.5,1.0),(1.0,0.6)))
    '() ;;

let waveplot = 
  new_derived_object
    new_volume
    (waveplot_class [ 0.01,0.01,3.0 ; 1.01,-2.01,1.5 ] 5.0)
    '() ;;

let _ = _draw_shape_coverage '(triangle, 60, 20) ;;
let _ = _draw_depth_map '(waveplot, 60, 20) ;;