No registered users in community Materiały
in last 10 minutes
in last 10 minutes
ALR - Narzedzia do budowania grafów i wizualizacji graficznej
# UWAGA, 2.10.2017, ten opis jest niedokończony ! source symul_graf_lib.tcl # budujemy graf... set liczbaWierz 0 array unset sasiedzi G::kraw 0 1 G::kraw 1 2 G::pokazGraf G::rysujGraf #G::rysujGraf -zero 1 #G::rysujGraf -zero 0 -opcje {node [shape=octagon]} # + "graficzna" wizualizacja grafu # umieszczanie informacji na grafie # + oznaczenia elem canvasa .t.c: # 0$tc_node(X) - tekst (id wierz) # 1$tc_node(X) - owal # 1$tc_edge(X->Y) - linia/strzałka kraw; musi być X<Y .t.c itemconf 0$tc_node(1) -fill red .t.c itemconf 0$tc_node(1) -fill red -text "inny tekst" .t.c itemconf 1$tc_node(1) -fill yellow # ^ modyfikowanie wierz, np. ich koloru .t.c itemconf [tc_edge_nrPol 1 0] -fill red .t.c itemconf [tc_edge_nrPol 1 1] -fill blue .t.c itemconf [tc_edge_nrPol 1 0] -text "0; ????" .t.c itemconf [tc_edge_nrPol 1 1] -text "1; !!!!!!!!" # ^ "tc_edge_nrPol ID X" udostępnia napis zawierający nr poł. # dla wierz ID i jego połączenia nr X # (tzn. ze mozna zmodyfikowac ten napis) .t.c itemconf [tc_edge_srodek 1 0] -text "dowolny tekst" .t.c itemconf [tc_edge_srodek 1 1] -text "321 321" # ^ "tc_edge_srodek ID X" udostępnia napis na srodku krawedzi .t.c itemconf 1$tc_edge(1->2) -width 1 .t.c itemconf 1$tc_edge(1->2) -width 4 tc_strzalka_kolor 1->2 blue tc_strzalka_kolor 1->2 red # ^ zmienia kolor całej strzałki # "A->B" oznacza polaczenie od wierz A do wierz B, A<B # budujemy inny graf... set liczbaWierz 0 array unset sasiedzi #G::gwiazda [G::ciag 0 2] 3 G::gwiazda2 0 2 3 G::kraw 3 4 G::pokazGraf G::rysujGraf -zero 1 #G::rysujGraf tc_strzalka_kolor 2->3 blue .t.c itemconf 1$tc_edge(2->3) -width 3 # budujemy jeszcze inny graf... set liczbaWierz 0 array unset sasiedzi G::sciezka2 0 3 G::gwiazda2 4 7 3 # + ramiona gwiazdy 4,5,6,7 centrum 3 #G::gwiazda2 4 7 8 G::gwiazda {4 5 6} 8 # + ramiona gwiazdy 4,5,6 centrum 3 G::pokazGraf G::rysujGraf #G::rysujGraf -zero 1 # sposób na konfig. połączeń na podstawie ID i nr_połączenia proc tc_pol {id pol} { global sasiedzi set l1 "$id [lindex $sasiedzi($id) $pol]" set l1 [lsort -integer $l1] return "[lindex $l1 0]->[lindex $l1 1]" } .t.c itemconf 1$tc_edge([tc_pol 1 1]) -fill green -width 4 .t.c itemconf 1$tc_edge([tc_pol 1 1]) -fill red -width 4 .t.c itemconf 1$tc_edge([tc_pol 1 0]) -fill green -width 4 .t.c itemconf 1$tc_edge([tc_pol 1 0]) -fill red -width 4 # ^ konfig. poł. nr 0 i 1 dla wierz z ID=1 proc tc_pol_conf {id pol args} { global tc_edge eval .t.c itemconf 1\$tc_edge([tc_pol $id $pol]) $args } tc_pol_conf 1 0 -fill green -width 1 tc_pol_conf 1 0 -fill green -width 4 # ^ uproszczenie poprzedniego # drzewo losowe nieukorzenione, 5.11.2019 # + uwaga: tu NIE ma konwencji, że "do parenta przez poł. nr 0" !! set G [exec ./drzewolosowe01 50] set EG [lindex $G 1] set liczbaWierz 0 array unset sasiedzi foreach e $EG {eval G::kraw $e} G::pokazGraf G::rysujGraf # drzewo losowe za pomocą DodajKraw z symul_lib.tcl, 08.11.2021 # + uwaga 1: tu chyba JEST konwencja, że "do parenta przez poł. nr 0" !! # + uwaga 2: zmodyfikowałem symul_graf_lib.tcl tak, że działa dla 50 wierz!! 15.03.2023 set G [exec ./drzewolosowe01 50] set VG [lindex $G 0] set EG [lindex $G 1] source symul_lib.tcl array unset sasiedzi set liczbaWierz [llength $VG] #iterate i $liczbaWierz {set sasiedzi($i) {}} foreach v $VG {set sasiedzi($v) {}} foreach e $EG {DodajKraw {*}$e}