Fabijan Lukin, Fran Pregernik, Tomislav Sukser

Dokumentacija za izradu programa i senzora za obojivo računarstvo

Povratak

7        Primjeri

U sljedećem dijelu ovog dokumenta dat ćemo kratak pregled napisanih programa i objasniti njihov rad, s pokojim retkom pseudokoda ili nekom jednostavnom ilustracijom. Detaljnije o svakom programu može se saznati iz izvornog koda koji je komentiran.

7.1    Objašnjen rad programa Gradient

Program Gradient predstavlja gradijent na zidu, čija vrijednost ovisi o udaljenosti od izvora, pri čemu se izvorom smatra računalo u koje je inicijalno ubačen program Gradient. Udaljenost se mjeri u skokovima (engl. hops) koji predstavljaju broj potrebnih zrcaljenja da bi podatak s izvora došao do računala za koje se računa gradijent. Prilikom inicijalnog učitavanja programa Gradient u portal, vrijednost skokova je postavljena na nulu, dok prilikom instalacije programa u bilo koje drugo računalo, taj podatak dolazi uvećan za jedan. Ovim postupkom bi načelno svaki program trebao vidjeti susjede kojima je vrijednost skokova manja za 1 od njega samog. No, ukoliko to nije tako i postoje susjedi koji imaju još manju vrijednost broja skokova, program se postavlja na vrijednost tog broja uvećanu za 1 jer postoji način da u tolikom broju skokova podatak zrcaljenjem doputuje od izvora do njega. Ovdje je dan pseudokod metode Update programa Gradient:

// brojSkokova je zapisan kao podatak na podatkovnoj stranici

Update()

{

    prođi kroz sve susjede S

    {

        ako (S nema Gradient)

        {

            kopiraj Gradient na S;

        }

        inače ako (S.brojSkokova < brojSkokova – 1)

        {

            brojSkokova = S.brojSkokova + 1;

        }

    }

}

7.2    Objašnjen rad programa Coordinate Tunnel

Ovaj program sastoji se od tri dijela nazvana maštovitim nazivima First, Second i Third. Prvi dio nije ništa pametnije od običnog gradijenta. Drugi program je gradijent koji zna izračunati koliko jedan skok između podatkovnih stranica u prosjeku vrijedi za fiktivnu jediničnu udaljenost u koordinatnom sustavu (nazvat ćemo to hopx). Pseudokodom bi njegov glavni, tj. najbitniji dio izgledao:

{

    Izračunaj d = korijen ( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );

    Izračunaj hopx = (broj skokova između prve i druge točke) / d;

    Pošalji hopx na sva druga obojiva računala;

}

Osim toga, valja spomenuti način na koji treći dio ovog programa računa svoje koordinate. Doslovce rečeno, on pogađa. Ako imamo dvije kružnice koje se sijeku u dvije točke (pretpostavit ćemo da je korisnik bio dobre volje, ili ako nije, onda da je barem želio nacrtati koordinatni sustav na zidu), postoje 2 u potpunosti jednako dobra rješenja. Koje ćemo odabrati? Nama neće biti svejedno jer koordinatni sustav bojamo tako da mu je šaren jedino prvi kvadrant. Pa ako imamo dvije točke za koje vrijedi da je jedna unutar prvog kvadranta a druga ne, odabrat ćemo onu u prvom kvadrantu. Ako su obje izvan prvog kvadranta, izabrat ćemo onu bližu ishodištu. Konačno, ako su obje u prvom kvadrantu, odabrat ćemo onu dalju od ishodišta. Osim navedenoga, ovaj dio programa, kao i prethodna dva navedena dijela, ne radi ništa posebnije od širenja gradijentnog polja.

Odabir „bolje“ točke

7.3    Objašnjen rad programa Coordinate Calculator

Pri kraju opisa rada koordinatnog sustava, prvo ćemo nešto reći o bojanju. Ono se izvodi tako da se za cjelobrojne pozitivne koordinate točke (obojivog računala u kojem se nalazi taj program) izračuna zbroj tih koordinata po modulu broja raspoloživih boja u paleti i da dobiveni broj određuje redni broj boje za prikazivanje. Još preostaje da odredimo o kojim koordinatama se radi. Prethodno spomenuti program je napravio 3 gradijentna polja i to od 3 točke čije koordinate znamo; sveukupno: znamo koordinate 3 točke i udaljenost od svake. Zatim ćemo iskoristiti jednostavan matematički postupak pod nazivom trilateracija. Taj postupak zahtijeva postojanje 3 točke i poznate udaljenosti za dvije dimenzije, no, to možemo obaviti načelno i sa dvije točke i poznate udaljenosti, ali onda bi morali imati jasan kriterij odabira. U ovom programu je implementirano nešto što spada u obje kategorije. Čudno ili ne, tako je. Na početku ćemo izračunati koordinate dvije točke – presjecišta kružnica. Odabrat ćemo onu čija je udaljenost do treće točke „približnija“ udaljenosti do treće točke koju smo odredili preko gradijenata. Ne smijemo nikako računati na to da će nam se uvijek poklopiti vrijednosti i da neće nastati greška u računanju. Postupak je ilustriran na slici.

Skica postupka trilateracije

O programu Shadowfax kao i o njegovom malo poboljšanom bratu nazvanom Adaptive Shadowfax messenger nećemo ovdje govoriti. Razlog je taj što taj program sam po sebi se baš i ne uklapa u minijaturizam arhitekture obojivih računala. Pogled na izvorni kod tih programa bit će sasvim dovoljan za demonstraciju kompleksnosti. Ono što razdvaja ta dva programa je to što Shadowfax nije otporan na greške u komunikaciji, ali zato uvijek nudi pronalaženje relativno dobre staze, a Adaptive Shadowfax messenger je taj koji će na bilokoji način prenijeti poruku od jedne do druge strane, samo da ona stigne. Uostalom, izbjegavajte ovakve ogromne programe. Usporavaju simulaciju.