Рисуване на правоъгълници, елипси и кръгове

Всички функции за рисуване в библиотеката на PyGame започват с pg.draw. В зависимост от това каква форма искаме да нарисуваме, наричаме различни функции. В следващите обяснения значението на параметрите е:

Сега ще видим по-подробни описания на функциите за рисуване на правоъгълници, елипси и кръгове. След всяко описание на функцията е даден кратък пример за един или два реда код. Можете да стартирате всеки от тези примери, като го копирате в програмата по-долу (която засега не рисува нищо). Снимките, които следват примерите, се получават по същия начин.

Рисуване на правоъгълник

За да нарисуваме правоъгълник използваме функцията pg.draw.rect, има две форми:

pg.draw.rect(canvas, color, rectangle, thickness)
pg.draw.rect(canvas, color, rectangle)

Използваме формата без параметъра thickness когато искаме и вътрешността на правоъгълника да бъде запълнена с посочения цвят.

Например, първото от следните две твърдения означава:

  • нарисувайте правоъгълник (функция 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(canvas, color, rectangle, thickness)
pg.draw.ellipse(canvas, color, rectangle)

Параметърът * правоъгълник * представлява правоъгълника, в който е вписана елипсата, а останалите параметри имат същото значение като преди. Ако имаме нужда от него, можем да изчислим центъра и главните и второстепенни оси на елипсата, използвайки комплекта \((x, y, w, h)\) или списъка \([x, y, w, h]\) , който дефинира правоъгълника. Координатите на центъра на правоъгълника, който е и центърът на елипса, са \((x + w/2, y + h/2)\), а главните и второстепенните оси на елипсата са \(w/2\) and \(h/2\). Така например

рисува жълто изпълнена елипса. Центърът на елипсата е центърът на посочения правоъгълник, който е в точка (130, 180). Хоризонталната полуоса на елипсата е дълга 30 пиксела, а вертикалната 20.

../_images/drawing_ellipse.png

Рисуване на кръг

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

pg.draw.circle(canvas, color, center, radius, thickness)
pg.draw.circle(canvas, color, center, radius)

Параметърът center е точка, представляваща центъра на окръжността, а параметърът radius е число, представляващо радиуса на окръжността в пиксели. Например следното изявление очертава червен кръг с дебелина 3 пиксела с радиус 50 пиксела, чийто център е в точка (100, 100):

../_images/drawing_circle.png

Ако последният параметър (ширина на хода 3) беше пропуснат, вътрешността на кръга също щеше да бъде червена.

Рисуване на правоъгълници, елипси и кръгове - въпроси

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

    Q-43: Какво трябва да се уточни, когато рисувате кръг?

  • Горни леви координати на върха
  • Горните леви координати на върха се посочват при рисуване на елипса или правоъгълник
  • Радиус
  • Правилно
  • Координати на центъра
  • Правилно
  • Ширина и височина
  • Ширината и височината са посочени, когато рисувате елипса или правоъгълник
  • Цвят
  • Правилно

    Q-44: За да нарисувате кръг с център \((100, 100)\), чийто радиус е \(30\) пиксела, използвайки линия \(5\) пиксела широка, ще използваме?

  • pg.draw.circle(canvas, color, 100, 100, 30, 5)
  • Опитай пак
  • pg.draw.circle(canvas, color, (100, 100), 30, 5)
  • Правилно
  • pg.draw.circle(canvas, color, (100, 100, 30, 5))
  • Опитай пак
  • pg.draw.circle(canvas, color, (100, 100), (30, 5))
  • Опитай пак

    Q-45: Разликата между pg.draw.circle(canvas, color, (cx, cy), r) и pg.draw.circle(canvas, color, (cx, cy), r, 1) е:

  • последното рисува елипса, чиито полу-големи и полу-малки оси са равни r и 1..
  • Опитай пак
  • последното запълва вътрешността на кръга с цвят.
  • Опитай пак
  • първият рисува диск (запълнен кръг), а вторият кръгова линия.
  • Правилно
  • първата рисува кръгова линия, а втората диск
  • Опитай пак

    Q-46: Какво НЕ е посочено, когато рисувате правоъгълник?

  • Горни леви координати на върха
  • Опитай пак
  • Ширина на четката
  • Опитай пак
  • Ширина
  • Опитай пак
  • Височина
  • Опитай пак
  • Координати на центъра
  • Correct

    Q-47: За да нарисувате правоъгълник, чийто горен ляв връх е в точка :math: (100, 100), \(30\) пиксела широчина и \(50\) пиксели височина, коя функция трябва да се извърши?

  • pg.draw.rect(canvas, color, 100, 100, 30, 50)
  • Опитай пак
  • pg.draw.rect(canvas, color, (100, 100), (30, 50))
  • Опитай пак
  • pg.draw.rect(canvas, color, (100, 100), 30, 50)
  • Опитай пак
  • pg.draw.rect(canvas, color, (100, 100, 30, 50))
  • Correct

    Q-48: За да нарисувате правоъгълник, чийто горен ляв връх е в точка \((80, 80)\), и долен десен връх в точка \((130, 160)\), коя функция трябва да се извърши:

  • pg.draw.rect(canvas, color, (80, 80, 50, 80))
  • Correct
  • pg.draw.rect(canvas, color, (80, 80), (130, 160))
  • Опитай пак
  • pg.draw.rect(canvas, color, (80, 80, 130, 160))
  • Опитай пак
  • pg.draw.rect(canvas, color, (80, 80), (50, 80))
  • Опитай пак

Рисуване по инструкции

В следващите задачи можете да видите какво трябва да нарисува вашата програма, като кликнете върху бутона „Play task“. За да ви предоставим необходима информация за написване на необходимите изявления, са дадени и подробни инструкции с описания на параметрите.

Имайте предвид, че преди да нарисувате, трябва да боядисате фона с подходящия цвят, за който използвате canvas.fill (pg.Color (...)) (вместо точките посочвайте цвят).

Задача - цел:

Начертайте мишена на бял фон, като използвате три запълнени кръга. Центровете и на трите кръга трябва да са в центъра на прозореца, а всички кръгове да бъдат изпълнени с цвят. Първо начертайте червен кръг с радиус 100, след това син със радиус 75, а след това зелен кръг с радиус 50 пиксела.

Какво мислите, може ли тези кръгове да бъдат очертани в различен ред? Ако не сте сигурни какво би се случило, опитайте.

Задача - патенце:

На зелен фон нарисувайте патенце като анимационен герой. Чертежът се състои от следните части:

  • Глава: жълто запълнена елипса, вписана в правоъгълник с размери 320 x 300 пиксела, с горната лява върха в точка (40, 50)

  • Граница на главата: черна елипса, рамкираща предишната елипса с линия с ширина 1

  • Ляво око: черна запълнена елипса, вписана в правоъгълник с размери 40 x 40 пиксела с горния ляв връх в точка (130, 130)

  • дясно око: черна запълнена елипса, вписана в правоъгълник с размери 40 x 40 пиксела, с горната лява върха в точка (280, 120)

  • Уста (клюн): червена запълнена елипса, вписана в правоъгълник с размери 120 x 140 пиксела, с горната лява върха в точка (200, 170)

  • Граница на устата: черна елипса, рамкираща предишната елипса с линия с ширина 1

Тук имаме повече свобода с реда на рисуване, но все пак трябва да следваме някакъв ред. Опитайте се да обясните кои части от изображението трябва да бъдат нарисувани точно в този ред и кои не.

Обърнете внимание, че очите са вписани в правоъгълници, които всъщност са квадратчета. Как (благодарение на това) можем да нарисуваме едни и същи очи по различен начин?