Цртање правоугаоника, елипси и кругова

Све функције за цртање у библиотеци ПајГејм почињу са pg.draw. У зависности од тога који облик желимо да нацртамо, позивамо различите функције. У објашњењима која следе, значење параметара је:

Сада ћемо видети детаљније описе функција за цртање правоугаоника, елипси и кругова. После сваког описа функције дат је сасвим кратак пример од једне или две линије кода. Сваки од тих примера можете да извршите копирањем у програм испод (који за сад не црта ништа). Слике које прате дате примере су тако и добијене.

Цртање правоугаоника

За цртање правоугаоника се користи функција 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 пиксела, па пошто су једнаке добијамо квадрат

  • Цео квадрат ће бити попуњен бојом, јер нема параметра за дебљину линије

../_images/drawing_rectangles.png

Цртање елипсе

За цртање елипсе се користи функција 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.

../_images/drawing_ellipse.png

Цртање круга

За цртање круга се користи функција pg.draw.circle, са или без праметра који представља дебљину:

pg.draw.circle(prozor, boja, centar, poluprecnik, debljina)
pg.draw.circle(prozor, boja, centar, poluprecnik)

Параметар centar је тачка која представља центар круга, а параметар poluprecnik је број који представља полупречник круга у пикселима. На пример, следећа наредба црта кружну линију црвене боје, дебљине 3 пиксела, полупречника 50 пиксела, са центром у тачки (100, 100):

../_images/drawing_circle.png

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

Цртање правоугаоника, елипси и кругова - питања

Проверите колико сте разумели и запамтили о овим функцијама за цртање:

    Q-43: Шта се задаје приликом цртања круга?

  • Координате горњег левог темена
  • Координате горњег левог темена се задају код елипсе и правоугаоника
  • Полупречник
  • Тачно
  • Координате центра
  • Тачно
  • Ширина и висина
  • Ширина и висина се задају код елипсе и правоугаоника
  • Боја
  • Тачно

    Q-44: Да би се нацртао круг са центром у тачки \((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))
  • Покушајте поново
  • pg.draw.circle(prozor, boja, (100, 100), (30, 5))
  • Покушајте поново

    Q-45: Разлика између pg.draw.circle(prozor, boja, (cx, cy), r) и pg.draw.circle(prozor, boja, (cx, cy), r, 1) је то што се:

  • у другом случају црта елипса чије су полуосе r и 1.
  • Покушајте поново
  • у другом случају круг попуњава бојом.
  • Покушајте поново
  • у првом случају црта круг, а у другом само кружна линија - кружница.
  • Тачно
  • у првом случају црта само кружница, а у другом круг.
  • Покушајте поново

    Q-46: Шта се НЕ задаје приликом цртања правоугаоника?

  • Координате горњег левог темена
  • Покушајте поново
  • Дебљина
  • Покушајте поново
  • Ширина
  • Покушајте поново
  • Висина
  • Покушајте поново
  • Координате центра
  • Тачно

    Q-47: Да би се нацртао правоугаоник чије је горње лево теме у тачки \((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)
  • Покушајте поново
  • pg.draw.rect(prozor, boja, (100, 100, 30, 50))
  • Тачно

    Q-48: Да би се нацртао правоугаоник чије је горње лево теме у тачки \((80, 80)\), а доње десно теме у тачки \((130, 160)\), потребно је извршити позив функције:

  • 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))
  • Покушајте поново

Цртежи по упутствима

У следећим задацима можете да видите шта треба да нацрта ваш програм тако што кликнете на дугме „Прикажи пример”. Да бисте могли да напишете потребне наредбе, дата су и детаљна упутства са описом параметара.

Обратите пажњу на то да пре цртања треба да обојите позадину одговарајућом бојом, што се постиже наредбом 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

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

Приметите да су очи уписане у правоугаонике који су уствари квадрати. Како (захваљујући томе) другачије можемо да нацртамо исте овакве очи?