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

Бројачке петље

Концентрични кругови

Напиши програм који црта концентричне кругове чији је центар у центру екрана, а полупречници су редом 10, 20, …, 100 пиксела. Сваки круг нацртати црвеном линијом дебљином 5 пиксела.

Центар прозора се једноставно израчунава тако да му је координата x на пола ширине, а координата y на пола висине прозора. Задатак се прилично једноставно решава када се примети да се полупречници кругова редом мењају од 10 до 100 са кораком 10 (10, 20, 30, …, 90, 100) и када се подсетимо да у Пајтону такво набрајање може остварити петљом:

Пошто десни крај није укључен у набрајање (узимају се вредности из полуотвореног интервала \([pocetak, kraj)\)), да би последњи полупречник био 100, за крај је потребно навести вредност 101.

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

Правоугаона мрежа

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

Основни задатак је одредити координате x вертикалних линија и координате y хоризонталних линија. Ширину једног правоугаоника можемо одредити дељењем ширине прозора бројем колона (у нашем случају то је 10), док висину једног правоугаоника можемо одредити дељењем висине прозора бројем врста (то је поново 10). Означимо те димензије са \(d_x\) и \(d_y\). Вертикалне линије се онда налазе на растојању \(d_x\), \(2 d_x\), \(3 d_x\), …, \(9 d_x\) пиксела од леве ивице прозора (то су им координате x). Пошто се те линије простиру од врха до дна прозора, координате y су им једнаке нули, односно висини прозора. Понављање цртања линија остварујемо, наравно, употребом петље for, при чему је најбоље да се бројач i креће од један до девет, јер се тада у кораку i црта линија од тачке (i*dx, 0) до тачке (i*dx, visina). Цртање хоризонталних линија остварујемо веома слично, у независној петљи for у којој се црта линија од тачке (0, i*dy) до тачке (sirina, i*dy).

Још један начин да се одреди координата наредне линије је да се координата претходне линије увећа за ширину тј. дужину правоугаоника.

Шпартање дијагоналама

Напиши програм који дијагонално шпарта прозор у правцу споредне дијагонале. Број линија изнад споредне дијагонале (укључујући и њу) је \(n=10\) (исто важи и за број линија испод споредне дијагонале).

Крајње тачке ових дужи деле сваку од ивица прозора на по \(n\) једнаких делова. Стога се растојање \(d_x\) између суседних тачака на горњој (и доњој) ивици прозора може израчунати дељењем ширине, а растојање \(d_y\) између суседних тачака на левој (и десној) ивици дељењем висине прозора бројем \(n\). Посматрајмо дужи које спајају леву и горњу ивицу прозора (последња таква је споредна дијагонала). Прва дуж спаја тачке са координатама \((d_x, 0)\) и \((0, d_y)\), друга дуж тачке са координатама \((2 d_x, 0)\) и \((0, 2 d_y)\) итд. Дакле, те дужи можемо нацртати тако што у петљи у којој бројачка променљива i мења вредности од 1 до n цртамо дужи које спајају тачке са координатама (i*dx, 0) и (0, i*dy). Слично, прва дуж испод дијагонале спаја тачке са координатама \((w, d_y)\) и \((d_x, h)\), друга тачке са координатама \((w, 2 d_y)\) и \((2 d_x, h)\) итд., где \(w\) означава ширину, а \(h\) висину екрана. Дакле, те дужи можемо нацртати тако што у петљи у којој бројачка променљива i мења вредности од 1 до n-1 цртамо дуж која спаја тачке са координатама (sirina, i*dy) и (i*dx, visina).

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

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

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

Шарање ротираним дужима

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

../_images/petlja1.png

Иако шара изгледа на први поглед прилично различито, овај програм је заправо прилично сличан претходном. Прва дуж спаја тачке се координатама \((0, d_y)\) и \((d_x, h)\), друга спаја тачке са координатама \((0, 2d_y)\) и \((2d_x, h)\), итд., све до дужи која спаја тачке \((0, (n-1)\cdot d_y)\) и \(((n-1)\cdot d_x, h)\), где је \(h\) висина прозора. Дакле, дужи можемо нацртати у петљи у којој се бројачка променљива i креће од 1 до n-1, у чијем телу цртамо дуж која спаја тачке са координатама (0, i*dy) и (i*dx, visina). Ако би се бројач у петљи мењао од 0 до n, тада би се цртале и прва вертикална и последња хоризонтална дуж (oне се не виде, јер се поклапају са ивицама прозора).

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

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

../_images/petlja2.png

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

Решење се може добити на следећи начин.

Крешендо

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

Кругови дуж дијагонале

Напиши програм који дуж целе главне дијагонале прозора распоређује \(n=10\) једнаких кругова.

Напиши програм који исцртава 10 вертикално постављених линија које су постављене тако да се све више и више шире када се иде с лева надесно. Размак између сваке две наредне је 10% већи него размак између претходне две линије.

Згуснуте линије