% Trokut Sierpinskog fraktal je definiran sljedecim jednostavnim pravilima:
% 1. Odaberimo tri tocke u ravnini koje predstavljaju vrhove trokuta.
% 2. Odaberimo slucajnim izborom tocku unutar trokuta i smatrajmo to trenutnom pozicijom.
% 3. Odaberimo slucajnim izborom bilo koji od tri vrha trokuta.
% 4. Pomaknimo se u srediste duzine koja spaja tocku trenutne pozicije i vrh trokuta odabran u tocki 3.
% 5. Nacrtajmo tocku trenutne pozicije.
% 6. Ponovimo korake 3., 4. i 5.

clear all

% Odredjujemo broj ponavljanja procedure opisane u koracima 3., 4. i 5. te
% postavljamo brojac ponavljanja na nulu:
broj_iteracija = input('Broj ponavljanja: ');
brojac = 0;

% Korak 1
vrh1 = [50, 100];
vrh2 = [0, 0];
vrh3 = [100, 0];

% Korak 2
a = input('\nx-koordinata pocetne toèke (izmeðu 0 i 100): ');
if a < 50
   bmax = 2*a;
else
   bmax = -2*a + 200;
end
disp(sprintf('Najveca dozvoljena vrijednost za y-koordinatu pocetne tocke iznosi %g!', bmax));
b = input('\ny-koordinata pocetne tocke: ');
pocetak = [a b];

% Postavke crteza - ne zelimo prikaz koordinatnih osi, a zelimo posebno istaknuti polaznu tocku:
clf
axis off
hold on
plot(pocetak(1), pocetak(2), 'k.')

% Koraci 3. - 6.
while(brojac <= broj_iteracija)
    slucaj = 1 + floor(rand(1)*3);
    if slucaj == 1
        x = pocetak(1) + (vrh1(1) - pocetak(1))*0.5;
        y = pocetak(2) + (vrh1(2) - pocetak(2))*0.5;
    elseif slucaj == 2
        x = pocetak(1) + (vrh2(1) - pocetak(1))*0.5;
        y = pocetak(2) + (vrh2(2) - pocetak(2))*0.5;
    else
        x = pocetak(1) + (vrh3(1) - pocetak(1))*0.5;
        y = pocetak(2) + (vrh3(2) - pocetak(2))*0.5;
    end
    plot(x, y, 'k-')
    pocetak(1) = x;
    pocetak(2) = y;
    brojac = brojac + 1;   
end