Skip to content

matf-pp/2019_Geo-Demonstrator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

KriLa

GeoDemonstrator ➿

Seminarski rad na kursu Programske paradigme. Korisnik zadaje figuru u dvodimenzionom okruženju, nad kojom zatim vrši proizvoljne afine geometrijske transformacije: translaciju, rotaciju, refleksiju, skaliranje, smicanje.

Ukratko, skelet projekta je GKI sa platnom koje predstavlja koordinatni sistem, poljima za odabir i unos parametara transformacija i dugmetom koje ih izvršava. Ideja je omogućiti jednostavno interaktivno prikazivanje i lakše razumevanje materije koja se obrađuje na časovima Geometrije za I smer, kao i Računarske grafike.

Pored toga, sastavni deo rada su i pomoćne odnosno dodatne biblioteke tj. moduli koji se mogu nezavisno upotrebljavati, a koji implementiraju i više funkcionalnosti nego što je potrebno za glavni program. Tu se posebno izdvaja geometrijski modul (možda neki budući GeoTransformator), a ne treba zanemariti ni modul sa 'pričljivom' metaniti sa povratnom vrednošću, kao ni modul za paralelizovano izračunavanje konveksnog omotača skupa tačaka.

Tehnički detalji 🤖

Program je napisan u jeziku Python3 (malo starija verzija 3.2.3), na operativnom sistemu Ubuntu, uz korišćenje osobina raznih paradigmi odnosno obrazaca programiranja koji su u osnovi ovog jezika ili čiji se koncepti provlače kroz njega:

  • imperativna/proceduralna paradigma: promenljive, funkcije, nizanje naredbi, opis procedure...,
  • skript paradigma: exec, eval, obrada pozivanja čak i sintaksno neispravnih naredbi...,
  • objektno-orijentisana paradigma: klase, nasleđivanje, polimorfizam, preopterećivanje operatora...,
  • funkcionalna paradigma: map, filter, partial, fje višeg reda, lambda fje, dekoratori, apstrakcija listi...,
  • komponentna paradigma: grafički korisnički interfejs, više nezavisnih modula koji predstavljaju ugovorene interfejse,
  • konkurentna paradigma: višenitno programiranje (nalaženje konveksnog omotača je u potpunosti paralelizovano),
  • reaktivno i programiranje vođeno događajima: GKI, koncept glavne petlje, osluškivanje i obrada događaja, reakcija na promenu stanja menija sa opcijama prilikom odabira željene transformacije,
  • generičko programiranje: jedan obrazac obrade podataka nezavisno od ulaznih tipova, razni tipovi polimorfizma (magični metodi, dinamička tipiziranost, preopterećivanje operatora...),
  • reflektivno i metaprogramiranje: pisanje programa unutar njega samog (nit sa povratnom vrednosti je u potpunosti ručno, dakle, dinamički definisana), in(tro)spekcija tj. refleksija na ovaj način napisane klase.

Upotrebljeni su i prikladni pomoćni moduli neobuhvaćeni fakultetskim kursevima: tkinter, threading, operator, time, inspect, types... Naravno, nisu izostavljeni ni oni upotrebljavani: sys, os, math, functools, random, copy...

GKI je odrađen pomoću Pajtonovog standardnog Tk/Tcl paketa – tkinter – koji se može podesiti komandom poput sudo apt-get install python3-tk za Ubuntu za starije verzije, dok je za novije automatski podešen.

Podešavanje 📝

Nakon kloniranja (git clone https://github.com/matf-pp2019/Geo-Demonstrator) tj. bilo kog načina preuzimanja repozitorijuma, program se pokreće pozivanjem Pajtonovog interpretatora nad glavnim fajlom (python3 main.py).

Osim toga, omogućeno je i direktno pokretanje komandom poput ./main.py, pošto se na početku svake datoteke sa glavnom (main ili test) fjom nalazi shebang koji sugeriše operativnom sistemu gde se nalazi neophodni interpretator. Naravno, za ovaj pristup je neophodno prethodno učiniti fajl izvršivim komandom poput chmod u+x main.py.

Program korektno radi i na operativnom sistemu Windows. Za oba navedena operativna sistema dostupne su release verzije rada na odgovarajućoj stranici na GitHub adresi projekta, što uključuje .exe za Windows 10.

Članovi tima 💻