Similar presentations:
Программирование на Python: графика. Простые программы
1. Программирование на Python: графика
1Программирование
на Python: графика
1. Простые программы
2. Процедуры
3. Циклы
4. Штриховка
5. Закрашивание областей
6. Построение графиков функций
7. Анимация
8. Игры
Модуль graph.py:
http://kpolyakov.spb.ru/download/graph.py
К.Ю. Поляков, 2017-2018
http://kpolyakov.spb.ru
2. Программирование на Python: графика
2Программирование
на Python: графика
1. Простые программы
К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
3. Система координат
Графика в Python3
Система координат
начало
координат
X
(0,0)
y
x
(x,y)
Y
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
4. Определение координат
Графика в Python4
Определение координат
(0,0)
базовая точка
(100,100)
X
?
(200,50)
200
?
(300,100)
?
?
(50,150)
(100,200)
?
Y
К.Ю. Поляков, 2017 -2018
?
100
(350,150)
(200,150)
(300,200)
(200,250)
?
?
http://kpolyakov.spb.ru
5. Управление цветом
Графика в Python5
Управление цветом
Подключение графического модуля:
from graph import *
подключить все
Цвет линий:
penColor( "red" )
функции модуля graph
white, black, gray, navy, blue,
cyan, green, yellow, red, orange,
brown, maroon, violet, purple, ...
http://bit.ly/2mNrkoq
Толщина линий:
penSize( 2 )
Цвет заливки:
brushColor( "green" )
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
6. Управление цветом (RGB)
Графика в Python6
Управление цветом (RGB)
Цвет в формате RGB:
"yellow"
penColor( 255, 255, 0 )
R(red)
0..255
G(green)
B(blue)
0..255
0..255
brushColor( 255, 0, 255 )
"magenta"
penColor( 0, 255, 255 )
"cyan"
brushColor( 255, 255, 255 )
penColor( 0, 0, 0 )
К.Ю. Поляков, 2017 -2018
"white"
"black"
http://kpolyakov.spb.ru
7. Примитивы (простейшие фигуры)
Графика в Python7
Примитивы (простейшие фигуры)
(x, y)
penColor(0, 0, 255)
point(x, y)
(x1, y1)
(x2, y2)
(x1, y1)
(x2, y2)
(x3, y3)
(x5, y5)
(x4, y4)
К.Ю. Поляков, 2017 -2018
penColor(0, 255, 0)
line(x1, y1, x2, y2)
penColor(255, 0, 0)
moveTo(x1, y1)
lineTo(x2, y2)
lineTo(x3, y3)
lineTo(x4, y4)
lineTo(x5, y5)
http://kpolyakov.spb.ru
8. Примитивы (простейшие фигуры)
Графика в Python8
Примитивы (простейшие фигуры)
(10, 20)
(10, 10)
(10, 50)
(50, 30)
penColor("blue")
brushColor("yellow")
rectangle(10, 20, 50, 40)
(50, 40)
(50, 50)
R=20
К.Ю. Поляков, 2017 -2018
penColor("cyan")
brushColor("magenta")
polygon( [(10,10), (50,50),
(10,50), (10,10)] )
penColor("red")
brushColor("green")
circle(50, 30, 20)
http://kpolyakov.spb.ru
9. Пример
Графика в Python9
Пример
from graph import *
(200, 50)
penColor("magenta")
brushColor("blue")
(100, 100)
rectangle(100,100,300,200)
brushColor("yellow")
polygon([(100,100), (200,50),
(200, 150)
(300,100), (100,100)])
(300, 200)
penColor("white")
brushColor("green")
circle(200, 150, 50)
run()
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
10. Задачи
Графика в Python10
Задачи
«3»: «Домик»
«4»: «Лягушка»
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
11. Задачи
Графика в Python11
Задачи
«5»: «Корона»
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
12. Программирование на Python: графика
12Программирование
на Python: графика
2. Процедуры
К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
13. Процедуры
Графика в Python13
Процедуры
Задача: Построить фигуру:
?
Можно ли решить известными методами?
Особенность: Три похожие фигуры.
общее: размеры, угол поворота
отличия: координаты, цвет
?
Сколько координат надо задать?
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
14. Процедуры (подпрограммы)
Графика в Python14
Процедуры (подпрограммы)
Процедура – это вспомогательный алгоритм, который
предназначен для выполнения некоторых действий.
Применение:
• выполнение одинаковых действий в разных местах
программы
• разбивка программы (или другой процедуры) на
подзадачи для лучшего восприятия
Задача
Подзадача1
1.1
1.2
К.Ю. Поляков, 2017 -2018
1.3
Подзадача2
2.1
2.2
Подзадача3
2.3
3.1
3.2
3.3
http://kpolyakov.spb.ru
15. Как построить процедуру?
Графика в Python15
Как построить процедуру?
• выделить одинаковые или похожие действия
(три фигуры)
• найти в них общее (размеры, форма, угол
поворота) и отличия (координаты, цвет)
• отличия обозначить как переменные, они будут
параметрами процедуры
!
Параметры – это данные, от которых
зависит работа процедуры.
(x, y-60)
60
(x, y)
100
К.Ю. Поляков, 2017 -2018
Параметры:
x, y – координаты угла
с – цвет заливки
(x+100, y)
http://kpolyakov.spb.ru
16. Процедура
Графика в Python16
Процедура
(x, y-60)
60
определить
(define)
отступ
(x, y)
название
100
(x+100, y)
параметры
def treug(x, y, c):
brushColor(c)
polygon( [(x,y), (x,y-60),
(x+100,y), (x,y)] )
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
17. Программа с процедурой
Графика в Python17
Программа с процедурой
60
(100,100)
(200,100)
100
(200,160)
вызовы
процедуры
from graph import *
def treug(x, y, c):
brushColor(c)
polygon([(x,y),(x,y-60),
(x+100,y),(x,y)] )
penColor ( "black" )
treug ( 100, 100, "blue" )
treug ( 200, 100, "green" )
treug ( 200, 160, "red" )
run()
аргументы (значения
параметров)
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
18. Задания
Графика в Python18
Задания
«3»: Используя одну процедуру, построить фигуру.
«4»: Используя одну процедуру, построить фигуру.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
19. Задания
Графика в Python19
Задания
«5»: Используя одну процедуру, построить фигуру.
«6»: Используя одну процедуру, построить фигуру.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
20. Программирование на Python: графика
20Программирование
на Python: графика
3. Циклы
К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
21. Использование циклов
Графика в Python21
Использование циклов
40
100
160
?
40
circle ( 40, 40, 20 )
circle ( 100, 40, 20 )
circle ( 160, 40, 20 )
x
...
x = 40
for i in range(5):
circle(x, 40, 20)
x += 60
К.Ю. Поляков, 2017 -2018
?
Что меняется?
Как меняется x?
"сделай 5 раз"
http://kpolyakov.spb.ru
22. Использование циклов
Графика в Python22
Использование циклов
40
100
160
40
100
160
1-й ряд:
?
Что меняется для 2-го ряда?
x = 40
for i in range(5):
circle(x, 40
40, 20)
y
x += 60
К.Ю. Поляков, 2017 -2018
!
Можно сделать это
процедурой с
параметром y!
http://kpolyakov.spb.ru
23. Использование циклов
Графика в Python23
Использование циклов
from graph import *
def row ( y ):
x = 40
for i in range(5):
circle(x, y, 20)
x += 60
y = 40
for k in range(3):
вызов
процедуры
row ( y )
y += 60
вниз на 60
run()
К.Ю. Поляков, 2017 -2018
процедура
http://kpolyakov.spb.ru
24. Задания
Графика в Python24
Задания
«3»: Ввести с клавиатуры число N и нарисовать
N рядов по 5 кругов.
Пример (N = 3):
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
25. Задания
Графика в Python25
Задания
«4»: Ввести с клавиатуры число N и нарисовать
из кругов прямоугольный треугольник
размером N на N.
Пример (N = 3):
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
26. Задания
Графика в Python26
Задания
«5»: Ввести с клавиатуры число N и нарисовать
из кругов равнобедренный треугольник с
высотой N. Каждый ряд должен быть
покрашен в свой цвет.
Пример (N = 3):
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
27. Задания-2
Графика в Python27
Задания-2
«3»: Ввести с клавиатуры число N и нарисовать
N вертикальных рядов по 5 ромбиков.
Пример (N = 2):
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
28. Задания-2
Графика в Python28
Задания-2
«4»: Используя циклы и процедуры, нарисуйте
узор. Число повторений рисунка N введите с
клавиатуры.
Пример (N = 3):
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
29. Задания-2
Графика в Python29
Задания-2
«5»: Используя циклы и процедуры, нарисуйте
узор.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
30. Программирование на Python: графика
30Программирование
на Python: графика
4. Штриховка
К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
31. Штриховка
Графика в Python31
Штриховка
N линий (N=5)
(x1, y1)
?
x1+h
h
(x2, y2)
x2 x1
N 1
В цикле менять x:
line( x, y1, x, y2)
rectangle (x1, y1,
line( x1+h,
y1,
line( x1+2*h, y1,
line( x1+3*h, y1,
...
x
К.Ю. Поляков, 2017 -2018
Как найти h?
h
x2, y2)
x1+h,
y2)
x1+2*h, y2)
x1+3*h, y2)
x
http://kpolyakov.spb.ru
32. Штриховка
Графика в Python32
Штриховка
N линий (N=5)
(x1, y1)
меняется!
line( x
x, y1, x
x, y2)
?
x=?
h
Как меняется?
(x2, y2)
для 1-й линии
x = x1 + h
"сделай N раз"
for i in range(N):
line(x, y1, x, y2)
x += h
? Что плохо?
для следующей
линии
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
33. Штриховка
Графика в Python33
Штриховка
from graph import *
x1 = 100; y1 = 100
x2 = 300; y2 = 200
N = 10
rectangle(x1,y1,x2,y2)
h = (x2-x1)/(N+1)
(x2, y2) x = x1 + h
for i in range(N):
line(x, y1, x, y2)
x += h
run()
N линий
(x1, y1)
h
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
34. Сложная штриховка
Графика в Python34
Сложная штриховка
a
(x1, y1)
(x3+a, y1)
?
a x1 x2
(x2, y2)
(x3, y2)
Как найти a и h?
x3 x2
h
N 1
h
line( x1+h,
y1, x1+h-a,
y2);
line( x1+2*h, y1, x1+2*h-a, y2);
line( x1+3*h, y1, x1+3*h-a, y2);
...
x
Как меняется x?
x-a
?
Сначала:
x = x1 + h
К.Ю. Поляков, 2017 -2018
В цикле:
x += h
http://kpolyakov.spb.ru
35. Очень сложная штриховка
Графика в Python35
Очень сложная штриховка
?
(x1, y1)
hx
hy
N
(x2, y2)
Как найти hx и hy?
x2 x1
hx
N 1
y2 y1
hy
N 1
Сначала:
x = x1+hx
y = y1+hy
В цикле:
x += hx
y += hy
line( x1, y1+hy,
x1+hx,
y1+hy) ;
line( x1, y1+2*hy, x1+2*hx, y1+2*hy);
line( x1, y1+3*hy, x1+3*hx, y1+3*hy);
...
y
x
y
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
36. Задания
Графика в Python36
Задания
«3»: Ввести с клавиатуры количество линий,
построить фигуру и выполнить штриховку:
«4»: Ввести с клавиатуры количество линий,
построить фигуру и выполнить штриховку:
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
37. Задания
Графика в Python37
Задания
«5»: Ввести с клавиатуры количество линий и
построить фигуру:
«6»: Ввести с клавиатуры количество линий и
построить фигуру:
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
38. Программирование на Python: графика
38Программирование
на Python: графика
5. Закрашивание областей
К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
39. Заливка разными цветами
Графика в Python39
Заливка разными цветами
(x1, y1)
серый: R=G=B
x x+h
N полос
brushColor(c, c, c)
rectangle(x, y1,
x+h, y2)
(x2, y2)
h
Шаг изменения цвета:
hc = 255 // N
x = x1; c = 0
for i in range(N):
brushColor(c, c, c)
rectangle(x, y1, x+h, y2)
x += h; c += hc
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
40. Задания
Графика в Python40
Задания
«3»: Ввести с клавиатуры число полос и построить
фигуру, залив все области разным цветом.
«4»: Ввести с клавиатуры число полос и построить
фигуру, залив все области разным цветом.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
41. Задания
Графика в Python41
Задания
«5»: Ввести с клавиатуры число полос и построить
фигуру, залив все области разным цветом.
или
«6»: Ввести с клавиатуры число полос и построить
фигуру, залив все области разным цветом.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
42. Программирование на Python: графика
42Программирование
на Python: графика
6. Построение графиков
функций
К.Ю. Поляков, 2017
http://kpolyakov.spb.ru
43. Графики функций
Графика в Python43
Графики функций
Задача: построить график функции y = x2 на отрезке от
-2 до 2.
Y
Анализ:
максимальное значение
ymax = 4 при x = ±2
минимальное значение
ymin = 0 при x = 0
X
Проблема: функция задана в математической системе
координат, строить надо на экране, указывая
координаты в пикселях.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
44. Преобразование координат
Графика в Python44
Преобразование координат
Математическая
система координат
(0,0)
Y
x
y0
(x,y)
Экранная система
координат (пиксели)
x0
yэ
xэ
(xэ,yэ)
y
(0,0)
X
k – масштаб (длина
изображения единичного
отрезка на экране)
К.Ю. Поляков, 2017 -2018
xэ = x0 + kx
yэ = y0 - ky
http://kpolyakov.spb.ru
45. Оси координат
Графика в Python45
Оси координат
(0,0)
x0
(x0,0)
y0
150
(0,y0)
(x0+150,y0)
(x0,y0+20)
line(0, y0, x0+150, y0)
line(x0, 0, x0, y0+20)
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
46. Рисуем оси координат
Графика в Python46
Рисуем оси координат
from graph import *
x0 = 150 # начало координат
y0 = 250
k = 50
# масштаб
xmin = -2; xmax = 2 # пределы по x
line(0, y0, x0+150, y0)
line(x0, 0, x0, y0+20)
...
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
47. Строим по точкам
Графика в Python47
Строим по точкам
...
x = xmin # начальное значение x
h = 0.02 # шаг изменения x
penColor("red")
while x <= xmax:
y = x*x # функция
экранные координаты
xe = x0 + k*x
(в пикселях)
ye = y0 - k*y
point(xe, ye) # точка на экране
x += h
# к следующей точке
run()
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
48. Соединяем точки линиями
Графика в Python48
Соединяем точки линиями
Идея: сначала создаём в памяти массив точек, затем
соединяем точки линиями (polygon)
points = [] # пустой массив
while x <= xmax:
y = x*x
добавляем точку
xe = x0 + k*x
в массив
ye = y0 - k*y
points.append( (xe, ye) )
x += h
penColor("red")
polyline(points) # рисуем линию!
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
49. Задания
Графика в Python49
Задания
«3»: Построить график функции
y x2
на отрезке [-2,2].
«4»: Построить графики функций
y x и y x
на отрезке [-2,2].
2
К.Ю. Поляков, 2017 -2018
2
http://kpolyakov.spb.ru
50. Задания
Графика в Python50
Задания
«5»: Построить графики функций
2
2
x
y
x y и
на отрезке [-2,2].
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru