Цртање правоугаоника, елипси и кругова¶
Све функције за цртање у библиотеци ПајГејм почињу са pg.draw
. У зависности од тога који облик желимо да нацртамо, позивамо различите функције. У објашњењима која следе, значење параметара је:
Параметар prozor je прозор на коме цртамо. У овом приручнику програми ће већ имати формирану променљиву (тачније објекат) prozor, добијен као резултат позива функције
pg.display.set_mode
.Параметар boja је боја којом цртамо. Као што је раније речено, боја се може задати именом (на пример
pg.Color("black")
за црну) или као торка или листа дужине 3 (на пример[255, 0, 0]
за црвену).Параметар pravougaonik је торка или листа дужине четири \((x, y, w, h)\) или \([x, y, w, h]\) која описује правоугаоник, као што је раније објашњено (координате горњег левог темена, ширина и висина правоугаоника).
Параметар centar представља неку тачку. Као што смо раније поменули, тачка може да се зада као торка (или листа) дужине 2, која представља координате тачке у прозору у коме цртамо.
Параметар debljina је дебљина линије којом цртамо. У функцијама које овде објашњавамо, овај параметар није обавезан и могуће га је изоставити.
Сада ћемо видети детаљније описе функција за цртање правоугаоника, елипси и кругова. После сваког описа функције дат је сасвим кратак пример од једне или две линије кода. Сваки од тих примера можете да извршите копирањем у програм испод (који за сад не црта ништа). Слике које прате дате примере су тако и добијене.
Цртање правоугаоника¶
За цртање правоугаоника се користи функција pg.draw.rect
, која има два облика:
pg.draw.rect(prozor, boja, pravougaonik, debljina)
pg.draw.rect(prozor, boja, pravougaonik)
Облик без праметра debljina користимо када желимо да правоугаоник буде цео обојен наведеном бојом.
На пример, првом од следеће две наредбе задајемо:
црта се правоугаоник (фуннкција је rect)
црном бојом (параметар (0, 0, 0) значи црну боју)
Горње лево теме правоугаоника је (40, 80)
ширина правоугаоника је 50 а висина 30 пиксела.
црта се само оквир правоугаоника линијом дебљине 3 пиксела
Значење друге наредбе је:
црта се правоугаоник (фуннкција је rect)
црном бојом (параметар pg.Color(„black”) такође значи црну боју)
Горње лево теме правоугаоника је (140, 80)
ширина и висина правоугаоника су по 20 пиксела, па пошто су једнаке добијамо квадрат
Цео квадрат ће бити попуњен бојом, јер нема параметра за дебљину линије

Цртање елипсе¶
За цртање елипсе се користи функција pg.draw.ellipse
, са или без праметра који представља дебљину:
pg.draw.ellipse(prozor, boja, pravougaonik, debljina)
pg.draw.ellipse(prozor, boja, pravougaonik)
Параметар pravougaonik представља правоугаоник у који је елипса уписана, а остали параметри имају исто значење као и раније. Ако нам је потребно, центар и полуосе елипсе можемо да израчунамо на основу торке \((x, y, w, h)\) или листе \([x, y, w, h]\) која задаје правоугаоник. Координате центра правоугаоника, а уједно и центра елипсе су \((x + w/2, y + h/2)\), а полуосе елипсе су \(w/2\) и \(h/2\). Тако на пример, наредба
црта жуту попуњену елипсу. Центар елипсе је центар наведеног правоугаоника, а то је тачка (130, 180). Хоризонтална полуоса елипсе је дужине 30, а вертикална дужине 20.

Цртање круга¶
За цртање круга се користи функција pg.draw.circle
, са или без праметра који представља дебљину:
pg.draw.circle(prozor, boja, centar, poluprecnik, debljina)
pg.draw.circle(prozor, boja, centar, poluprecnik)
Параметар centar је тачка која представља центар круга, а параметар poluprecnik је број који представља полупречник круга у пикселима. На пример, следећа наредба црта кружну линију црвене боје, дебљине 3 пиксела, полупречника 50 пиксела, са центром у тачки (100, 100):

Да је последњи параметар (дебљина линије једнака 3 пиксела) био изостављен, круг би цео био обојен црвеном бојом.
Цртање правоугаоника, елипси и кругова - питања¶
Проверите колико сте разумели и запамтили о овим функцијама за цртање:
- Координате горњег левог темена
- Координате горњег левог темена се задају код елипсе и правоугаоника
- Полупречник
- Тачно
- Координате центра
- Тачно
- Ширина и висина
- Ширина и висина се задају код елипсе и правоугаоника
- Боја
- Тачно
Q-43: Шта се задаје приликом цртања круга?
- pg.draw.circle(prozor, boja, 100, 100, 30, 5)
- Покушајте поново
- pg.draw.circle(prozor, boja, (100, 100), 30, 5)
- Тачно
- pg.draw.circle(prozor, boja, (100, 100, 30, 5))
- Покушајте поново
- pg.draw.circle(prozor, boja, (100, 100), (30, 5))
- Покушајте поново
Q-44: Да би се нацртао круг са центром у тачки \((100, 100)\), полупречника \(30\) пиксела, дебљине \(5\) пиксела, потребно је извршити позив функције:
- у другом случају црта елипса чије су полуосе r и 1.
- Покушајте поново
- у другом случају круг попуњава бојом.
- Покушајте поново
- у првом случају црта круг, а у другом само кружна линија - кружница.
- Тачно
- у првом случају црта само кружница, а у другом круг.
- Покушајте поново
Q-45: Разлика између pg.draw.circle(prozor, boja, (cx, cy), r) и pg.draw.circle(prozor, boja, (cx, cy), r, 1) је то што се:
- Координате горњег левог темена
- Покушајте поново
- Дебљина
- Покушајте поново
- Ширина
- Покушајте поново
- Висина
- Покушајте поново
- Координате центра
- Тачно
Q-46: Шта се НЕ задаје приликом цртања правоугаоника?
- pg.draw.rect(prozor, boja, 100, 100, 30, 50)
- Покушајте поново
- pg.draw.rect(prozor, boja, (100, 100), (30, 50))
- Покушајте поново
- pg.draw.rect(prozor, boja, (100, 100), 30, 50)
- Покушајте поново
- pg.draw.rect(prozor, boja, (100, 100, 30, 50))
- Тачно
Q-47: Да би се нацртао правоугаоник чије је горње лево теме у тачки \((100, 100)\), чија је ширина \(30\), а висина \(50\) пиксела, потребно је извршити позив функције:
- pg.draw.rect(prozor, boja, (80, 80, 50, 80))
- Тачно
- pg.draw.rect(prozor, boja, (80, 80), (130, 160))
- Покушајте поново
- pg.draw.rect(prozor, boja, (80, 80, 130, 160))
- Покушајте поново
- pg.draw.rect(prozor, boja, (80, 80), (50, 80))
- Покушајте поново
Q-48: Да би се нацртао правоугаоник чије је горње лево теме у тачки \((80, 80)\), а доње десно теме у тачки \((130, 160)\), потребно је извршити позив функције:
Цртежи по упутствима¶
У следећим задацима можете да видите шта треба да нацрта ваш програм тако што кликнете на дугме „Прикажи пример”. Да бисте могли да напишете потребне наредбе, дата су и детаљна упутства са описом параметара.
Обратите пажњу на то да пре цртања треба да обојите позадину одговарајућом бојом, што се постиже наредбом prozor.fill(pg.Color(...))
(на месту тачкица треба задати боју).
Мета: на белој позадини нацртајте мету помоћу три концентрична круга. Центри сва три круга треба да буду у центру прозора и сваки круг треба да је попуњен бојом. Прво треба нацртати црвени круг полупречника 100, затим плави полупречника 75 и на крају зелени круг полупречника 50 пиксела.
Шта мислите, да ли би ови кругови могли да да буду нацртани и другачијим редоследом? Ако нисте сигурни шта би се догодило при промени редоследа, испробајте.
Паче: на зеленој позадини нацртати паче као лик из цртаних филмова. Цртеж се састоји од следећих делова:
Глава: жута попуњена елипса, уписана у правоугаоник величине 320 х 300 пиксела, коме је горње лево теме у тачки (40, 50)
Ивица главе: црна елипса која уоквирује претходну елипсу линијом дебљине 1
Лево око: црна попуњена елипса, уписана у правоугаоник величине 40 х 40 пиксела, коме је горње лево теме у тачки (130, 130)
Десно око: црна попуњена елипса, уписана у правоугаоник величине 40 х 40 пиксела, коме је горње лево теме у тачки (280, 120)
Уста (кљун): црвена попуњена елипса, уписана у правоугаоник величине 120 х 140 пиксела, коме је горње лево теме у тачки (200, 170)
Ивица уста: црна елипса која уоквирује претходну елипсу линијом дебљине 1
Овде имамо више слободе у редоследу цртања, али неки редослед и даље треба поштовати. Покушајте да објасните који делови слике морају да буду нацртани баш у овом редоследу, а који не морају.
Приметите да су очи уписане у правоугаонике који су уствари квадрати. Како (захваљујући томе) другачије можемо да нацртамо исте овакве очи?