4 Python from graph import pen Color red

  • Slides: 116
Download presentation

4 Графика в Python Управление цветом Подключение графического модуля: from graph import * подключить

4 Графика в Python Управление цветом Подключение графического модуля: from graph import * подключить все Цвет линий: pen. Color( "red" ) функции модуля graph white, black, gray, navy, blue, cyan, green, yellow, red, orange, brown, maroon, violet, purple, . . . http: //bit. ly/2 m. Nrkoq Толщина линий: pen. Size( 2 ) Цвет заливки: brush. Color( "green" ) К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

5 Графика в Python Управление цветом (RGB) Цвет в формате RGB: "yellow" pen. Color(

5 Графика в Python Управление цветом (RGB) Цвет в формате RGB: "yellow" pen. Color( 255, 0 ) R(red) 0. . 255 G(green) B(blue) 0. . 255 brush. Color( 255, 0, 255 ) "magenta" pen. Color( 0, 255 ) "cyan" brush. Color( 255, 255 ) pen. Color( 0, 0, 0 ) К. Ю. Поляков, 2017 -2018 "white" "black" http: //kpolyakov. spb. ru

6 Графика в Python Примитивы (простейшие фигуры) (x, y) pen. Color(0, 0, 255) point(x,

6 Графика в Python Примитивы (простейшие фигуры) (x, y) pen. Color(0, 0, 255) point(x, y) (x 1, y 1) (x 2, y 2) (x 1, y 1) (x 5, y 5) (x 2, y 2) (x 3, y 3) (x 4, y 4) К. Ю. Поляков, 2017 -2018 pen. Color(0, 255, 0) line(x 1, y 1, x 2, y 2) pen. Color(255, 0, 0) move. To(x 1, y 1) line. To(x 2, y 2) line. To(x 3, y 3) line. To(x 4, y 4) line. To(x 5, y 5) http: //kpolyakov. spb. ru

7 Графика в Python Примитивы (простейшие фигуры) (10, 20) (10, 10) (10, 50) (50,

7 Графика в Python Примитивы (простейшие фигуры) (10, 20) (10, 10) (10, 50) (50, 30) (50, 40) (50, 50) R=20 К. Ю. Поляков, 2017 -2018 pen. Color("blue") brush. Color("yellow") rectangle(10, 20, 50, 40) pen. Color("cyan") brush. Color("magenta") polygon( [(10, 10), (50, 50), (10, 10)] ) pen. Color("red") brush. Color("green") circle(50, 30, 20) http: //kpolyakov. spb. ru

8 Графика в Python Пример from graph import * (200, 50) pen. Color("magenta") brush.

8 Графика в Python Пример from graph import * (200, 50) pen. Color("magenta") brush. Color("blue") (100, 100) rectangle(100, 300, 200) brush. Color("yellow") polygon([(100, 100), (200, 50), (200, 150) (300, 100), (100, 100)]) (300, 200) pen. Color("white") brush. Color("green") circle(200, 150, 50) run() К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

15 Графика в Python Процедура (x, y-60) 60 определить (define) отступ К. Ю. Поляков,

15 Графика в Python Процедура (x, y-60) 60 определить (define) отступ К. Ю. Поляков, 2017 -2018 (x, y) название 100 (x+100, y) параметры def treug(x, y, c): brush. Color(c) polygon( [(x, y), (x, y-60), (x+100, y), (x, y)] ) http: //kpolyakov. spb. ru

16 Графика в Python Программа с процедурой 60 (100, 100) (200, 100) 100 (200,

16 Графика в Python Программа с процедурой 60 (100, 100) (200, 100) 100 (200, 160) вызовы процедуры from graph import * def treug(x, y, c): brush. Color(c) polygon([(x, y), (x, y-60), (x+100, y), (x, y)] ) pen. Color ( "black" ) treug ( 100, "blue" ) treug ( 200, 100, "green" ) treug ( 200, 160, "red" ) run() аргументы (значения параметров) К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

20 Графика в Python Использование циклов 40 100 160 40 circle ( 40, 20

20 Графика в Python Использование циклов 40 100 160 40 circle ( 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 Использование циклов from graph import * def row ( y

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

30 Графика в Python Штриховка (x 1, y 1) N линий (N=5) ? x

30 Графика в Python Штриховка (x 1, y 1) N линий (N=5) ? x 1+h h (x 2, y 2) В цикле менять x: line( x, y 1, x, y 2) rectangle (x 1, y 1, line( x 1+h, y 1, line( x 1+2*h, y 1, line( x 1+3*h, y 1, . . . x К. Ю. Поляков, 2017 -2018 Как найти h? x 2, y 2) x 1+h, y 2) x 1+2*h, y 2) x 1+3*h, y 2) x http: //kpolyakov. spb. ru

32 Графика в Python Штриховка from graph import * x 1 = 100; y

32 Графика в Python Штриховка from graph import * x 1 = 100; y 1 = 100 x 2 = 300; y 2 = 200 N = 10 rectangle(x 1, y 1, x 2, y 2) h = (x 2 -x 1)/(N+1) (x 2, y 2) x = x 1 + h for i in range(N): line(x, y 1, x, y 2) x += h run() N линий (x 1, y 1) h К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

34 Графика в Python Очень сложная штриховка ? (x 1, y 1) hx Как

34 Графика в Python Очень сложная штриховка ? (x 1, y 1) hx Как найти hx и hy? hy N (x 2, y 2) Сначала: x = x 1+hx y = y 1+hy В цикле: x += hx y += hy line( x 1, y 1+hy, x 1+hx, y 1+hy) ; line( x 1, y 1+2*hy, x 1+2*hx, y 1+2*hy); line( x 1, y 1+3*hy, x 1+3*hx, y 1+3*hy); . . . y x y К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

38 Графика в Python Заливка разными цветами (x 1, y 1) x x+h N

38 Графика в Python Заливка разными цветами (x 1, y 1) x x+h N полос brush. Color(c, c, c) rectangle(x, y 1, x+h, y 2) (x 2, y 2) h серый: R=G=B Шаг изменения цвета: hc = 255 // N x = x 1; c = 0 for i in range(N): brush. Color(c, c, c) rectangle(x, y 1, x+h, y 2) x += h; c += hc К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

44 Графика в Python Оси координат (0, 0) x 0 (x 0, 0) y

44 Графика в Python Оси координат (0, 0) x 0 (x 0, 0) y 0 150 (0, y 0) (x 0+150, y 0) (x 0, y 0+20) line(0, y 0, x 0+150, y 0) line(x 0, 0, x 0, y 0+20) К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

53 Графика в Python Начальная картинка from graph import * brush. Color("blue") rectangle(0, 0,

53 Графика в Python Начальная картинка from graph import * brush. Color("blue") rectangle(0, 0, 400) x = 100 y = 100 начальные координаты синий квадрат жёлтый квадрат pen. Color("yellow") brush. Color("yellow") obj = rectangle(x, y, x+20, y+20) run() К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

54 Графика в Python Движение def update(): move. Object. By(obj, 5, 0) if x.

54 Графика в Python Движение def update(): move. Object. By(obj, 5, 0) if x. Coord(obj) >= 380: # если вышел close() # за границу x-координата on. Timer(update, 50) вызывать update каждые 50 мс К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

56 Графика в Python Полная программа from graph import * def update(): . .

56 Графика в Python Полная программа from graph import * def update(): . . . процедуры def key. Pressed(event): . . . brush. Color("blue") rectangle(0, 0, 400) x = 100 y = 100 pen. Color("yellow") brush. Color("yellow") obj = rectangle(x, y, x+20, y+20) on. Key(key. Pressed) обработка on. Timer(update, 50) событий run() К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

64 Графика в Python Полная программа from graph import * def update(): . .

64 Графика в Python Полная программа from graph import * def update(): . . . процедуры def key. Pressed(event): . . . # рисуем синий квадрат x = 100; y = 100 глобальные dx = 0; dy = 0 переменные pen. Color("yellow") brush. Color("yellow") obj = rectangle(x, y, x+20, y+20) on. Key(key. Pressed) обработка on. Timer(update, 50) событий run() К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

68 Графика в Python Как хранить змейку? Змейка = массив из звеньев-квадратов (x, y)

68 Графика в Python Как хранить змейку? Змейка = массив из звеньев-квадратов (x, y) a snake = [obj 0, obj 1, obj 2, obj 3, obj 4] snake = [] цвет границы и заливки pen. Color("yellow") для головы brush. Color("yellow") for i in range(N): obj = rectangle(x+i*a, y, x+i*a+a, y+a) snake. append( obj ) остальные зелёные brush. Color("green") К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

70 Графика в Python Как двигать змейку? Вся змейка: перебор с последнего, кроме головы

70 Графика в Python Как двигать змейку? Вся змейка: перебор с последнего, кроме головы def move. Snake(x. New, y. New): global x, y for k in range(len(snake)-1, 0, -1): new. Coord = coords(snake[k-1]) move. Object. To(snake[k], new. Coord[0], new. Coord[1]) move. Object. To(snake[0], x. New, y. New) x = x. New двигаем голову y = y. New К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

82 Графика в Python Точка случайного цвета (RGB) Цвет в формате RGB: "yellow" pen.

82 Графика в Python Точка случайного цвета (RGB) Цвет в формате RGB: "yellow" pen. Color( 255, 0 ) R(red) 0. . 255 G(green) B(blue) 0. . 255 r = randint(0, 255) g = randint(0, 255) b = randint(0, 255) g, b ) pen. Color( r, ? ? ? point(x, y) К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

83 Графика в Python Вся программа from graph import * from random import choice

83 Графика в Python Вся программа from graph import * from random import choice colors = ["red", "green", "blue", "black", "#FFFF 00"] def new. Point(): новая точка x = randint(0, 399) через 10 мс y = randint(0, 299) col = choice( colors ) pen. Color( col ) point(x, y) выход по def key. Pressed(event): Escape if event. keycode == VK_ESCAPE: close() on. Key(key. Pressed) установка on. Timer(new. Point, 10) обработчиков run() событий К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

87 Графика в Python Танк с вращающейся пушкой x 0 (0, 0) y 1

87 Графика в Python Танк с вращающейся пушкой x 0 (0, 0) y 1 H x 1 (x 1, y 1) ? Как найти x 1 и y 1? y 0 line(x 0, y 0, x 1, y 1) W circle(x 0, y 0, W/2) rectangle(x 0 -W/2, y 0 -H/2, x 0+W/2, y 0+H/2) К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

88 Графика в Python Начальная картинка from graph import * import math H =

88 Графика в Python Начальная картинка from graph import * import math H = 60; W = 30; L = 40 # размеры танка x 0 = 200; y 0 = 400; angle = 90 # пушка brush. Color("#6 b 8 e 23") rectangle(x 0 -W/2, y 0 -H/2, x 0+W/2, y 0+H/2) a = angle*math. pi/180 # в радианы корпус x 1 = x 0+L*math. cos(a) y 1 = y 0 -L*math. sin(a) ствол pen. Size(5) line(x 0, y 0, x 1, y 1) pen. Size(1) brush. Color("#556 b 2 f") башня circle(x 0, y 0, W/2) run() К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

89 Графика в Python Анимация поворота пушки def key. Pressed(event): if event. keycode ==

89 Графика в Python Анимация поворота пушки def key. Pressed(event): if event. keycode == VK_LEFT: draw. Gun(angle+5) # влево на 5 градусов elif event. keycode == VK_RIGHT: draw. Gun(angle-5) # вправо на 5 градусов elif event. keycode == VK_ESCAPE: close(). . . on. Key(key. Pressed) ! К. Ю. Поляков, 2017 -2018 Нужно написать процедуру draw. Gun! http: //kpolyakov. spb. ru

92 Графика в Python Полная программа from graph import * import math def key.

92 Графика в Python Полная программа from graph import * import math def key. Pressed(event): процедуры. . . def draw. Gun(angle. New): . . . начальные H = 60; W = 30; L = 40 значения x 0 = 200; y 0 = 400; angle = 90 gun = None корпус brush. Color("#6 b 8 e 23") rectangle(x 0 -W/2, y 0 -H/2, x 0+W/2, y 0+H/2) pen. Size(5) пушка draw. Gun(angle) pen. Size(1) башня brush. Color("#556 b 2 f") circle(x 0, y 0, W/2) on. Key(key. Pressed) run() К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

97 Графика в Python Как организовать анимацию? вызывается каждые 30 мс def update(): global

97 Графика в Python Как организовать анимацию? вызывается каждые 30 мс def update(): global is. Flying, bullet if is. Flying: # если летит. . . y = coords(bullet)[1] if y < 0: # если улетел. . . is. Flying = False move. Object. To(bullet, x 0 -r, y 0 -r) else: # летит дальше. . . move. Object. By(bullet, 0, -5). . . on. Timer(update, 30) К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

98 Графика в Python Как запустить движение? вызывается при нажатии клавиши def key. Pressed(event):

98 Графика в Python Как запустить движение? вызывается при нажатии клавиши def key. Pressed(event): global is. Flying if event. keycode == VK_SPACE: is. Flying = True # полетели! elif event. keycode == VK_ESCAPE: close() # закончить работу. . . on. Key(key. Pressed) К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

99 Графика в Python Полная программа from graph import * def update(): процедуры. .

99 Графика в Python Полная программа from graph import * def update(): процедуры. . . def key. Pressed(event): . . . x 0 = 200; y 0 = 400; r = 3 brush. Color("black") bullet = circle(x 0, y 0, r) is. Flying = False on. Key(key. Pressed) on. Timer(update, 30) run() К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

108 Графика в Python Попал ли снаряд в данную тарелку? def hit(p): . .

108 Графика в Python Попал ли снаряд в данную тарелку? def hit(p): . . . if d 2 <= (Rp + r)**2: return True else: return False def hit(p): . . . return d 2 <= (Rp + r)**2 К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

109 Графика в Python Попал ли снаряд в данную тарелку? def hit(p): global bullet

109 Графика в Python Попал ли снаряд в данную тарелку? def hit(p): global bullet (xb, yb) # координаты снаряда x 1, y 1, x 2, y 2 = coords(bullet) (x 1, y 1) xb = x 1 + r # центр снаряда yb = y 1 + r (x 2, y 2) # координаты тарелки (x 1 p, y 1 p) x 1 p, y 1 p, x 2 p, y 2 p = coords(p) xp = (x 1 p + x 2 p) / 2 (xp, yp) yp = (y 1 p + y 2 p) / 2 (x 2 p, y 2 p) Rp = (x 2 p - x 1 p) / 2 d 2 = (xb-xp)**2 + (yb-yp)**2 return d 2 <= (Rp+r)**2 К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

110 Графика в Python Как вызывать эти функции? def update(): global is. Flying, bullet

110 Графика в Python Как вызывать эти функции? def update(): global is. Flying, bullet move. Plates() if is. Flying: # если летит. . . y = coords(bullet)[1] if y < 0: # если улетел. . . is. Flying = False move. Object. To(bullet, x 0 -r, y 0 -r) else: # летит дальше. . . move. Object. By(bullet, 0, -5) check. Collision(). . . вызывается on. Timer(update, 30) каждые 30 мс К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru

111 Графика в Python Полная программа from graph import * # тут все функции.

111 Графика в Python Полная программа from graph import * # тут все функции. . . x 0 = 200; y 0 = 400; r = 3 create. Plates( 5 ) brush. Color("black") bullet = circle(x 0, y 0, r) is. Flying = False on. Key(key. Pressed) on. Timer(update, 30) run() К. Ю. Поляков, 2017 -2018 http: //kpolyakov. spb. ru