Рисуване на правоъгълници, елипси и кръгове¶
Всички функции за рисуване в библиотеката на PyGame започват с pg.draw
. В зависимост от това каква форма искаме да нарисуваме, наричаме различни функции. В следващите обяснения значението на параметрите е:
Параметърът canvas е областта, в която рисуваме. В това ръководство програмите вече ще имат оформена променлива (по-конкретно обект) canvas, получена в резултат на извикване на функцията
pygamebg.open_window
.Параметърът color е цветът, който използваме за рисуване. Както беше казано по-рано, един цвят може да бъде определен от неговото име (например
pg.Color ("black")
) или като комплект или списък от 3 елемента (например[ 255, 0, 0]
за червено).Параметърът rectangle е комплект или списък от четири елемента: math: (x, y, w, h) или \([x, y, w, h]\), който описва правоъгълник, както беше обяснено по-рано (координати на горния ляв връх, ширината и височината на правоъгълника).
Параметърът center представлява точка. Както бе споменато по-рано, една точка може да бъде определена като комплект (или списък) от 2 елемента, които представляват координатите на точката в прозореца, в който рисуваме.
Параметърът thickness е дебелината на линиите, които използваме за рисуване. Във функциите, които обясняваме тук, този параметър е незадължителен и може да бъде пропуснат.
Сега ще видим по-подробни описания на функциите за рисуване на правоъгълници, елипси и кръгове. След всяко описание на функцията е даден кратък пример за един или два реда код. Можете да стартирате всеки от тези примери, като го копирате в програмата по-долу (която засега не рисува нищо). Снимките, които следват примерите, се получават по същия начин.
Рисуване на правоъгълник¶
За да нарисуваме правоъгълник използваме функцията 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 пиксела както широк, така и висок, така че всъщност ще бъде квадрат
Квадратът ще бъде запълнен с цвят, тъй като няма параметър за дебелина

Рисуване на елипса¶
За да нарисуваме елипса, използваме функцията 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.

Рисуване на кръг¶
За да нарисуваме кръг използваме функцията pg.draw.circle
, със или без параметъра за дебелина:
pg.draw.circle(canvas, color, center, radius, thickness)
pg.draw.circle(canvas, color, center, radius)
Параметърът center е точка, представляваща центъра на окръжността, а параметърът radius е число, представляващо радиуса на окръжността в пиксели. Например следното изявление очертава червен кръг с дебелина 3 пиксела с радиус 50 пиксела, чийто център е в точка (100, 100):

Ако последният параметър (ширина на хода 3) беше пропуснат, вътрешността на кръга също щеше да бъде червена.
Рисуване на правоъгълници, елипси и кръгове - въпроси¶
Проверете колко разбирате и помните за тези функции на рисуване:
- Горни леви координати на върха
- Горните леви координати на върха се посочват при рисуване на елипса или правоъгълник
- Радиус
- Правилно
- Координати на центъра
- Правилно
- Ширина и височина
- Ширината и височината са посочени, когато рисувате елипса или правоъгълник
- Цвят
- Правилно
Q-43: Какво трябва да се уточни, когато рисувате кръг?
- 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-44: За да нарисувате кръг с център \((100, 100)\), чийто радиус е \(30\) пиксела, използвайки линия \(5\) пиксела широка, ще използваме?
- последното рисува елипса, чиито полу-големи и полу-малки оси са равни r и 1..
- Опитай пак
- последното запълва вътрешността на кръга с цвят.
- Опитай пак
- първият рисува диск (запълнен кръг), а вторият кръгова линия.
- Правилно
- първата рисува кръгова линия, а втората диск
- Опитай пак
Q-45: Разликата между pg.draw.circle(canvas, color, (cx, cy), r) и pg.draw.circle(canvas, color, (cx, cy), r, 1) е:
- Горни леви координати на върха
- Опитай пак
- Ширина на четката
- Опитай пак
- Ширина
- Опитай пак
- Височина
- Опитай пак
- Координати на центъра
- Correct
Q-46: Какво НЕ е посочено, когато рисувате правоъгълник?
- 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-47: За да нарисувате правоъгълник, чийто горен ляв връх е в точка :math: (100, 100), \(30\) пиксела широчина и \(50\) пиксели височина, коя функция трябва да се извърши?
- 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))
- Опитай пак
Q-48: За да нарисувате правоъгълник, чийто горен ляв връх е в точка \((80, 80)\), и долен десен връх в точка \((130, 160)\), коя функция трябва да се извърши:
Рисуване по инструкции¶
В следващите задачи можете да видите какво трябва да нарисува вашата програма, като кликнете върху бутона „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
Тук имаме повече свобода с реда на рисуване, но все пак трябва да следваме някакъв ред. Опитайте се да обясните кои части от изображението трябва да бъдат нарисувани точно в този ред и кои не.
Обърнете внимание, че очите са вписани в правоъгълници, които всъщност са квадратчета. Как (благодарение на това) можем да нарисуваме едни и същи очи по различен начин?