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

Цртање дужи

Централни модул у PyGame-у за цртање облика је py.draw. У зависности од тога који облик желимо да нацртамо, позивамо различите функције. Прво ћемо се позабавити цртањем дужи. Дуж \(AB\) се црта позивом функције pg.draw.line. Већ смо видели пример позива pg.draw.line(prozor, pg.Color("black"), (100, 100), (300, 300), 5). Дакле, врши се позив облика pg.draw.line(prozor, boja, teme1, teme2, debljina). Ова функција има пет параметара који се наводе у загради. Први параметар је прозор на коме желимо да нацртамо дуж (њега добијамо као резултат позива функције pg.display.set_mode). Други параметар је боја (о начинима задавања боја биће више речи у наставку). Наредни параметри су координате почетног темена дужи (на слици је то тачка \(А\)) и крајњег темена дужи (тачка \(B\)). Последњи параметар је дебљина линије којом се исцртава дуж, задата у пикселима.

../_images/duz.png

Провежбајмо сада цртање дужи кроз неколико задатака. Ови задаци ће ти помоћи да боље упознаш координатни систем који користимо за позиционирање тачака на прозору.

Плус

Напиши програм који исцртава симбол плус у центру прозора димензије 200x200 пиксела. Симбол се састоји од једне хоризонталне и једне вертикалне дужи дужине 100 пиксела и дебљине 10 пиксела.

Централни корак у решењу задатка је да два пута примениш функцију за цртање дужи и њеном применом исцрташ симбол плус. У решењу је већ нацртана вертикална дуж, а твој задатак је да нацрташ хоризонталну дуж дужине 100 пиксела, зато добро промисли где ћеш поставити почетне, односно крајње тачке дужи. Ширина и висина прозора су 200 пиксела. Анализирај позив функције pg.draw.line(prozor, pg.Color("black"), (100, 50), (100, 150), debljina) и мало га прилагоди. Видиш да је на месту аргумента за боју наведен позив функције pg.Color("black") који враћа унапред дефинисану црну боју. Координате темена вертикалне дужи су (100, 50) и (100, 150).

Приметимо да смо у претходном задатку увели променљиву debljina да бисмо дебљину обе линије могли да контролишемо само на једном месту. И у наредним програмима ћемо уводити помоћне променљиве које ће нам помоћи да лакше пишемо и прилагођавамо наше програме.

Потребно је да направиш позив pg.draw.line(prozor, pg.Color("black"), (50, 100), (150, 100), debljina).

Обојени плус

Прилагоди претходни програм тако да позадина буде жуте боје, хоризонтална линија црвене, а вертикална плаве.

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

Боје можемо навести помоћу имена.

Боје можемо навести помоћу и помоћу система RGB.

Плусеви различитих димензија

Прилагоди претходни програм тако да се дужина линија које сачињавају плус може мењати изменом само једне променљиве.

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

Прво, дужину сваке од линија које сачињавају плус чуваћемо у променљивој duzina. Центар плуса треба да буде у центру екрана тако да ћемо одредити координате центра екрана. Оне се могу одредити дељењем ширине и висине прозора са 2, нпр. (cx, cy) = (sirina / 2, visina / 2). Координата x левог темена хоризонталне дужи је за пола дужине мања од координате x центра прозора (cx - duzina/2), а координата x десног темена хоризонталне дужи је за пола дужине већа од ње (cx + duzina/2). Координата y оба темена хоризонталне дужи једнака је координати y центра екрана cy. Координате темена вертикалне дужи се одређују аналогно.

Допуни наредни програм на основу претходне дискусије, а затим мењај вредност променљиве duzina и посматрај како се мења величина нацртаног симбола.

Слово А

Напиши програм који помоћу три дужи исцртава слово A.

Циљ овог задатка је да успешно савладамо сналажење у координатном систему, који је као што смо већ видели, мало другачије позициониран. За цртање слова \(A\) потребно је исцртати три дужи (леву косу линију, десну косу линију и хоритонталну црту). Величина прозора је \(200 \times 200\) и о овоме би требало водити рачуна приликом одређивања координата тачака које представљају темена дужи. Спајањем одговарајућих тачака, формирају се дужи. У овом примеру можеш видети и променљиву debljina. Променљива је постављена (иницијализована) на почетку на 10 (наредбом доделе debljina = 10). Променом вредности ове променљиве мења се дебљина слова.

../_images/slovoA.png

На слици можеш видети координате тачака. Тачка \(A\) је \(50\) пиксела удаљена по оси \(x\), и \(150\) на ниже по оси \(y\), зато су координате тачке \(A\) \(= (50, 150)\). На исти начин ћеш одредити координате осталих тачака.

Слово М

Напиши програм који помоћу дужи исцртава слово M.

Примети да је у овом примеру, за разлику од претходног, уведено неколико променљивих и да су координате дужи описане преко неких од ових променљивих. Ово се односи на променљиве gore, dole, levo, desno, sredina_v и sredina_h. Ове променљиве су на самом почетку иницијализоване (постављене) на одређену вредност. Предност оваквог писања кода је у томе да ако буде потребе да се промени величина слова М можемо то постићи изменом вредности променљивих којима су координате описане (промена на једном месту). Прва усправна дуж која гради слово М задата је координатама (levo, gore) и (levo, dole). Права паралелна овој дужи описана је координатама (desno, gore) и (desno, dole), а унутрашње дужи са (desno, gore) и (desno, dole).

Слово W

Напиши програм који исцртава енглеско слово W.

Цртање слова W можемо реализовати преко пет карактеристичних тачака које су означене са \(A_{levo}\), \(A_{desno}\), \(B_{levo}\), \(B_{desno}\) и \(C\). Овим словима се дефинишу координате преко променљивих sredina и dim. Променљива sredina представља средину ширине екрана, а променљива dim представља димензију слова. Слово W настаје када се одговарајуће овако описане тачке споје дужима.

../_images/w.png

Једнакостранични троугао

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

Троугао ћемо поставити тако да му тежиште буде у центру прозора. Тачка \(S\) чије су координате \((s, s)\) налази се у самом центру прозора ако је \(s\) једнако половини ширине тј. висине прозора (променљива sredina у коду која одговара координати \(s\) ће чувати вредност половине висине тј. ширине прозора које су обе једнаке 200 пиксела). Висина троугла ће пролазити кроз тачку \(S\), паралелно ветикалним ивицама прозора (како је приказано на слици). Троугао ће бити постављен тако да му се у тачки \(S\) налазе све значајне тачке, што нам може помоћи приликом одређивања координата свих темена.

../_images/jednakostranicanTrougao.png

За израчунавање координата темена једнакостраничног троугла потребно је познавати дужину странице и висине троугла. Означимо ове величине са \(a\) и \(h\). Дужину странице троугла \(a\) сами бирамо гледајући да се троугао уклопи у димензије прозора које су \(200 \times 200\) и поставићемо је на \(a=100\). Дужину висине \(h\) можемо одредити преко дужине странице \(a\), као \(h = a\frac{\sqrt{3}}{2}\) (ова формула се лако изводи применом Питагорине теореме на правоугли троугао чија је једна катета висина једнакостраничног троугла, друга половина странице, а хипотенуза је страница једнакостраничног троугла).

Пошто, како из математике знамо, тежиште троугла дели тежишну дуж (у овом случају то је уједно и висина) у односу \(2:1\), координате темена \(A\) и \(B\) су у односу на ову тачку померене (транслиране) на доле за \(\frac{1}{3}h\), док је тачка \(C\) померена на горе за \(\frac{2}{3}h\).

Координате x ових тачака одређујемо у односу на тачку \(S\), односно дужину странице \(a\). Тачка \(А\) је померена од средишта за \(\frac{а}{2}\) ка левој ивици прозора. Тачка \(В\) је померена од средишта за \(\frac{а}{2}\) средину ка десној ивици. Горња тачка \(C\) се налази на средини.

Дакле, тачка \(A\) има координате \((s-\frac{a}{2}, s+\frac{h}{3})\), тачка \(B\) има координате \((s+\frac{a}{2}, s+\frac{h}{3})\), док тачка \(C\) има координате \((s, s-\frac{2h}{3})\).

На основу претходне дискусије допуни наредни програм.