Pozdrav,

Uzeo bih ovaj zadatak da radim, ako je to u redu.

Pozdravi,
Dušan

пет, 11. феб 2022. у 23:14 Marko Vojinovic <vmarko@ipb.ac.rs> је написао/ла:

Implementirati metod u klasi SimpComp koji ce da snimi dati simplicijalni kompleks u fajl:

   file* SimpComp::save_complex_to_file( string filename );

   Input: ime fajla u koji ce se snimiti kompleks.
   Output: pointer na fajl u koji je snimljen kompleks.

Prvi korak u implementaciji ovoga je odabir tipa fajla koji ce da sadrzi podatke, i njegove strukture. Fajl mora da bude istovremeno i machine-readable i human-readable, i dva moguca predloga su .xml i .json tipovi, mada slobodno predlozite i neki treci ako mislite da je bolji od ova dva. Algoritam za snimanje bi trebalo da ide ovako:

(1) Zapamtiti trenutnu vrednost globalne varijable next_free_uid_number iz klase UniqueIDColor (na primer, neka ta vrednost bude 12). Kompleks mozda vec sadrzi neke boje iz ove klase, i sve instance za koje je id manji od ove zapamcene trenutne vrednosti treba preskakati i ignorisati u nastavku algoritma, tj. tretirati ih kao i boje svih ostalih tipova.

(2) Obojiti ceo kompleks bojom UniqueID (pozvati f-ju UniqueIDColor::colorize_entire_complex() iz zadatka 2). Ove nove id-ove cemo da koristimo za imenovanje pojedinacnih simpleksa u fajlu.

(3) Zapisati u fajl strukturu vektora elements naseg kompleksa --- deklarisati level 0 i u njemu pobrojati nove id boje svih 0-simpleksa, zatim deklarisati level 1 i pobrojati sve 1-simplekse, itd zakljucno sa nivoom D. U .xml formatu bi to moglo da izgleda npr ovako (ne znam tacno kako ide .xml sintaksa, pisem po secanju):

<level 0>12,13,14,15,16,17,18</level 0>   // id brojevi nivoa 0 u kompleksu
<level 1>19,20,21,22</level1>             // id brojevi nivua 1 u kompleksu
...                                       // nastavljamo ovako zakljucno sa nivoom D

Obratite paznju da su svi id brojevi >= 12.

(4) Zapisati u fajl strukturu svakog k-simpleksa --- deklarisati simpleks njegovim id brojem, i zatim ispisati sve tipove i vrednosti boja, kao i id brojeve svih njegovih suseda, poredjanih kao u koraku (3). Na primer, .xml sintaksa bi izgledala recimo ovako:

<ksimplex 12>
<color-type>0</color-type>       // ova nula je TYPE_BOUNDARY
<color-value>true</color-value>  // ovo je vrednost boundary boje
<color-type>129</color-type>     // ovo je TYPE_UNIQUE_ID
<color-value>11</color-value>    // ovo je id vrednost UniqueID boje, koja je *manja* od 12
...                              // pisemo type-value kombinacije za sve boje, *osim* za (poslednju) UniqueID boju koja je veca od 12
<level 0></level0>               // ovaj simpleks npr nema susede nivoa nula
<level 1>19,22,41,356</level1>   // id boje suseda nivoa 1 (svi su *veci* od 12...)
...                              // pisemo strukturu za svih D nivoa suseda
</ksimplex 12>
<ksimplex 13>                    // ponavljamo gornju strukturu za naredni k-simpleks
...
</ksimplex 13>
...                              // dok ne uradimo sve k-simplekse u kompleksu.

Kad se ovo zavrsi, fajl je snimljen, zatvoriti ga. Ukoliko postoje neke vec gotove biblioteke C++ rutina koje konstruisu .xml i .json sintaksu na osnovu nekih ulaznih podataka, verovatno je dobra ideja da ih iskoristimo, umesto da sami pisemo svaki simbol tih fajlova (smanjicemo mogucnost sintaksnih gresaka i povecacemo kompatibilnost).

(5) Deinstancirati sve UniqueID boje iz kompleksa koje smo dodali u koraku (2), uz paznju da ne diramo eventualne UniqueID boje koje su vec postojale (koje imaju id vrednost < 12 iz primera), cime vracamo kompleks u njegovo pocetno stanje. Takodje, setovati globalnu varijablu next_free_uid_number natrag na vrednost 12, zapamcenu u koraku (1).

Takodje, mozda bi imalo smisla napraviti dve f-je za snimanje fajla (umesto one jedne deklarisane gore),

    SimpComp::save_complex_to_xml_file()
    SimpComp::save_complex_to_json_file()

koje bi implementirale sve ovo odozgo, ali sa sintaksom odgovarajucom za dati format. Ubuduce cemo mozda da smislimo i neki treci format za snimanje, na primer .tex (za crtanje TikZ paketom u LaTeX-u), ili .nb (za Mathematicu), ili sl.


:-)
Marko


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


--
QGHG-it-dev-list mailing list
QGHG-it-dev-list@ipb.ac.rs
http://mail.ipb.ac.rs/mailman/listinfo/qghg-it-dev-list