1
|
Semestrálna práca na predmet Human and Computer Interaction. Bolo to špeciálne zadanie, ktoré mi prinieslo zaručené D už počas semestra, bolo to moc fajn, lebo ja som spravil jedno zadanie a ostatný robili tri a mal som ešte viac bodov ako oni.
Zadanie bolo jednoduché, v priestore sú umiestnené objekty, nad ktoré a nakreslí 2D ono a objekty sa najkratšou cestou vytlačia von z okna. Na prvý pohľad to vyzerá jednoducho. Aj by bolo, keby sa kreslilo len jedno okno a vypadol by teda problém s prienikom okien, alebo by sa okná zakresľovali iba ortogonálne, ľahšie by sa počítalo. Tak ale nebolo to nič, čo by sa s troškou matematiky nedalo vyriešiť (teraz si už ale fakt nepamätám, ak som to napokon riešil, ale určite to nebolo trasovanie zjednoteného objektu pixel za pixlom :) )
Ovládanie programu je robené výlučne myšou, až na vynulovanie obrazovky čo sa robí medzerníkom a vypnutie esc. Objekty sa do priestoru vkladajú ľavým tlačítkom myši. Pokiaľ je tlačítko zatlačené, môžete kolieskom meniť hĺbku, no nakoľko je koliesko dosť nepraktické, tak môžete počas držania ľavého tlačítka zatlačiť aj práve a za ich súčastného držanie hýbať myšou hore dole, čím sa bude taktiež meniť hĺbka. Stlačím pravého tlačítka začnete kresliť okno, klasicky chytím a ťahám, keď tlačítko pustíte, automaticky sa prepnete do rotovacieho módu a pohybom myši meníte natočenie okna. Výsledok potvrdíte ľavým tlačítkom. Po tomto procese sa spustí algoritmus prieniku okien, o výsledku ktorého informuje bliknutie hrán výsledného polynómu na červeno. V tom istom okamihu sa začnú objekty presúvať na okraj tou najkratšou cestou. Po vytlačení objektu mimo výsledný polynóm, opäť zablikajú jeho hrany. Vložené objekty si zachovávajú aj istú rotáciu podľa pohybu myši v čase jeho pustenia, citlivosť som však nastavil veľmi nízku hodnotu, aby to nevyzeralo šialene. Preto je badateľná iba slabá rotácie o niektorých objektov (stále je to nespravodlivé voči guli, u ktorej to rotovanie nieje skoro vôbec poznať :) )
Nakoľko je program napísaný v jazyku Lua, tak som priložil aj priamo interpreter tohoto jazyka, vďaka čomu by mal byť kód spustiteľný ako pod GNU/Linuxom tak aj windwsom. Rozdiel medzi linuxovou a windowsovou binárkou je iba v priložených knižniciach (gl, glut, memarray). Windows má na spúštanie napísaný bat súbor, pričom v linuxe sa dá program priamo spustiť cez priložený interpreter.
EDIT: Tak som prisiel na to, ako som to robil, okno som rozdelil na 4 vektory a riesil ich pretinanie, no a polohu objektu voci vektoru uz nebol problem urcit. (Teda taky je momentalny predpoklad)
objekty.zip (127 KB)
objekty-bin.zip (127 KB)
objekty-bin-win.zip (241 KB)
1