7. vje~zbe iz C-a -- 1. zadatak
✓XHTML1
U datoteci "poligon.in" nalaze se koordinate vrhova poligona. Koordinate
su sve cjelobrojne, izme~du 0 i 20, i sve stranice poligona su paralelne
koordinatnim osima: to zna~ci da izme~du svaka dva
susjedna vrha (a,b) i (c,d) morate ubaciti to~cku (c,b)!
Va~s program treba:
- u~citati datoteku poligon.in, ubacuju~ti me~duto~cke na ispravnim mjestima
[za pola boda manje, ne morate ubacivati me~duto~cke, ve~t mo~zete pretpostaviti
da su izvorne to~cke
zadane tako da stranice poligona ve~t budu paralelne koordinatnim osima]
- Popuniti matricu 21x21 to~ckama ruba tog poligona
- odrediti dobre parametre za plenv (najmanju i najve~tu x i y
koordinatu svih to~caka) [za pola boda manje,
ne morate to ~ciniti, ve~t postavite plenv na [0,20]x[0,20]]
- nacrtati poligon funkcijom plline [za pola boda manje, nacrtajte
ga kako ~zelite -- na primjer, for petljom i funkcijom pljoin]
- pitati korisnika za koordinate neke to~cke (izme~du 0 i 20) -- ovo mo~zete u~ciniti i prije crtanja, ako vam je tako prirodnije
- ustanoviti je li ta to~cka unutar ili izvan poligona
[ovo je najte~zi dio - za jedan bod manje,
ne morate to raditi, ve~t mo~zete pretpostaviti da je to~cka unutar poligona]
- Ako to~cka jest unutra, flood-fill algoritmom popuniti unutra~snjost poligona u gore spomenutoj
matrici
- Nacrtati sve cjelobrojne to~cke koje su postavljene u matrici, na ekranu. [za pola boda manje, ne morate crtati u plplotu, ve~t samo ispi~site matricu na ekran]
Stog mo~zete implementirati standardno pomo~tu polja.
Opis flood-fill algoritma:
- stavimo jednu unutra~snju to~cku poligona na stog i obojamo je
- sve dok stog nije prazan:
- pogledamo to~cku T na vrhu stoga (ne uklonimo ju sa stoga)
- ako je to~cka neposredno iznad to~cke T neobojana, obojamo ju i stavimo na stog, te prelazimo na 1.
- u protivnom, ako je to~cka neposredno ispod to~cke T neobojana, obojamo ju i stavimo na stog, te prelazimo na 1.
- u protivnom, ako je to~cka neposredno desno od to~cke T neobojana, obojamo ju i stavimo na stog, te prelazimo na 1.
- u protivnom, ako je to~cka neposredno lijevo od to~cke T neobojana, obojamo ju i stavimo na stog, te prelazimo na 1.
- uklanjamo to~cku T sa stoga