Prijavi problem


Obeleži sve katergorije koje odgovaraju problemu

Jos detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link
Na žalost nismo trenutno u mogućnosti da obradimo Vaš zahtev.
Molimo Vas da pokušate kasnije.

Programiranje grafike pomoću Pygame, priručnik za gimnaziju

Прелази боја

Прелаз између две боје

Напиши програм који исцртава десет правоугаоника исте величине, распоређених један до другог ширином прозора. Боја првог и последњег правоугаоника се одређују насумично, а боје правоугаоника између њих су одређене тако да се врши постепен прелаз од прве до последње боје.

Кључни проблем у овом задатку је како извршити постепени прелаз нијанси између две задате боје. Кључни увид је да се прелаз врши независно за црвену, зелену и плаву компоненту. Пошто желимо да прелаз буде постепен и равномеран, конструисаћемо линеарне функције. Претпоставимо да имамо \(n\) правоугаоника тј. \(n\) нијанси које треба да одредимо. Претпоставимо да је вредност неке компоненте боје за почетни правоугаоник \(a\), а за крајњи \(b\). За ту компоненту је потребно онда конструисати линеарну функцију која слика редни број правоугаоника \(i\) у вредност те компоненте боје за тај правоугаоник такву да је за први правоугаоник тј. за \(i = 0\) вредност те компоненте \(a\), а за последњи правоугаоник тј. за \(i=n-1\) вредност те компоненте \(b\). Функција је облика \(p\cdot i + q\) и непознате коефицијенте \(p\) и \(q\) одређујемо из почетних услова. Дакле, за \(i = 0\) важи да је \(p\cdot 0 + q = a\) тј. \(q = a\). Даље, за \(i = n-1\) важи да је \(p\cdot (n-1) + q = b\), па је \(p = \frac{b-a}{n-1}\). Дакле, вредност те компоненте за правоугаоник број \(i\) се израчунава као \(a + i\cdot \frac{b-a}{n-1}\). Пошто ово не мора бити цео број, потребно га је заокружити (нпр. функцијом round).

Матрица боја

Напиши програм који исцртава поље које има \(n\times n\) квадрата такво да су боје горњег левог, горњег десног и доњег левог квадрата одређују насумично, а боје осталих квадрата се одређују тако да се прелаз боја врши поступно.

Овај задатак представља уопштење претходног. Поново се свака компонента боје анализира посебно. Овај пут конструишемо линеарну функцију две променљиве. Претпоставимо да су задате три почетне вредности \(a\), \(b\) и \(c\). Функцију конструишемо у облику \(p\cdot i + q\cdot j + r\), где су \(i\) и \(j\) редни бројеви квадрата (по хоризонтали и вертикали). Почетни услови су овај пут такви да се за \(i=0\), \(j=0\) добија вредност \(a\), да се за \(i=n-1\), \(j=0\) добија вредност \(b\), а да се за \(i=0\), \(j=n-1\) добија вредност \(c\). Тиме се добија систем од три једначине са три непознате из којег лако следи да је \(r = a\), да је \(p = \frac{b - a}{n - 1}\), а да је \(q = \frac{c-a}{n-1}\). Дакле, функција коју тражимо је \(a + i\cdot\frac{b-a}{n-1} + j\cdot\frac{c-a}{n-1}\). Остаје још један проблем који треба решити. Наиме, неке вредности ове функције (за квадрате који се налазе испод споредне дијагонале поља) могу бити мање од нуле или веће од 255. Ако се то догоди, тада је потребно вредности сасећи тј. све вредности веће од 255 претворити у 255, а све вредности мање од 0 претворити у 0. То се једноставно може урадити за неку вредност x тако што се израчуна max(min(x, 255), 0).