Помалюймо ще?
Завдання минулого уроку було зовсім нескладним. Для його виконання потрібно було лише намалювати два прямокутника: перший з синім контуром і синьою заливкою (color('blue','blue')), а під ним другий - такого ж розміру тільки з жовтим контуром і жовтою заливкою (color('yellow','yellow')).
Можемо дещо вдосконалити наш малюнок, додавши до нього відповідний темі напис.
from turtle import *
title('Glory to Ukraine')
reset()
hideturtle() #приховаємо черепашку, вона тут недоречна
width(3)
up()
goto(-150,0) #переміщуємо черепашку в точку початку малювання
down()
color('blue','blue')
lt(90)
begin_fill() #малюємо верхній прямокутник
for i in range(2):
fd(100)
rt(90)
fd(300)
rt(90)
end_fill()
up()
goto(0,20) #переміщуємось в точку, яка є серединою майбутнього напису
down()
color('yellow', 'yellow')
write('Слава', align='center', font=('Arial', 40, 'italic bold')) #створення напису
up()
goto(-150,0) #перехід до точки початку другого прямокутника
down()
rt(90)
begin_fill() #малюємо другий прямокутник
for i in range(2):
fd(300)
rt(90)
fd(100)
rt(90)
end_fill()
up()
goto(0,-80) #переміщення до точки, яка є серединою другого напису
color('blue','blue')
write('Україні!', align='center', font=('Arial', 40, 'italic bold')) #створення напису
done()
Що ж! Продовжуємо малювати.
Створимо якісь складніші зображення. Наприклад, якийсь візерунок.
Для початку, візьмемо за основу готовий скрипт у Scratch. Розгляньте скрипт і розберіть усі його компоненти.
А тепер просто перекодуємо блоки Scratch командами мови Python, використавши ті ж параметри:
from turtle import *
reset()
width(3)
color('purple')
speed(0)
for i in range(24): #зовнішній цикл, задає кількість кіл
for j in range(120): #внутрішній цикл малює одне коло
fd(4)
rt(3)
rt(15)
done()
Поекспериментуйте з параметрами циклів щоб отримати інші результати.
Створення таких візерунків містить одну проблему: доводиться досить довго підбирати кількість повторень циклу. Однак, насправді, ця проблема вирішується дуже просто: для цього потрібно лише знати, на який кут здійснюється поворот для наступної ітерації циклу. Тоді, щоб обчислити кількість ітерацій, потрібно просто розділити 360° на цей кут. Наприклад, якщо планується поворот на 12°, тоді потрібно зробити 360°:12°=30 повторень циклу.
Завдання 36
Створіть візерунок з шестикутників
Розв'язання:
Щоб зобразити шестикутник, потрібно повертатись на 60°, для малювання одного шестикутника треба здійснити 6 ітерацій внутрішнього циклу. Далі усе залежить від того, на який кут плануємо повернутися для малювання наступного шестикутника. Якщо цей кут, наприклад, 20°, тоді зовнішній цикл потрібно повторити 360°:20°=18 разів:
from turtle import *
reset()
width(3)
color('blue')
speed(0)
for i in range(18):
for j in range(6):
fd(100)
rt(60)
rt(20)
done()
Перевірте, що вийшло, 👉 ТУТ 👈
Продовжимо тему з колами. Намалюємо емблему Олімпійських ігор - відомі п'ять кілець. Щоправда, добитися часткового перекриття кільцями одне одного буде досить проблематично, тому просто намалюємо олімпійські кільця у тому порядку і в тих кольорах, в яких вони зображені в оригіналі, без перекриття.
На цей раз нам не потрібно повертати кола на якийсь кут, тому не будемо використовувати для створення кола цикли, а застосуємо готовий метод circle().
from turtle import *
title('Олімпійські кільця')
up()
goto(-120,0)
down()
setup(500,500) #встановлення розмірів полотна
width(15) #ширина пера
color('blue')
circle(55) #додатний радіус - за годинниковою стрілкою
up()
goto(0,0)
down()
color('black')
circle(55)
up()
goto(120,0)
down()
color('red')
circle(55)
up()
goto(-60,40)
down()
color('yellow')
circle(-55) #від'ємний радіус - проти годинникової стрілки
up()
goto(60,40)
down()
color('green')
circle(-55)
done()
Власне, зовсім не складно: визначаємо координати центрів кіл, переміщуємо туди "Черепашку" і малюємо там коло потрібного кольору:
ДОМАШНЄ ЗАВДАННЯ
Ну що! А слабО тепер запрограмувати такий малюнок? 😉
Підказки
Як бачимо, малюнок складається з квадратів, трикутника і круга. Як намалювати один квадрат знаємо? Знаємо! От тільки з якого з двох квадратів починати треба, щоб процес зафарбовування одного не зафарбував інший? Якщо не здогадались - поекспериментуйте! Що стосується рами вікна - то це зовсім просто: опускаємо "олівець" (pd()) малюємо відрізки за допомогою goto().
Для зображення "даху" - малюємо трикутник, з'єднуючи послідовно точки за допомогою того ж таки goto(), а от щоб зафарбувати його - це усе слід "загорнути" у begin_fill()...end_fill().
Те ж стосується й "сонечка". Якщо так само "загорнути" circle(...) у begin_fill()...end_fill(), то наше коло буде зафарбоване і перетвориться на круг.
Ну і щоб зафарбувати тло полотна - теж є своя команда bgcolor(). Про цю команду написано 👉 тут 👈 (див. у розділі "Команди налаштування кольору").
Все! Успіху!