Программирование на Python: графика
Программирование на Python: графика
Система координат
Определение координат
Управление цветом
Управление цветом (RGB)
Примитивы (простейшие фигуры)
Примитивы (простейшие фигуры)
Пример
Задачи
Задачи
Программирование на Python: графика
Процедуры
Процедуры (подпрограммы)
Как построить процедуру?
Процедура
Программа с процедурой
Задания
Задания
Программирование на Python: графика
Использование циклов
Использование циклов
Использование циклов
Задания
Задания
Задания
Задания-2
Задания-2
Задания-2
Программирование на Python: графика
Штриховка
Штриховка
Штриховка
Сложная штриховка
Очень сложная штриховка
Задания
Задания
Программирование на Python: графика
Заливка разными цветами
Задания
Задания
Программирование на Python: графика
Графики функций
Преобразование координат
Оси координат
Рисуем оси координат
Строим по точкам
Соединяем точки линиями
Задания
Задания
1.23M
Категория: ПрограммированиеПрограммирование

Программирование на 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. Система координат

Графика в Python
3
Система координат
начало
координат
X
(0,0)
y
x
(x,y)
Y
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

4. Определение координат

Графика в Python
4
Определение координат
(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. Управление цветом

Графика в Python
5
Управление цветом
Подключение графического модуля:
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)

Графика в Python
6
Управление цветом (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. Примитивы (простейшие фигуры)

Графика в Python
7
Примитивы (простейшие фигуры)
(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. Примитивы (простейшие фигуры)

Графика в Python
8
Примитивы (простейшие фигуры)
(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. Пример

Графика в Python
9
Пример
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. Задачи

Графика в Python
10
Задачи
«3»: «Домик»
«4»: «Лягушка»
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

11. Задачи

Графика в Python
11
Задачи
«5»: «Корона»
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

12. Программирование на Python: графика

12
Программирование
на Python: графика
2. Процедуры
К.Ю. Поляков, 2017
http://kpolyakov.spb.ru

13. Процедуры

Графика в Python
13
Процедуры
Задача: Построить фигуру:
?
Можно ли решить известными методами?
Особенность: Три похожие фигуры.
общее: размеры, угол поворота
отличия: координаты, цвет
?
Сколько координат надо задать?
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

14. Процедуры (подпрограммы)

Графика в Python
14
Процедуры (подпрограммы)
Процедура – это вспомогательный алгоритм, который
предназначен для выполнения некоторых действий.
Применение:
• выполнение одинаковых действий в разных местах
программы
• разбивка программы (или другой процедуры) на
подзадачи для лучшего восприятия
Задача
Подзадача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. Как построить процедуру?

Графика в Python
15
Как построить процедуру?
• выделить одинаковые или похожие действия
(три фигуры)
• найти в них общее (размеры, форма, угол
поворота) и отличия (координаты, цвет)
• отличия обозначить как переменные, они будут
параметрами процедуры
!
Параметры – это данные, от которых
зависит работа процедуры.
(x, y-60)
60
(x, y)
100
К.Ю. Поляков, 2017 -2018
Параметры:
x, y – координаты угла
с – цвет заливки
(x+100, y)
http://kpolyakov.spb.ru

16. Процедура

Графика в Python
16
Процедура
(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. Программа с процедурой

Графика в Python
17
Программа с процедурой
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. Задания

Графика в Python
18
Задания
«3»: Используя одну процедуру, построить фигуру.
«4»: Используя одну процедуру, построить фигуру.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

19. Задания

Графика в Python
19
Задания
«5»: Используя одну процедуру, построить фигуру.
«6»: Используя одну процедуру, построить фигуру.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

20. Программирование на Python: графика

20
Программирование
на Python: графика
3. Циклы
К.Ю. Поляков, 2017
http://kpolyakov.spb.ru

21. Использование циклов

Графика в Python
21
Использование циклов
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. Использование циклов

Графика в Python
22
Использование циклов
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. Использование циклов

Графика в Python
23
Использование циклов
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. Задания

Графика в Python
24
Задания
«3»: Ввести с клавиатуры число N и нарисовать
N рядов по 5 кругов.
Пример (N = 3):
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

25. Задания

Графика в Python
25
Задания
«4»: Ввести с клавиатуры число N и нарисовать
из кругов прямоугольный треугольник
размером N на N.
Пример (N = 3):
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

26. Задания

Графика в Python
26
Задания
«5»: Ввести с клавиатуры число N и нарисовать
из кругов равнобедренный треугольник с
высотой N. Каждый ряд должен быть
покрашен в свой цвет.
Пример (N = 3):
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

27. Задания-2

Графика в Python
27
Задания-2
«3»: Ввести с клавиатуры число N и нарисовать
N вертикальных рядов по 5 ромбиков.
Пример (N = 2):
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

28. Задания-2

Графика в Python
28
Задания-2
«4»: Используя циклы и процедуры, нарисуйте
узор. Число повторений рисунка N введите с
клавиатуры.
Пример (N = 3):
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

29. Задания-2

Графика в Python
29
Задания-2
«5»: Используя циклы и процедуры, нарисуйте
узор.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

30. Программирование на Python: графика

30
Программирование
на Python: графика
4. Штриховка
К.Ю. Поляков, 2017
http://kpolyakov.spb.ru

31. Штриховка

Графика в Python
31
Штриховка
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. Штриховка

Графика в Python
32
Штриховка
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. Штриховка

Графика в Python
33
Штриховка
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. Сложная штриховка

Графика в Python
34
Сложная штриховка
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. Очень сложная штриховка

Графика в Python
35
Очень сложная штриховка
?
(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. Задания

Графика в Python
36
Задания
«3»: Ввести с клавиатуры количество линий,
построить фигуру и выполнить штриховку:
«4»: Ввести с клавиатуры количество линий,
построить фигуру и выполнить штриховку:
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

37. Задания

Графика в Python
37
Задания
«5»: Ввести с клавиатуры количество линий и
построить фигуру:
«6»: Ввести с клавиатуры количество линий и
построить фигуру:
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

38. Программирование на Python: графика

38
Программирование
на Python: графика
5. Закрашивание областей
К.Ю. Поляков, 2017
http://kpolyakov.spb.ru

39. Заливка разными цветами

Графика в Python
39
Заливка разными цветами
(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. Задания

Графика в Python
40
Задания
«3»: Ввести с клавиатуры число полос и построить
фигуру, залив все области разным цветом.
«4»: Ввести с клавиатуры число полос и построить
фигуру, залив все области разным цветом.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

41. Задания

Графика в Python
41
Задания
«5»: Ввести с клавиатуры число полос и построить
фигуру, залив все области разным цветом.
или
«6»: Ввести с клавиатуры число полос и построить
фигуру, залив все области разным цветом.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

42. Программирование на Python: графика

42
Программирование
на Python: графика
6. Построение графиков
функций
К.Ю. Поляков, 2017
http://kpolyakov.spb.ru

43. Графики функций

Графика в Python
43
Графики функций
Задача: построить график функции y = x2 на отрезке от
-2 до 2.
Y
Анализ:
максимальное значение
ymax = 4 при x = ±2
минимальное значение
ymin = 0 при x = 0
X
Проблема: функция задана в математической системе
координат, строить надо на экране, указывая
координаты в пикселях.
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru

44. Преобразование координат

Графика в Python
44
Преобразование координат
Математическая
система координат
(0,0)
Y
x
y0
(x,y)
Экранная система
координат (пиксели)
x0


(xэ,yэ)
y
(0,0)
X
k – масштаб (длина
изображения единичного
отрезка на экране)
К.Ю. Поляков, 2017 -2018
xэ = x0 + kx
yэ = y0 - ky
http://kpolyakov.spb.ru

45. Оси координат

Графика в Python
45
Оси координат
(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. Рисуем оси координат

Графика в Python
46
Рисуем оси координат
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. Строим по точкам

Графика в Python
47
Строим по точкам
...
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. Соединяем точки линиями

Графика в Python
48
Соединяем точки линиями
Идея: сначала создаём в памяти массив точек, затем
соединяем точки линиями (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. Задания

Графика в Python
49
Задания
«3»: Построить график функции
y x2
на отрезке [-2,2].
«4»: Построить графики функций
y x и y x
на отрезке [-2,2].
2
К.Ю. Поляков, 2017 -2018
2
http://kpolyakov.spb.ru

50. Задания

Графика в Python
50
Задания
«5»: Построить графики функций
2
2
x
y
x y и
на отрезке [-2,2].
К.Ю. Поляков, 2017 -2018
http://kpolyakov.spb.ru
English     Русский Правила