[QGHG-it-dev-list] Zadatak 1 --- seed fja za tetraedar

Marko Vojinovic vmarko at ipb.ac.rs
Sun Feb 20 15:53:35 CET 2022


Cekaj, ne kapiram kako radi ova rekurzija u add_neighbor:

     if(!k1)
         return;

Ovo parce je provera da li je k1 nullptr, pretpostavljam da rekurziju zavrsavas kad stignes ovde?

     int kK1 = k1->k;
     if(kK1 < 0)
         return;

Ovo parce ne radi nista?! Nivo datog simpleksa, k1->k, je uvek bar nula ili veci. Ovaj if nikad nije ispunjen.

     if(!kK1){
         add_neighbor_couple(k1);

Ovo parce dodaje k1 kao suseda samo ako je kK1==0, tj. ako je k1 verteks. Zar ne bi trebalo da ga doda uvek, cak i ako mu je kK1>0 ? Gde inace dodajes susede koji nisu verteksi?

     }else{
         for(auto &it : k1->neighbors->elements[kK1 - 1])
             add_neighbor(it);
     }

Ovo parce je ok, pod pretpostavkom da elements[-1] vraca nullptr, koji ce onda u sledecoj iteraciji da zavrsi rekurziju. Ali mi je malo ruzno da se oslanjamo na tako nesto --- na primer, u [1] kazu za std::vector::operator[] da ce elements[-1] da generise undefined behavior:

  "Portable programs should never call this function with an argument n that is out of range, since this causes undefined behavior."

Pa bi bilo bolje da prvo proveris da li je kK1-1 nenegativno, pre nego sto odes dublje u rekurziju.

:-)
Marko


Dr. Marko Vojinovic
Group for Gravitation, Particles and Fields
Institute of Physics
University of Belgrade
======================
home page: www.markovojinovic.com
e-mail:    vmarko at ipb.ac.rs



On Sun, 20 Feb 2022, Nenad Korolija wrote:

> Hvala!
> 
> Napravio da add_neighbor(k1) rekurzivno dodaje i sve lover level neighbors od k1 (ako vec ne postoje). Pod dodavanjem nekoga kao suseda podrazumevam zapravo 2 dodavanja (u oba smera).
> Azurirao seed.cpp u skladu sa tim.
> To da za dimenziju k dodam samo k-1 susede je i bila ideja - zato sam i pitao. :)
> 
> Trenutno, u classes.cpp:63 ne proveravam da li vec postoji sused nivoa k-1, pa da stanem, vec i dalje teram sa k-2, k-3,...0. Ovo je bezbednije, ali podrazumeva mnogo nepotrebnog
> drljanja. Ako u tetrahedron dodamo trougao, automatski smo mu dodali 3 ivice i 3 tacke. Uzalud cemo po 2. put prolaziti svaku ivicu, a svako uzaludno obilazenje ivice povlaci po dva
> uzaludno obidjena verteksa. Vidi sam sta to znaci na vise dimenzija...
> Da dodam ljudski uslov, pa da se oslanjamo da ce korisnik znati sta radi (sta dodaje)?
> 
> 
> Ovo za print_compact vidim kao dupliranje koda sa potencijalno malo doprinosa:
> 1) Ako stampamo simplex, vec saljemo warning time. Ne bi trebalo da se desi.
> 2) Ako Dušan napravi bojenje, uvek mozemo iz print_compact prvo da pozovemo to, pa onda odstampamo. Mana: u tom slucaju nemamo warning.
> Ako je warning bitan, mozemo samo 1), pa kad vidi, neka zatrazi pomoc od Dušana!
> Ako nije bitan, mozemo u svakom slucaju da trazimo pomoc od Dušana!
> Ono sto mi izgleda kao sistemsko resenje je da Dušanov kod ima mogućnost da izbacuje warning ako treba (bool argument), pa da ga pozivamo kako hoćemo. Naravno, Dušan ne treba da brine o
> ovome. Naknadno se da srediti ova dodatna funkcionalnost.
> Moje skromno iskustvo mi govori da ne treba da imamo kod sa istom funkcionalnoscu na 2 mesta, pogotovo ako ih pisu 2 coveka, cime naknadno menjanje/odrzavanje postaje znatno teze.
> Marko, javi kako mislis i implementiracemo. Ipak ja vidim samo pesak i ne znam kakva ce gradjevina od njega biti napravljena, tj. ne vidim ko bi obojio deo, pa stampao sa ispisivanjem
> svega (nadopunjujuci UniqueID gde fali). Zato sam print_compact i napravio tako da ne stampa nista ako vidi da niko od suseda nije obojen. Tako mozemo za tetraedar da stampamo samo
> trouglove i nista vise, tj. za neku blesavu dimenziju ne dobijamo prakticno beskonacan i necitljiv izlaz.
> 
> Pozdrav,
> Nenad
> 
> On Sun, Feb 20, 2022 at 5:17 AM Marko Vojinovic <vmarko at ipb.ac.rs> wrote:
>
>       Pozdrav Nenade,
>
>       Odlicno, nov kod je super, narocito add_neighbor! :-)
>
>       > Hoces da napravim da add_neighbor dodaje i podsusede
>
>       Da, to je odlicna ideja, napravi to! To bi nam omogucilo da za svaki k-simpleks moramo eksplicitno da pozovemo add_neighbor da mu doda podsusede samo jedan nivo ispod (k-1),
>       a onda ce add_neighbor automatski da mu doda i podsusede tih podsuseda itd. I to sve isto simetricno, tako da k-simpleks bude automatski na spiskovima nadsuseda svakog od
>       tih dodatih podsuseda.
>
>       Samo moramo da pazimo na jednu stvar --- takva funkcionalnost add_neighbor se oslanja na pretpostavku da su svi podsusedi datih podsuseda vec definisani i dodati gde treba.
>       Drugim recima, u seed f-jama moramo da dodajemo susede redom od najmanjeg nivoa ka najvecem: prvo da edgevima dodamo vertekse kao podsusede, pa onda trouglovima edgeve, pa
>       onda tetraedrima trouglove, itd. Ako se odstupi od tog rastuceg redosleda, f-ja add_neighbor nece dati tacan rezultat. Ali to je ok, samo treba da budemo svesni da je
>       redosled dodavanja podsuseda bitan.
>
>       > Ako stignes, baci pogled na Triangle compact printing ako ne postavis UniqueID boje, tj. iz seed_single_triangle izbacis pretposlednji paragraf koda ("Create and apply
>       unique ID
>       > colors:". :) Ja sam stavio da ne stampa u zagradama ako ne nadje UniqueID color. Mozda treba. Slobodno usput ocisti kod od mojih UniqueID boja.
>
>       Vidim output od print_compact za tetrahedron, to je to isto, jer njemu nismo zadali UniqueID. :-) Radi ok, tj. ispisuje ono sto ocekujem kad nije obojen.
>
>       Ali cela ta situacija kada fale UniqueID boje je potpuni corner-case koji nam uopste nije vazan, i moze da nastane samo nekom greskom (koje smo mi npr. namerno pravili
>       rucnim zakomentarisavanjem onih linija u seed f-jama). To sto pisemo "simplex" je samo da bismo naznacili korisniku da se negde zeznuo, nista vise.
>
>       Umesto cele te price, mozemo npr. da dopunimo print_compact f-ju da sama automatski doda UniqueID boju na dati k-simpleks ako ustanovi da je ovaj nema, i da posalje
>       log_report warning da je negde nedostajala ta boja, da korisnik bude upozoren u log-fajlu. I onda je to to, ispisivanje reci "simplex" nece nikada da se dogodi.
>
>       A Dusan ce (kroz zadatak 2) da napravi f-je kojima cemo sistematski po potrebi da stavljamo UniqueID boje na simplekse i\ili na ceo kompleks, pa ce print_compact mahom uvek
>       da radi sa unapred definisanim bojama. Tako da ceo taj corner-case u praksi ne bi trebalo maltene nikad da se pojavi. ;-)
>
>       :-)
>       Marko
> 
>
>       Dr. Marko Vojinovic
>       Group for Gravitation, Particles and Fields
>       Institute of Physics
>       University of Belgrade
>       ======================
>       home page: www.markovojinovic.com
>       e-mail:    vmarko at ipb.ac.rs
> 
> 
>
>       On Sat, 19 Feb 2022, Nenad Korolija wrote:
>
>       > Zdravo Marko,
>       >
>       > Adaptirao sam add_nighbor da dodaje susede simetricno uz prethodnu proveru.
>       > Azurirao sam onda seed funkcije.
>       > Dodao sam da main stampa i compact tetrahedron.
>       >
>       > Hoces da napravim da add_neighbor dodaje i podsusede, tako da za tetrahedron->add_neighbor(trougao), doda ne samo trougao i trouglu tetrahedron, vec i sve ivice trougla
>       (ako vec nisu i
>       > svim ivicama trougla tetrahedron) i sve vertekse (ako vec nisu dodate ivice ni verteksi i obrnuto=da verteksima doda tetrahedron)?
>       > Naravno, pravio bih generalno za proizvoljnu dimenziju.
>       >
>       >
>       > Ako stignes, baci pogled na Triangle compact printing ako ne postavis UniqueID boje, tj. iz seed_single_triangle izbacis pretposlednji paragraf koda ("Create and apply
>       unique ID
>       > colors:". :) Ja sam stavio da ne stampa u zagradama ako ne nadje UniqueID color. Mozda treba. Slobodno usput ocisti kod od mojih UniqueID boja.
>       >
>       > Pozdrav,
>       > Nenad
>       >
>       > On Thu, Feb 17, 2022 at 2:35 PM Marko Vojinovic <vmarko at ipb.ac.rs> wrote:
>       >
>       >       Pozdrav Jaroslave i Nenade,
>       >
>       >       Pogledao sam seed f-ju za tetraedar, sve izgleda ok, samo morate da popravite susede jos malo. Naime, tetrahedron1 ("unutrasnjost" kompleksa) je sused za sve ostale
>       >       simplekse --- ne samo za trouglove, nego i za ivice i vertekse. Pa treba da se poveze i sa njima, na isti nacin kao i trouglovi. Takodje, i svi oni treba da imaju
>       >       tetrahedron1 kao suseda (ukljucujuci i trouglove).
>       >
>       >       Btw, izgleda da vam nisam dovoljno precizno objasnio sta znaci "biti sused" na sastancima --- sused datog k-simpleksa su svi simpleksi koji ga "dodiruju" na crtezu.
>       Posto je
>       >       "unutrasnjost" cele figure takodje k-simpleks (najviseg nivoa k=D), ona uvek dodiruje sve ostale simplekse u figuri.
>       >
>       >       Drugo, jedna tehnicka sugestija --- posto je "biti sused" uvek simetricna relacija (ako je A sused od B onda je i B sused od A, tj. "dodirivanje" je uvek dvosmerno),
>       ideja
>       >       je da napravimo malo inteligentniju implementaciju f-je KSimplex::add_neighbor( *k1 ), tako da radi sledece:
>       >
>       >       (1) proveri da li je dati simpleks k1 vec prisutan na spisku mojih suseda --- dodaj ga ako nije, i zatim
>       >       (2) proveri da li sam ja vec prisutan na njegovom spisku suseda --- dodaj me tamo ako nisam.
>       >
>       >       Ovde pod "ja" mislim na pointer na onaj "this" objekat u odnosu na koji se poziva f-ja. Ovakva implementacija bi s jedne strane osigurala da ne dodamo nesto negde
>       duplo, a s
>       >       druge strane prepolovila bi kolicinu koda u svim dosadasnjim seed f-jama, da ne moramo uvek da pisemo duple konstrukcije tipa
>       >
>       >          e2->add_neighbor(v1);
>       >          v1->add_neighbor(e2);
>       >
>       >       nego da bude dovoljno pozvati samo jednu od te dve f-je.
>       >
>       >       :-)
>       >       Marko
>       >
>       >
>       >       Dr. Marko Vojinovic
>       >       Group for Gravitation, Particles and Fields
>       >       Institute of Physics
>       >       University of Belgrade
>       >       ======================
>       >       home page: www.markovojinovic.com
>       >       e-mail:    vmarko at ipb.ac.rs
>       >
>       >
>       >
>       >       On Mon, 14 Feb 2022, Marko Vojinovic wrote:
>       >
>       >       >
>       >       > Pozdrav Jaroslave i Nenade,
>       >       >
>       >       > Odlicno, to je to, samo treba da se doteraju susedi. Plan je sledeci --- kad
>       >       > budemo napravili f-je za "rast" kompleksa, videcemo koliko memorije kompleks
>       >       > trosi. Onda mozemo iz nekog velikog kompleksa da obrisemo sve susede sem
>       >       > prvih nad- i pod-suseda, i da vidimo koliko ce to memorije da oslobodi, i da
>       >       > li nam je zgodnije da ostale susede pamtimo ili racunamo svaki put. Ali to
>       >       > cemo da testiramo i odlucimo posle --- a za sada u seed f-jama zadajemo sve
>       >       > susede.
>       >       >
>       >       > Drugo, ako nije jasno sa slike sta je cemu susedno (sto ume da bude konfuzno
>       >       > dok se ne uvezbate), mozete da primenite korake (2.1) i (2.2) iz algoritma za
>       >       > zadatak 3. Za tetraedar to moze bez problema da se ispise na papiru, i onda
>       >       > znate koji simpleksi treba da se stave u koje susede.
>       >       >
>       >       > I da odgovorim na pitanja:
>       >       >
>       >       >> Tetrahedron sam nacrtao ručno (nisam mogao da kopam po snimljenom
>       >       >> materijalu, mislim da smo ga negde crtali), pa sam ga opisao u kodu.
>       >       >
>       >       > Ok, mada nema potrebe --- dok ne zadamo tetraedru neke specificne osobine
>       >       > (stavljanjem boja), tetraedar je tetraedar, svi su isti. :-) Kako god ga
>       >       > nacrtao, on ima 4 temena, 6 ivica, 4 trougla i 1 unutrasnjost (sa pravilno
>       >       > zakacenim susedima). :-)
>       >       >
>       >       >> Nisam još dodelio uniqueID boje, jer to nije traženo u zadatku. S obzirom
>       >       >> da je to implementirano u seed_single_triangle metodi, trebalo bi da bude i
>       >       >> ovde?
>       >       >
>       >       > Ne treba da dodeljujes UniqueID boje, to cemo da izbacimo i iz
>       >       > seed_single_triangle(), i umesto toga cemo da napravimo par zasebnih funkcija
>       >       > da stavljaju te boje --- to je cilj zadatka 2. Jedina boja koju zadajemo
>       >       > eksplicitno u seed f-jama je Boundary boja (i to samo ako dati kompleks ima
>       >       > granicu, a inace ni nju ne stavljamo). Sve ostale boje ce se dodavati nekim
>       >       > drugim f-jama (izvan seed f-ja), kad nam koja boja zatreba --- ukljucujuci i
>       >       > UniqueID.
>       >       >
>       >       >> Takođe, kako glasi množina od k-simplex (k-simplexes, k-simplices?).
>       >       >
>       >       > Koliko znam, "k-simplices" je gramaticki pravilna mnozina. Ali to nije neko
>       >       > ostro pravilo, moze da se naidje i na "k-simplexes" po literaturi...
>       >       >
>       >       >> Verujem da su nam ove seed funkcije zagrevanje za seed n-dimenzionalnog
>       >       >> KSimplex-a, pa možda nema potrebe kopirati mnogo linija koda samo kao
>       >       >> proof-of-concept.
>       >       >
>       >       > Jeste, ove seed f-je jesu donekle za zagrevanje za zadatke 3 i 5 (i jos neke
>       >       > koji su u planu), ali ce da budu korisne i za testiranje ispravnosti seed
>       >       > f-je za D-simpleks --- to je zadatak 4. Ja sam tamo napisao da rezultat seed
>       >       > f-je za D-simpleks napisete na ekran i uporedite sa slikom na papiru, ali
>       >       > mozete nezavisno da izvrsite i ove seed f-je koje smo sad napravili, pa da
>       >       > uporedite sa sa njihovim rezultatom. Znaci generises jedan kompleks sa ovom
>       >       > f-jom za tetraedar, drugi kompleks sa opstom f-jom za D-simpleks (za D=3),
>       >       > zatim obojis i odstampas jedan, pa obojis i odstampas drugi, i uporedis
>       >       > izlaze --- ako je sve ok, rezultati bi morali da budu identicni. :-)
>       >       >
>       >       > :-)
>       >       > Marko
>       >       >
>       >       >
>       >       > Dr. Marko Vojinovic
>       >       > Group for Gravitation, Particles and Fields
>       >       > Institute of Physics
>       >       > University of Belgrade
>       >       > ======================
>       >       > home page: www.markovojinovic.com
>       >       > e-mail:    vmarko at ipb.ac.rs
>       >       >
>       >       >
>       >       >
>       >       > On Mon, 14 Feb 2022, Nenad Korolija wrote:
>       >       >
>       >       >> Zdravo Jaroslave,
>       >       >>
>       >       >> Mislim da je dobro što si dao boundary boje, a ne UniqueID boje. Taj deo
>       >       >> treba da pročistim iz koda seed funkcija koje sam pisao. Za sad su tamo da
>       >       >> bi se stekao osećaj kako se boji
>       >       >> UniqueID bojama i kako se štampaju (kompaktno) kompleksi u zavisnosti od
>       >       >> toga da li tačke imaju UniqueID.
>       >       >>
>       >       >> Meni deluje lepo urađeno ovo, samo što ostaje da se dogovorimo oko toga da
>       >       >> li hoćemo da pamtimo samo susede susednih dimenzija, ili svih. Ako samo
>       >       >> susednih, onda za trouglove ne moramo
>       >       >> da imamo tačke. Ako svih, onda i za tetraedar treba dodati susede nižeg
>       >       >> nivoa od trouglova i obrnuto - dodati tetraedar kao sused drugima.
>       >       >>
>       >       >> Koliko sam Marka razumeo, dobro je da imamo obe opcije, pa da u praksi
>       >       >> vidimo koja se pokazuje kao bolja, tako da sam ja za to da se dodaju i za
>       >       >> tetraedar niži susedi, ali neka Marko
>       >       >> proceni.
>       >       >> Verujem da su nam ove seed funkcije zagrevanje za seed n-dimenzionalnog
>       >       >> KSimplex-a, pa možda nema potrebe kopirati mnogo linija koda samo kao
>       >       >> proof-of-concept. U svakom slučaju, treba
>       >       >> da se dogovorimo i uniformišemo.
>       >       >>
>       >       >> Možda možeš da postaviš na github.
>       >       >>
>       >       >> Pozdrav,
>       >       >> Nenad
>       >       >>
>       >       >> On Mon, Feb 14, 2022 at 5:04 PM Jaroslav Blagojevic
>       >       >> <jaroslav.blagojevic at gmail.com> wrote:
>       >       >>       Rasparčala se poruka, pa da je spojim. Seed tetrahedrona u prilogu.
>       >       >> Tetrahedron sam nacrtao ručno (nisam mogao da kopam po snimljenom
>       >       >> materijalu, mislim da smo ga negde
>       >       >>       crtali), pa sam ga opisao u kodu. Nisam još dodelio uniqueID boje,
>       >       >> jer to nije traženo u zadatku. S obzirom da je to implementirano u
>       >       >> seed_single_triangle metodi, trebalo bi
>       >       >>       da bude i ovde? Takođe, kako glasi množina od k-simplex (k-simplexes,
>       >       >> k-simplices?).
>       >       >>
>       >       >> Pozdrav,
>       >       >>
>       >       >> Jaroslav
>       >       >>
>       >       >>
>       >       >> On Mon, Feb 14, 2022 at 4:48 PM Jaroslav Blagojevic
>       >       >> <jaroslav.blagojevic at gmail.com> wrote:
>       >       >>       Pozdrav,
>       >       >>       Jaroslav
>       >       >>
>       >       >>
>       >       >> On Mon, Feb 14, 2022 at 4:48 PM Jaroslav Blagojevic
>       >       >> <jaroslav.blagojevic at gmail.com> wrote:
>       >       >>       Seed tetrahedrona u prilogu. Tetrahedron sam nacrtao ručno (nisam
>       >       >> mogao da kopam po snimljenom materijalu, mislim da smo ga negde crtali), pa
>       >       >> sam ga opisao u
>       >       >>       kodu. Nisam još dodelio uniqueID boje, jer to nije traženo u zadatku.
>       >       >> S obzirom da je to implementirano u seed_single_triangle metodi, trebalo bi
>       >       >> da bude i ovde?
>       >       >>       Takođe, kako glasi množina od k-simplex (k-simplexes, k-simplices?).
>       >       >>
>       >       >> On Fri, Feb 11, 2022 at 10:29 PM Marko Vojinovic <vmarko at ipb.ac.rs> wrote:
>       >       >>
>       >       >>       Upoznati se sa osnovnim klasama (SimpComp i KSimplex) kroz problem
>       >       >> implementiranja seed f-je za jedan tetraedar (D=3):
>       >       >>
>       >       >>          SimpComp* seed_single_tetrahedron( void );
>       >       >>
>       >       >>          Input: nema.
>       >       >>          Output: pointer na instancirani simplicijalni kompleks koji se
>       >       >> sastoji od jednog tetraedra.
>       >       >>
>       >       >>       Funkciju implementirati kao uopstenje jednostavnijih seed f-ja
>       >       >> seed_single_edge() i seed_single_triangle() koje je Nenad uradio, i koje
>       >       >> kreiraju slicne
>       >       >>       komplekse za dimenzije D=1 i D=2 redom. Postupak ide u tri koraka:
>       >       >>
>       >       >>       (1) Instancirati nov simplicijalni kompleks dimenzije D=3 i
>       >       >> iskoristiti metod create_ksimplex() iz klase SimpComp za kreiranje
>       >       >> odgovarajuceg broja
>       >       >>       simpleksa nivoa k=0 (verteksi), k=1 (edgevi), k=2 (trouglovi) i k=3
>       >       >> (tetraedar) u tom kompleksu.
>       >       >>
>       >       >>       (2) Popuniti podklasu neighbors svakog simpleksa pointerima na
>       >       >> njegove susede, koristeci metod add_neighbor() iz klase KSimplex, na osnovu
>       >       >> slike tetraedra
>       >       >>       i definicije suseda sa uvodnih predavanja.
>       >       >>
>       >       >>       (3) Simpleksima nivoa k=2 (tj. trouglovima) dodeliti boju boundary, i
>       >       >> za svaki trougao zadati vrednost te boje na true.
>       >       >>
>       >       >>
>       >       >>       :-)
>       >       >>       Marko
>       >       >>
>       >       >>
>       >       >>       Dr. Marko Vojinovic
>       >       >>       Group for Gravitation, Particles and Fields
>       >       >>       Institute of Physics
>       >       >>       University of Belgrade
>       >       >>       ======================
>       >       >>       home page: www.markovojinovic.com
>       >       >>       e-mail:    vmarko at ipb.ac.rs
>       >       >>
>       >       >>
>       >       >>       --
>       >       >>       QGHG-it-dev-list mailing list
>       >       >>       QGHG-it-dev-list at ipb.ac.rs
>       >       >>       http://mail.ipb.ac.rs/mailman/listinfo/qghg-it-dev-list
>       >       >>
>       >       >> --
>       >       >> QGHG-it-dev-list mailing list
>       >       >> QGHG-it-dev-list at ipb.ac.rs
>       >       >> http://mail.ipb.ac.rs/mailman/listinfo/qghg-it-dev-list
>       >       >>
>       >       >>
>       >       >--
>       >       QGHG-it-dev-list mailing list
>       >       QGHG-it-dev-list at ipb.ac.rs
>       >       http://mail.ipb.ac.rs/mailman/listinfo/qghg-it-dev-list
>       >
>       >
>       >--
>       QGHG-it-dev-list mailing list
>       QGHG-it-dev-list at ipb.ac.rs
>       http://mail.ipb.ac.rs/mailman/listinfo/qghg-it-dev-list
> 
> 
>


More information about the QGHG-it-dev-list mailing list