From 96aabd69bf0898b4f34e2c2553b51a40546b1a1c Mon Sep 17 00:00:00 2001 From: alexandre Date: Sat, 18 May 2024 23:55:01 +0200 Subject: [PATCH] Initial commit --- a.out | Bin 0 -> 153819 bytes pretty_printing.cmi | Bin 0 -> 1636 bytes pretty_printing.cmo | Bin 0 -> 8551 bytes pretty_printing.ml | 176 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 176 insertions(+) create mode 100644 a.out create mode 100644 pretty_printing.cmi create mode 100644 pretty_printing.cmo create mode 100644 pretty_printing.ml diff --git a/a.out b/a.out new file mode 100644 index 0000000000000000000000000000000000000000..31b023eb291182e3f259a1b122478d9000e5a8be GIT binary patch literal 153819 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

R26-%y_Lf~ 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 P^w_v<+qOf)n}`1er5!}z literal 0 HcmV?d00001 diff --git a/pretty_printing.cmi b/pretty_printing.cmi new file mode 100644 index 0000000000000000000000000000000000000000..2cf0eead6231be464558be1049a79f82264cb29b GIT binary patch literal 1636 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 literal 0 HcmV?d00001 diff --git a/pretty_printing.ml b/pretty_printing.ml new file mode 100644 index 0000000..64bb81c --- /dev/null +++ b/pretty_printing.ml @@ -0,0 +1,176 @@ +let rec print_mat m = + for i = 0 to (Array.length m)-1 do + print_char ' '; + for j = 0 to (Array.length m.(i))-1 do + if m.(i).(j) <> -1 then + print_int m.(i).(j) + else + print_char '_'; + print_char ' '; + print_char '|'; + print_char ' '; + done; + print_char '\n'; + for j = 0 to (Array.length m.(i))-1 do + print_char '-'; + print_char '-'; + print_char '-'; + print_char '+'; + done; + print_char '\n'; + done ;; + +let pi = 3.14159265358979343 ;; + +let abs x = + if x >= 0 then x else -x ;; + +let absf x = + if x >= 0. then x else -1. *. x ;; + +let draw_line_bresenham mat x1 y1 x2 y2 neutral lnc cutoff = + let slope = ref 0. in + if x2 <> x1 || y2 <> y1 then + slope := (float_of_int (y2 - y1) /. float_of_int (x2 - x1)) + else + (); + if absf (!slope) < 1. then + if x1 < x2 then + for k = x1 to x2 do + let cur_y = ref ((!slope) *. float_of_int (k - x1) +. float_of_int y1) in + if !slope = 0. then cur_y := float_of_int y2 else (); + if mat.(k).(int_of_float (!cur_y)) = neutral || mat.(k).(int_of_float (!cur_y)) = (-2) then + if x2 - k > cutoff then mat.(k).(int_of_float (!cur_y)) <- (-2) else mat.(k).(int_of_float (!cur_y)) <- (-3) + else + () + done + else + for k = x1 downto x2 do + let cur_y = ref ((!slope) *. float_of_int (k - x1) +. float_of_int y1) in + if !slope = 0. then cur_y := float_of_int y2 else (); + if mat.(k).(int_of_float (!cur_y)) = neutral then + if k - x2 > cutoff then mat.(k).(int_of_float (!cur_y)) <- (-2) else mat.(k).(int_of_float (!cur_y)) <- (-3) + else + () + done + else + if y1 < y2 then + for l = y1 to y2 do + let cur_x = ref (float_of_int x2) in + if (!slope) <> 1.0 /. 0.0 && (!slope) <> (-. 1.) /. 0. then + cur_x := ((float_of_int l) +. ((!slope) *. (float_of_int x1) -. (float_of_int y1))) /. (!slope) + else + (); + if mat.(int_of_float (!cur_x)).(l) = neutral || mat.(int_of_float (!cur_x)).(l) = (-2) then + if y2 - l > cutoff then mat.(int_of_float (!cur_x)).(l) <- (-2) else mat.(int_of_float (!cur_x)).(l) <- (-3) + else + () + done + else + for l = y1 downto y2 do + let cur_x = ref (float_of_int x2) in + if (!slope) <> 1.0 /. 0.0 && (!slope) <> (-. 1.) /. 0. then + cur_x := ((float_of_int l) +. ((!slope) *. (float_of_int x1) -. (float_of_int y1))) /. (!slope) + else + (); + if mat.(int_of_float (!cur_x)).(l) = neutral || mat.(int_of_float (!cur_x)).(l) = (-2) then + if l - y2 > cutoff then mat.(int_of_float (!cur_x)).(l) <- (-2) else mat.(int_of_float (!cur_x)).(l) <- (-3) + else + () + done;; + +let display mat neutral lnc lnf = + for i = 0 to (Array.length mat -1) do + for j = 0 to (Array.length mat.(i) -1) do + if mat.(i).(j) = (-5) then + Printf.printf "#" + else if mat.(i).(j) <> neutral && mat.(i).(j) <> lnc && mat.(i).(j) <> lnf then + Printf.printf "%d" mat.(i).(j) + else if mat.(i).(j) = lnc then + Printf.printf "." + else if mat.(i).(j) = lnf then + Printf.printf "X" + else + Printf.printf " " + done; + print_char '\n' + done;; + +let extend mat i j = + let ni = Array.length mat in + let nj = Array.length mat.(0) in + let s = (-5) in + if i+1 >= 0 && i+1 < ni then begin + mat.(i+1).(j) <- s; + if j+1 >= 0 && j+1 < nj then + mat.(i+1).(j+1) <- s + else + (); + if j-1 >= 0 && j-1 < nj then + mat.(i+1).(j-1) <- s + else + () + end + else + (); + + if i-1 >= 0 && i-1 < ni then begin + mat.(i-1).(j) <- s; + if j+1 >= 0 && j+1 < nj then + mat.(i-1).(j+1) <- s + else + (); + if j-1 >= 0 && j-1 < nj then + mat.(i-1).(j-1) <- s + else + () + end + else + (); + + if j+1 >= 0 && j+1 < nj then + mat.(i).(j+1) <- s + else + (); + + if j-1 >= 0 && j-1 < nj then + mat.(i).(j-1) <- s + else + () ;; + +let extremely_fancy_graph_printing g size = + let px = Array.make (size) [||] in + for i = 0 to (size-1) do + px.(i) <- Array.make (3*size) (-1) + done; + + let coords = Array.make size (0, 0) in + + (* placing the points on the trig circle *) + for k = 0 to Array.length g - 1 do + let theta = 2. *. pi *. (float_of_int k) /. (float_of_int (Array.length g)) in + let i = int_of_float ((float_of_int size) /. 2.) + int_of_float ((float_of_int size) /. 2.05 *. cos theta) in + let j = int_of_float ((float_of_int size) /. 2.) + int_of_float ((float_of_int size) /. 2.05 *. sin theta) in + px.(i).(3*j) <- k; + extend px i (3*j); + coords.(k) <- (i, 3*j); + done; + (* + for i = 0 to Array.length g - 2 do + draw_line_bresenham px (fst coords.(i)) (snd coords.(i)) (fst coords.(i+1)) (snd coords.(i+1)) (-1) + done; + *) + for i = 0 to Array.length g -1 do + for j = 0 to Array.length g.(i) -1 do + (*Printf.printf "[%d %d]\n" i g.(i).(j);*) + draw_line_bresenham px (fst coords.(i)) (snd coords.(i)) (fst coords.(g.(i).(j))) (snd coords.(g.(i).(j))) (-1) (-3) 6 + done + done; + display px (-1) (-2) (-3) ;; + + +let gr = [|[|3|]; [|4|]; [|0; 3; 4|]; [|0; 2|]; [|1; 2|]; [|0; 4|]|] ;; + +(*print_mat gr ;;*) + +extremely_fancy_graph_printing gr 40 ; \ No newline at end of file