From 9778738d4da0bc70acfaec592d22fe62674e8fb8 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sat, 1 Jun 2024 18:05:40 +0200 Subject: [PATCH] Added type 2 graph display --- a.out | Bin 280788 -> 288681 bytes graphs.cmi | Bin 1804 -> 3026 bytes graphs.cmo | Bin 8085 -> 17174 bytes graphs.ml | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 168 insertions(+), 4 deletions(-) diff --git a/a.out b/a.out index 5aa98bfdfc07d51df84443f8bc4fd789d988490f..b8907ca4388dbc3479668590215128261543fa6a 100755 GIT binary patch delta 6093 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 diff --git a/graphs.cmi b/graphs.cmi index d42af4b6cb05a9244aa7d299c9456f14f8184ac4..f857d9e8b307a444443c950ef858b1678deb990c 100644 GIT binary patch literal 3026 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 diff --git a/graphs.ml b/graphs.ml index 4757f99..b593a18 100644 --- a/graphs.ml +++ b/graphs.ml @@ -1,5 +1,7 @@ open Graphics ;; +Random.self_init () ;; + let pi = 3.14159265358979343 ;; let rec ln10 n = match n with @@ -44,6 +46,11 @@ let draw_integer x0 y n0 r = let identity n = n ;; +let square x = x *. x ;; + +let norm_int v1 v2 = + Float.sqrt (square (float_of_int ((fst v2) - (fst v1))) +. square (float_of_int ((snd v2) - -snd v1))) ;; + let improved_pretty_printing g wd ht r = let n = Array.length g in let coords = Array.make n (0, 0) in @@ -73,7 +80,7 @@ let improved_pretty_printing g wd ht r = done done; - set_line_width 12 ; + set_line_width 8 ; for k = 0 to n-1 do set_color colors.(k) ; for l = 0 to (Array.length g.(k))-1 do @@ -98,11 +105,166 @@ let improved_pretty_printing g wd ht r = ignore (Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity) ;; +(* Another version *) +type node = {tag : int; edges : int array} ;; + +type type2graph = {width : int ; height : int ; g : node array array} ;; +(* +array is length 8 and indicate if there-s a path with the nodes +[| SO ; O ; NO ; N ; NE ; E ; SE ; S |] +*) + + +let generate_type2_graph w h freq inf sup = + + let weighted_d100 i = + let res = Random.int 100 in + if res <= freq then res else (-1) + in + + let gr = {width = w ; height = h ; g = Array.make w [||]} in + for i = 0 to w-1 do + let init_fct j = {tag = i*h + j; edges = Array.init 8 weighted_d100} + in + + gr.g.(i) <- Array.init h init_fct; + done; + + gr ;; + +let another_type_of_graph_printing (gr : type2graph) r d = + let colors = Array.make_matrix gr.width gr.height (rgb 0 0 0) in + for i = 0 to gr.width -1 do + for j = 0 to gr.height -1 do + if (i*gr.width + j) mod 7 = 0 then + colors.(i).(j) <- rgb 0 0 200 + + else if (i*gr.width + j) mod 7 = 1 then + colors.(i).(j) <- rgb 0 200 0 + + else if (i*gr.width + j) mod 7 = 2 then + colors.(i).(j) <- rgb 0 200 200 + + else if (i*gr.width + j) mod 7 = 3 then + colors.(i).(j) <- rgb 200 0 0 + + else if (i*gr.width + j) mod 7 = 4 then + colors.(i).(j) <- rgb 200 0 200 + + else if (i*gr.width + j) mod 7 = 5 then + colors.(i).(j) <- rgb 200 200 0 + + else + colors.(i).(j) <- rgb 200 200 200 + done + done; + + set_line_width 4; + set_color black ; + for i = 0 to gr.width -1 do + for j = 0 to gr.height -1 do + let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *) + draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|] ; + end; + + if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *) + draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|] ; + end; + + if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *) + draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|] ; + end; + + if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *) + draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|] ; + end; + + if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) then begin (* NE *) + draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|] ; + end; + + if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *) + draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|] ; + end; + + if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *) + draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|] ; + end; + + if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *) + draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|] ; + end; + + done + done; + + set_line_width 8; + for i = 0 to gr.width -1 do + for j = 0 to gr.height -1 do + set_color colors.(i).(j) ; + let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *) + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ; + end; + + if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *) + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ; + end; + + if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *) + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ; + end; + + if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *) + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ; + end; + + if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) then begin (* NE *) + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ; + end; + + if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *) + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ; + end; + + if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *) + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ; + end; + + if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *) + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ; + end; + + done + done; + + set_line_width 5; + for i = 0 to gr.width -1 do + for j = 0 to gr.height -1 do + set_color (rgb 48 48 48) ; + fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + set_color black ; + draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + set_color colors.(i).(j) ; + draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r + done + done ; + + ignore (Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity) ;; (* ----------------------- Tests --------------------------- *) -Random.self_init ;; -Random.self_init ;; +open_graph " 1200x800" ;; +set_window_title "Graphs" ;; + +let type2 = generate_type2_graph 8 6 40 1 1 ;; + +another_type_of_graph_printing type2 35 75 ;; + +close_graph () ;; + +(* ----------------------- Tests --------------------------- *) open_graph " 1200x800" ;; set_window_title "Graphs" ;; @@ -148,4 +310,6 @@ let rang = generate_random_graph 9 50 ;; (*improved_pretty_printing fulg 1200 800 25 ;;*) improved_pretty_printing rang 1200 800 45 ;; -close_graph () ;; \ No newline at end of file +close_graph () ;; + +(* compilation command : ocamlfind ocamlc -linkpkg -package unix -linkpkg -package graphics graphs.ml *) \ No newline at end of file