From 2cd51bdd98924c26caa3c88d96b597cd2b6f3471 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sat, 25 May 2024 14:59:00 +0200 Subject: [PATCH] tree display --- a.out | Bin 274798 -> 277876 bytes pretty_printing.cmi | Bin 4337 -> 5448 bytes pretty_printing.cmo | Bin 17925 -> 21810 bytes pretty_printing.ml | 114 ++++++++++++++++++++++++++++++++++++++------ 4 files changed, 100 insertions(+), 14 deletions(-) diff --git a/a.out b/a.out index 4711fa8d37562fa6ee596f745c15d5f3a01da1c5..eb7637b31bdc1efc7d12b8d354067390298a2ba5 100755 GIT binary patch delta 3695 zcmbVPYitx%6rMY0wrLst%WdR% zv8~lL%_A~hFi$W-bmF>tN>5F5%;QAD%^T~IT_YB)&;gRb96Qbz43s5E&=f>x0KL1N zhsd+uf;dMa7SKoF?&EjnVvo~OL@}+}`~bJt(?F}pFj7~G38R0P(2!(U#%PggR?^MD zBou~>77LKc0i|h%NZ9iQqH0-=LU_yAQ__-=6NJ25U|5|ev#pLzes1}Qj3h+9B?_m#Lz%p; zf#$Ml>Bd}Cfc`_)a|K}FO^1PMkxz>5GGpDwUM$c13EZ*TnfxSV^Y0BbIPEUS^0>$e z&b&Y*UIxfQ>)4IpJh1wL0A64bClYNNDmn=Y1ulKD(k(QWPL03YKtaA3)cqW~sC$RI zjsqkZio*f~M%!fwka9p^@YyyBdRiilbG9SJ>IfQnU>dEAg*a!NeT4u_MP6=^J^{`j z6(sWcLlmefl8QhuiooG{1+E)H_H}G13It#&Y&amC|2=}Gf-=F=0)$`g=#cjb*2@8* zO~=Y!hy#k9xQnzEqM-0s1<3*g1lyA* z6sU=%7X7rL`?R{vDpl5j2A2YN$LQ=}3kfis><0B9y^TFc?@pxMCM`FszW-otdAF=_ z57NT9c6XN1X}PRAXPEFG4slZt(&-6H(sKWYrMe!Z728|r^4QLgX6u&Ta-ILZ^>K^i zFz_bgM-p3<3ho!6wJ~De(r#aeJ28ojLYg)V@!ap`odkJlRUvzH4^@>@G}ukvtGsR||z7ng`zWMyX~74%0iASA%R zB~gHO=hqs^OavwP?F2kLy^&Jp;9mSuE?XqtM*zm$R;_U6U=)6G#r<_1xjtBjIegsv z+?077OG0BtMu$f-Apyo66CJGdNOBXRSL1Gs?ieKNCWUCYrO-jJPvNE{UA{wRkdN!P zQz&(jR5(N)m;w+lY8ZV0nZ(z(Q~F3`hYQ{%ptsCH0AiwrTs!^VE= z5vAVZrd<@+*i43cn-A}#tLhzCQq;TlnO$^4CBG+c4SHad07Rwi9`8u?%cE%pMVI+JcA@E!ClHy&>G=L}CG*oTlg*IiXdX{a{ zd529t)xga*{iYgu-vJ4-{qM|nu&0@3tDS#ac5ziRO;#WCzGiwt?dGI|l5&$h@*rh; z)E;}*QEF4_6JB_n9^=YmWU9UPhGTSEseQ1Osr`KRIDM#Wu4*M#2YC7^T4}F3LG4O4 z+oI&?@dqVq{8E0(Xb_qWq?H78}s2zi7fz_=_r zB-$%mAgi^tzl6j128j04uZF{Tj&bRFIGi9ddd-X1x@_(m#P1umro8Lo6r(y+cGf^t!gm463P zzrWV2^)l^MH|a`N&4m0FCFZkbRp!bnnJipXR#jf%3o>S|C@ER# zd#etkc{1q12we^pPI>U5sng_+FtyMF1yM@=0|kZhgk0D5+jrsq|C!51B@V*Y6*)arEl>y)SHD kU;50~DLINubB$L0`z#)nX9VM03-f2@%h6`@qj`q;Cx!}L761SM delta 1206 zcmZvbdrVVz6vywm=a$^Mc59Kvxnk&qq!2V*F+P&ntw3vHtdS^*`$ID`KxIRr(IrgH zK*JvzAFEv5*~14&QBc^ZEBsI>nhJ@pp>q-!UrVBv z&i8kIk306<@$e5vLnAb*F)WQ({+y&JomN>!BkZ1=JSw(l|J%qnIE$JV9B zGkI*~aTfCilSbQ4q6a=BXB$qYoP(G{-JQ6Sj09@7Fegia?W{=EU6@I~eF-*N*@QZM zw3^iE)p$H5!e@FoPUD_)b7et>9o=$vBx1BmH_tc9_oSjGU`sM|q`O19@_G!YWG7+@d8`)~?0(P$t34JKVYjV{*+-j7>=C^Uex;TvijzykP|Mh9>nd`I>;d*2Ih9G_~=gRh*kyv#!sNN~+z z`Xa%1b3}?4Kr{W4z<;2Hem>6%MVQ#No z1cuRLfex|$5?%#3LEbA^11Ck-6}$}4Dcz-XVFcaKMfXRr6@H*SSCQaHs=AIFY4<4V zqWKzL0O%GRDNwCZZh0=ZdWu?ZV7B$AlpB+-iyCfXL~vCEtUalj-ibt!a{FE+3Qp7! zPSeg?m=9;D=N2x`b&V&JFQ0BBFCmxd=Q1DLXDNSxeKMSoN&efoLk*A9$ZgzQwVO+4 zaEg3i^6O<^S{swkaFt>{NhamRzM41uKY4dJR?T@8jI>i3*-D&6?Bu+QYfWQBCwGTh zX8C~Q8RoY4C&M7UeGjwXteA5T2R&p-(_HEK=lS_?X~ysT%Byw$??hpm_Bb~^&pm6d zVbskx49~{u%F0^zEYVz`wW>z6I9d`e3NMT<3j3mdrZ^l37yEpT2aXLY3JP9s7w_g1 zCcPQdb7EDY)&P#dYrdx3<(n!#uB@xt1nODwV73<09jkwRRu?}yX-)m}`d#y~&h4iS q3$&r>*LV1XrDd$7_=CaaY~C$hwrGi>cux6?%8K~BZc>?7bN>g+V@w19 diff --git a/pretty_printing.cmi b/pretty_printing.cmi index ac021a18e4208d3111e460e03366f5ad0bf9309e..3043dfc3b1373f49a8f2cc4dab6ddcf3265b7faa 100644 GIT binary patch literal 5448 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 diff --git a/pretty_printing.cmo b/pretty_printing.cmo index 805df6bed16acc8b7219937b45fdebff65638a16..9cf902d263216e143d283b870bbc476bf5d626ea 100644 GIT binary patch literal 21810 zcmeI33w+&WndkE)=d>xkLT`cIPSQ4)=F*c(OA8Ey-k_DWr57v$#?YimAWcG&Vv!=Hx7XZhcNp&KJk#~0(76}-ofty zx20Tk*n(dp1=!jkaJ<`kG#@zMeggE^M4X5j>q&y#%=)96iQ9K&Ke3r80Edo~1lcy7 zX#D0#hUcSl2zlr^(R1RLZP##oe14cd4o6l?Mi#ls6O;+&3E%~&3C1Y`-!oIc%wE6j zYXn6C)?ET*k^_dXnW@2-95W*e z7%y-=m4hk9ncGQ@q3z1g-A!{gb8d~Bmu#|W?sKixL`oGloRUBAh)3;p=Q zJwT4olb!D?bVeMHc20b;(Z>y$g~z~s=H5XLI;l_kg~2_vIIPk=NIfhSEEBM1CPtjG zr`EO$;3Fsa9X*?)eVzcm6Rjb!9HFnC0}b!@`moE%@!5TwqH}yB$LOWU=L+zV_ZIBL zXKao3WdAXG5+8^ey6Fq#(?j$PJw#rJ3v23v-XadrlT*(8-E)l;lUrm`xA_9+fu8>3 ztX+Vu$nl<}zKR5Gf=87r-C)4cm}i zFJMsb$U-Lipru~%9s8rS_1ZIBpXbKw_e5=+Az8%4cO& z`ry@j7fIIDY z@bBOZ-t{$PaBj;i?E!2#ntq-qhx8o7j`0F&!+ZCt%sO8)bi~Z>ai@WgH8jfvHG+iT zkBLRpmiIa)xw2_EG2q!n47?wSiTh4oIOl%ge7OLB=Lql@UauE&%plK&f>r^w=CZst zs7cQ`vMU6{8UD+amsy$<0(w~6cj!}Qc#y>!d-1I(az;*wAvNbY9j7%p#eVGZbLcpS z2OF732@(SQ!k$tAIc^frC;vr2-9zs+?LMv6ncIdO;&Po}gWwtg?=twsGabM1m3ZP) zwk(&)d9L`!4WS`E#6BUw4xW!uoWFnh`-{KV zREn-p;OG8cL#)ZivHU^LhXjmP0Wl>f1p@Lzyvgq zA~O>!&hV4^rT3zFb6>&3PmDJRRtTt9eCHh9&=T)!1;lQ8X7BplzD}LHT=aQgVK+UE z&Dh{Ruh!aifP)S{$-T>Qol|s%4bl5#DBh?I$aC9~ALVV(o`FoS5!ORJOCHL)*Pufl z`mqGxk9f z&BM`nmxvDDSpx1rWQ-TMkId{{md~6=bG=M^j}5xPvv+!*ImbrdFV&he=ZWSJnc(On zX6iAU&wI~xLr4841jKYWIq4rF|JXy!;2)}H?#klv=ZD{KzIWf;Zu;vs0dYphdcmg! z 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 delta 5717 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 A9RL6T diff --git a/pretty_printing.ml b/pretty_printing.ml index 863cc86..4f5bd26 100644 --- a/pretty_printing.ml +++ b/pretty_printing.ml @@ -352,7 +352,7 @@ fancy_dfs gr coords map blank_color_map ;; (* --------------------------------------------------------------------------------------------------------- *) open Graphics ;; -type 'a tree = Leaf of 'a | Node of 'a * 'a tree * 'a tree ;; +type 'a tree = Empty | Leaf of 'a | Node of 'a * 'a tree * 'a tree ;; (* STRUCT : (digit, xcoord, ycoord) @@ -366,45 +366,131 @@ let rec pw x n = match n with let rec depth_of_tree t = match t with | Leaf _ -> 1 - | Node (_, g, d) -> 1 + max (depth_of_tree g) (depth_of_tree d) ;; + | Node (_, g, d) -> 1 + max (depth_of_tree g) (depth_of_tree d) + | Empty -> 0;; let fill_data te ystep sx sy r = let depth = depth_of_tree te in let res = Array.make (depth+1) [] in - let rec aux t cur_x cur_d spacing = match t with + let rec aux t cur_x cur_d spacing pcx pcy = match t with | Node (x, g, d) -> begin - aux g (cur_x - spacing) (cur_d+1) (spacing/2); - res.(cur_d) <- ((x, (cur_x, sy - r - ystep * cur_d)))::(res.(cur_d)); - aux d (cur_x + spacing) (cur_d+1) (spacing/2); + aux g (cur_x - spacing) (cur_d+1) (spacing/2) cur_x (sy - r - 20 - ystep * cur_d); + res.(cur_d) <- (((x, (pcx, pcy)), (cur_x, sy - r - 20 - ystep * cur_d)))::(res.(cur_d)); + aux d (cur_x + spacing) (cur_d+1) (spacing/2) cur_x (sy - r - 20 - ystep * cur_d); end | Leaf x -> begin - res.(cur_d) <- ((x, (cur_x, sy - r - ystep * cur_d)))::(res.(cur_d)); + res.(cur_d) <- (((x, (pcx, pcy)), (cur_x, sy - r - ystep * cur_d)))::(res.(cur_d)); end - in aux te (sx/2) 0 (r/2 + r * ((pw 2 (depth-1)) - 1)); res ;; + | Empty -> () + in aux te (sx/2) 0 (r/2 + r * ((pw 2 (depth-1)) - 1)) (-1) (-1); res ;; + +let rec ln10 n = match n with + | k when k < 0 -> failwith "Are you sure about that ?" + | k when k < 10 -> 0 + | k -> 1 + ln10 (k/10) ;; + +let delta i j = + if i = j then 1 else 0 ;; + +let draw_integer x0 y n0 r = + (* 7-seg display *) + let n = ref n0 in + let size = ln10 n0 in + let len = r/3 in + let offset = size*(len/2) in + for i = 0 to size do + let x = -(1 - delta size 0)*4 + x0 - offset + i * (len+8) in + if Array.mem (!n mod 10) [|0; 4; 5; 6; 7; 8; 9|] then + draw_poly_line [|(x-len/2, y+len); (x-len/2, y)|]; + + if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 7; 8; 9|] then + draw_poly_line [|(x-len/2, y+len); (x+len/2, y+len)|]; + + if Array.mem (!n mod 10) [|0; 1; 2; 3; 4; 7; 8; 9|] then + draw_poly_line [|(x+len/2, y+len); (x+len/2, y)|]; + + if Array.mem (!n mod 10) [|2; 3; 4; 5; 6; 8; 9|] then + draw_poly_line [|(x-len/2, y); (x+len/2, y)|]; + + if Array.mem (!n mod 10) [|0; 1; 3; 4; 5; 6; 7; 8; 9|] then + draw_poly_line [|(x+len/2, y-len); (x+len/2, y)|]; + + if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 8; 9|] then + draw_poly_line [|(x-len/2, y-len); (x+len/2, y-len)|]; + + if Array.mem (!n mod 10) [|0; 2; 6; 8|] then + draw_poly_line [|(x-len/2, y-len); (x-len/2, y)|]; + + n := !n/10; + done ;; let rec draw_list l d r = match l with | [] -> () - | h::t -> draw_circle (fst (snd h)) (snd (snd h)) r; draw_list t d r ;; + | h::t -> begin + set_color (rgb 192 192 192); + fill_circle (fst (snd h)) (snd (snd h)) r; + set_color black; + draw_circle (fst (snd h)) (snd (snd h)) r; + moveto (fst (snd h)) (snd (snd h)); + set_color (rgb 32 192 32); + draw_integer (fst (snd h)) (snd (snd h)) (fst (fst h)) r; + draw_list t d r + end;; + +let connect l0 = + let rec aux l = match l with + | [] -> () + | ((_, (xf, yf)), (x, y))::t -> + if xf >= 0 && yf >= 0 then begin + set_color (rgb 192 192 192); + draw_poly_line [|(xf, yf); (x, y)|]; + aux t + end + in aux l0 ;; let even_more_pretty_printing t r ystep = - open_graph " 1600x800" ; + open_graph " 1800x800" ; + set_window_title "Trees" ; + let sx = Graphics.size_x () in let sy = Graphics.size_y () in - let graphdata = fill_data t ystep sx sy r in + let graphdata = fill_data t ystep sx sy (3*r/4) in + (* graphdata is a ((int * (int * int)) * (int * int)) list array *) - print_int 3; + set_color (rgb 192 192 192); + set_line_width 15 ; + for dpth = 1 to (Array.length graphdata -1) do + connect graphdata.(dpth-1); + done; + set_line_width 5 ; for dpth = 0 to (Array.length graphdata -1) do draw_list graphdata.(dpth) dpth r done; - ignore (Sys.command "sleep 1"); + let halt = ref false in + while !halt = false do + Unix.sleepf 0.1 ; + Unix.sleepf 2.0 ; + halt := true; + done; close_graph () ; () ;; -even_more_pretty_printing (Node (2, Node (3, Leaf 1, Leaf 6), Node (9, Leaf 0, Node (4, Leaf 0, Node (2, Leaf 5, Leaf 2))))) 25 100 ; +(* --------------------------------------| TESTS |-------------------------------------- *) +Random.self_init ;; + +let generate_full_graph d = + let rec aux n = match n with + | 0 -> Leaf (Random.int 99) + | k -> begin + Node (Random.int 99, aux (n-1), aux (n-1)) + end + in aux d ;; + +even_more_pretty_printing (generate_full_graph 3) 40 100 ; (* compilation command : ocamlfind ocamlc -linkpkg -package unix -linkpkg -package graphics pretty_printing.ml *) print_int 0 ;;