Черепашкова графіка

 В Python обробка зображень відбувається за допомогою вбудованого модуля графіки. Функції для малювання зберігаються в бібліотеці модулів під іменем turtle, в перекладі з англійської - черепашка. Для того, щоб використовувати черепашкову графіку спочатку потрібно імпортувати модуль черепашки командою:

from turtle import*

* вводити обов'язково. from - із, import - імпортувати.

shape('turtle')

Ця команда замість звичайної стрілки курсору покаже нам Черепашку у вікні виконання проекту:

Черепашка в Python
Ця команда може містити в лапках інше слово, тоді вигляд черепашки буде іншим:

Зміна вигляду Черепашки



shape перекладається як форма.

На полотні у вікні Python Turtle Graphics Черепашка виконує команди із створення графіки. Ці команди схожі на команди олівця в Scratch.

Команди руху черепашки:

forward(10) або fd(10) - переміститись на 10 кроків (forward - уперед)

right(15) - повернутись праворуч за годинниковою стрілкою на 15 градусів

left(15) - повернутись ліворуч на 15 градусів проти годинникової стрілки

reset() - очистити і переміститись в центр

clearscreen() - очистити вікно

down() - опустити олівець, по замовчуванню він опущений

up() - підняти олівець

color('blue') - встановити колір олівця, таким кольором буде і черепашка.

Переміщення черепашки на 100 кроків уперед

fillcolor('pink') - встановити колір заливки фігури

begin_fill() - це початок заливки фігури

end_fill() - це кінець заливки фігури

(зразок використання коду з заливкою фігури є в прикладі малювання зірки)

width(4) - товщина лінії олівця 4 пікселі (за замовчуванням 1 піксель)

for i in range(10): - повторити 10 разів

Розглянемо приклади побудови трикутника, квадрата, кола:

Малювання трикутника в Пайтон



Малювання квадрата








Малювання кола





Приклад коду побудови зірки:

from turtle import* shape('turtle') color('blue') for i in range(5): forward(100) right(144)

Приклад коду побудови шестикутника:

from turtle import* shape('turtle') color('blue') for i in range(6): forward(100) right(60)

Приклад коду побудови дванадцятикутної спіралі з використанням двох циклів. Якщо змінюватимемо кут right(30), отримаємо зовсім інші малюнки.

Дванадцятикутна спіраль Python

Приклад коду малювання зірки, заповненої кольором:

Змінюючи кут left(170), отримаємо інше зображення.

Приклад коду малювання повороту кола.

Обертання кола Пайтон
from turtle import * speed(0) pensize(5) for x in range(20): if x < 5: color('yellow') elif x < 10: color('blue') elif x < 15: color('pink') else: color('lime') circle(120) left(18)

Система координат в Python

Початок координат - це середина вікна Python Turtle Graphics (координата (0, 0)). Довжини полотна 680, висота 560 кроків.

Координата x змінюється від -340 до 340.

Координата y змінюється від -280 до 280.

Якщо збільшувати вікно, то будуть збільшені кількість кроків Черепашки.

setup(x, y) - задати розміри полотна

Команди переміщення Черепашки по полотні:

goto(x, y) - переміщує в точку з заданими координатами.

home() - переміщує в точку (0, 0), якщо Черепашка зникла з екрану, її можна повернути цією командою.

pos() - переміщує на вихідну позицію (0, 0).

set(x) - змінює координату по x, а y залишається без змін

set(y) - змінює координату по y, а x залишається без змін

xcor() - визначає координату по x

ycor() - визначає координату по y

write('текст') - виводить текст на полотні, в точці розміщення черепашки.

write(text, align, font)

align - розташування тексту left, right, center

font - параметри шрифту.

speed(1) speed(0) - швидкість Черепашки.

Найшвидша - 0, швидко - 10, нормальна - 6, повільна - 3, найповільніша - 1.

onscreenclick(goto) - переміщення Черепашки у вибрану вказівником точку на полотні

circle(r) - малювання кола радіусом r

circle(r, n) -малювання дуги радіусом r і кутом n.

from random import*

Виклик модуля випадкових чисел

x = randint(-340, 340)

y = randint(-280, 280)

goto(x, y)

Отримання випадкових координат та переміщення у ці координати.

Завдання. Складемо проект малювання двох квадратів лініями різної товщини.

Два квадрати

Код виконання:

from turtle import* shape('turtle') color('green') width(5) for i in range(4): forward(100) right(90) up() forward(200) right(180) down() color('pink') width(15) for i in range(4): forward(100) right(90) Код виконання за допомогою системи координат:

Два квадрати за координатами

from turtle import* shape('turtle') color('green') width(5) goto(0,0) goto(0,100) goto(100,100) goto(100,0) goto(0,0) up() color('pink') width(15) goto(100,100) down() goto(100,200) goto(200,200) goto(200,100) goto(100,100)

Користуватись модулем Черепашки можна трохи по іншому:

Імпортувати модуль:

import turtle

Створити змінну для олівця наступним чином:

t = turtle.Pen()

Тоді переміщення потрібно буде записати командою

t.forward()

t.pensize(10) - задає розмір лінії олівця


Приклад:

import turtle t = turtle.Pen() for i in range(4): t.forward(100) t.left(90)

Можна трохи змінити код і отримати малювання квадрату або кола по спіралі:

import turtle t = turtle.Pen() for x in range(100): t.forward(x) t.left(90)

import turtle t = turtle.Pen() for x in range(100): t.circle(x) t.left(90)

Малювання кіл різного радіусу

Можна ще доповнити цей код кольором:

t.pencolor('pink')

А змінивши ще й кут, ми отримаємо цікавішу фігуру:

Коло по спіралі

А змінимо, щоб малювався квадрат по спіралі:


Зробимо чотирьох колірну спіраль, щоб кожна сторона квадрата була іншого кольору.

Кольорова спіраль

Встановити колір фону вікна:

turtle.bgcolor('pink')

Малювання точки певного розміру заданим кольором:

turtle.dot(size=None, 'color')

Якщо розмір не вказано, то використовується максимальний +4.

Приклад: Намалювати мішень різними кольорами.

Малюнок мішень

Створення зображень за допомогою геометричних фігур

Графічні методи модуля tkinter дозволяють виводити на екран зображення з файлів, а також створювати малюнки в програмі з окремих геометричних фігур.

Для цього використовується клас canvas, який має таку структуру:

Змінна = Canvas(вікно, ширина =200, висота = 200)

Приклад створення полотна:

Створимо полотно розміром 400 × 400 пікселів: from tkinter import* # виклик модуля створення вікна root = Tk() # створення вікна canvas = Canvas(root, width = 400, height = 400) # створення полотна canvas.pack()

Положення точок на полотні задається координатами (x, y). Де x - це відстань від лівого краю полотна, y - це відстань від верхнього краю полотна.

canvas.config(bg = 'blue') - задаємо колір фону полотна.

Методи для малювання фігур

Відрізок:

Відрізок create_line - це лінія з двома точками, які мають координатами (x1, y1), (x2, y2).

canvas.create_line(x1, y1, x2, y2)

canvas.create_line(0, 0, 400, 400)

Прямокутник:

Це незаповнений прямокутник create_rectangle, в якого протилежні вершини мають координати (x1, y1), (x2, y2).

canvas.create_rectangle(x1, y1, x2, y2)

canvas.create_rectangle(200, 30, 300, 100)

Еліпс:

canvas.create_oval малює овал, який вписаний в прямокутник з відомими протилежними вершинами (x1, y1), (x2, y2).

canvas.create_oval(x1, y1, x2, y2)

canvas.create_oval(200, 30, 300, 100)

Багатокутник:

canvas.create_polygon малює багатокутник з його вершинами.

canvas.create_polygon(х1, у1, х2, у2, …, xn, yn)

Приклад, трикутник:

points = [10, 210, 100, 210, 100, 310] canvas.create_polygon(points)

Координати вершин задані списком.

або так: canvas.create_polygon(10, 210, 100, 210, 100, 310)


Щоб малюнки були кольорові, потрібно використати кольори контуру та заливки:

fill - колір заливки, outline - колір лінії

Наприклад:

canvas.create_oval(20, 30, 120, 130, fill = 'pink', outline = 'blue', width = 3)

Приклад створення фігур:

Створення геометричних фігур

Використання циклу з лічильником в черепашковій графіці.
from turtle import* speed(0) color('green') for x in range(100): width(x/100) circle(x) left(98)
from turtle import*
speed(0)
colors = ['green','orange', 'red','blue']
for x in range(300):
    color(colors[x%4])
    width(x/100)
    circle(x)
    left(90)


from turtle import*
speed(0)
colors = ['lime','orange', 'red','blue']
for x in range(200):
    color(colors[x%4])
    width(x/100)
    circle(x/2)
    left(45)

from turtle import*
speed(0)
colors = ['lime','orange', 'red','blue']
for x in range(200):
    color(colors[x%4])
    width(x/100)
    circle(x/2)
    left(46)
from turtle import*
speed(0)
colors = ['red','orange', 'lime']
for x in range(200):
    color(colors[x%3])
    forward(2*x)
    width(x*3/200)
    left(121)


from turtle import*
speed(0)
goto(0,0)
color('lime')
for x in range(150):
    width(x/100)
    forward(x)
    left(91)



from turtle import*
speed(0)
goto(0,0)
colors = ['red','purple', 'blue']
for x in range(150):
    pencolor(colors[x%3])
    width(x/100+1)
    forward(x)
    left(59)
from turtle import*
speed(0)
goto(0,0)
colors = ['red','orange', 'yellow', 'green', 'olive', 'blue', 'fuchsia', 'purple']
for x in range(10, 150):
    pencolor(colors[x%8])
    width(x/100+1)
    forward(x)
    left(44)



Спробуємо намалювати багатокутники:
from turtle import*
speed(0)
goto(0,0)
color('lime')
n = int(input('Введіть кількість кутів '))
for i in range(n):
    forward(100)
    right(360/n)

Спробуємо намалювати зірки:

Зірки, які мають більше, ніж 6 кутів можуть мати більше як одну зірчасту форму(вигляд).

Для побудови зірки кути розраховуються за формулами:

1) 720/n, n- кількість вершин зірки. Формула підходить для n=5, 7, 9, 11.

2) 180*(n-2)/n Формула підходить для n=8, 12, 16, 20 (при n=14 вийде 7-кутна зірка за цією формулою).

Зірок інших зірчастих форм тут немає.


from turtle import*
speed(0)
goto(0,0)
color('red')
n = int(input('Введіть кількість кутів '))
for i in range(n):
    forward(100)
    right(180*(n-2)/n)




Спробуємо намалювати контури зірок:

from turtle import*
speed(0)
goto(0,0)
color('green')
pensize(5)
for i in range(4):
    forward(50)
    left(144)
    forward(50)
    right(56)

Інші проекти:
Кола
Квадратні спіралі
Круглі спіралі



Кругова спіраль

Багатокутні спіралі
Перекручені спіралі


Вкладені цикли
Для скорочення програмного коду та використання складних кодів використовують вкладені цикли. Вкладені цикли - це коли один цикл вкладений в інший цикл. Тобто ми можемо виконати внутрішній цикл кілька разів. Зовнішній цикл контролює кількість повторень.

Приклад 1
Скласти програму для побудови зображення за допомогою вкладених циклів.
from turtle import*
speed(0)
color('green')
t=pen()
color("blue")
pensize(5)
for i in range(8):
    forward(150)
    for i in range(8):
        forward(50)
        backward(50)
        left(45)
    backward(150)
    left(45)

Черепашкова графіка Python


Приклад 2
Внутрішній цикл малює зірки, зовнішній цикл малює лінії , та повертається вліво на 112.5 градусів
Черепашкова графіка Python

Завдання 1
from turtle import*
speed(0)
color('green')
up()
goto(0,0)
for i in range(16):
    down()
    forward(150) 
    for i in range(16):
        forward(50)
        backward(50)
        left(22.5)
    backward(150)
    left(22.5)
Черепашкова графіка Python


Завдання 2
from turtle import*
speed(0)
color('green')
up()
goto(100,150)
for i in range(8):
    down()
    forward(75) 
    for i in range(16):
        forward(20)
        backward(20)
        left(22.5)
    backward(150)
    left(22.5)
Черепашкова графіка Python

Завдання 3
from turtle import*
speed(0)
color('lime')
pensize(4)
for i in range(8):
    forward(150)
    left(225)
    forward(150)
    for i in range(8):
        forward(50)
        left(225)
    backward(150)
   
Черепашкова графіка Python

Завдання 4
from turtle import*
speed(0)
color('violet')
pensize(3)
for i in range(8):
    forward(50)
    left(45)
    forward(150)
    for i in range(8):
        forward(50)
        backward(50)
        left(45)
    backward(150)
   
Черепашкова графіка Python

Завдання 5
from turtle import*
speed(0)
color('orange')
pensize(3)
for i in range(8):
    forward(50)
    left(45)
    forward(150)
    for i in range(8):
        forward(50)
        left(225)
    backward(150)
Черепашкова графіка Python

Завдання 6
from turtle import*
speed(0)
color('violet')
pensize(3)
colors = ['red', 'orange', 'olive', 'fuchsia' ]
for i in range(4):
    forward(50)
    left(90)
    forward(150)
    for i in range(8):
        pencolor(colors[i%4])
        circle(50)
        left(45)
    backward(150)
   
Черепашкова графіка Пайтон

Проекти
from turtle import*
speed(0)
fillcolor('darkgreen')
begin_fill()
sides = 5
distance = 100
for i in range(50*sides):
    distance +=  20
    forward(distance)
    right(2*360.0/sides+1)
end_fill()


Черепашкова графіка
Проект 2
from turtle import*
import colorsys
speed(0)
bgcolor("black")
h = 0
for i in range(16):
    for j in range(18):
        c = colorsys.hsv_to_rgb(h, 1, 1)
        color(c)
        h += 0.005
        rt(90)
        circle(150 - j * 6, 90)
        lt(90)
        circle(150 - j * 6, 90)
        rt(180)
    circle(40,24)

Черепашкова графіка

Проект 3
from turtle import*

bgcolor('black')
color('cyan')
speed(11)
right(45)

for i in range(150):
    circle(30)
    if 7 < i < 62:
        left(5)
    if 80 < i < 133:
        right(5)
    if i < 80:
        forward(10)
    else:
        forward(5)
 
Черепашкова графіка

Проект 4
from turtle import*
import colorsys
speed(0)
hideturtle()
bgcolor('black')
tracer(5)
width(2)
h = 0.001
for i in range(90):
    color(colorsys.hsv_to_rgb(h,1,1))
    forward(100)
    left(60)
    forward(100)
    right(120)
    circle(50)
    left(240)
    forward(100)
    left(60)
    forward(100)
    h += 0.02
    color(colorsys.hsv_to_rgb(h,1,1))
    forward(100)
    right(60)
    forward(100)
    left(120)
    circle(-50)
    right(240)
    forward(100)
    right(60)
    forward(100)
    left(2)
    h += 0.02
    
Черепашкова графіка


Проект 5
from turtle import*
shape("turtle")
color("orange")
fillcolor("yellow")
for x in range(6):
    begin_fill()
    for y in range (6):
        forward(50)
        right(60)
    end_fill()
    fd(50)
    left(60)


Проект 6
from turtle import*
shape("turtle")
color("orange")
left(90)
speed(0)
for x in range(8):
    right(45)
    for i in range(50):
        circle(5*i)
Проект 7
from turtle import*
shape("turtle")
speed(0)
up()
goto(0,0)
colors=['red','green','blue','yellow']
down()
for x in range(25):
    for w in range(4):
        color(colors[x%4])
        width(x/10+1)
        fd(x+x*10)
        right(90)
    right(45)

Черепашкова графіка



Задамо розміри вікна

200 × 100 пікселів, колір тла вікна — помаранчевий.
from turtle import*
setup(200, 100)
bgcolor('orange')

Колір фону вікна Черепашки


















































Коментарі