Методы fillcolor, begin_fill и end_fill модуля turtle языка Python. Заливка фигур
Словарь урока
из модуля turtle: |
|
---|
На прошлом уроке вы могли заметить, что при смене цвета пера заливка самой черепашки не меняется. Неважно, отображается она в виде стрелки или черепахи. Ее контур соответствует цвету пера, а внутри она остается черной.
Это связано с тем, что в черепашьей графике языка Python есть возможность менять не только цвет пера, но и заливки. Делается это с помощью функции fillcolor
, которой передают цвет аналогично pencolor
(название цвета, RGB-код или hex-код).
shapesize(3) stamp() teleport(100, 0) pencolor('yellow') fillcolor('green') stamp() left(90) teleport(100, 100) fillcolor('#abcdef') shape('turtle')
В коде выше с помощью команды shapesize
устанавливается размер черепахи. Мы его увеличиваем, чтобы было лучше видно.
Модуль turtle так настроен, что по-умолчанию заливается только фигура исполнителя-черепахи. Когда она рисует фигуры, они не заливаются, даже если вы вызывали в коде fillcolor
. Чтобы заливка срабатывала, требуются специальные методы: begin_fill
и end_fill
. Рассмотрим такую программу:
fillcolor('pink') teleport(-200, -30) forward(100) left(120) forward(100) write(1) left(120) forward(100) begin_fill() setheading(0) teleport(-50, -30) forward(100) left(120) forward(100) write(2) left(120) forward(100) end_fill() setheading(0) teleport(100, -30) forward(100) left(120) forward(100) write(3) left(120) forward(100)
Здесь заливается только второй треугольник, потому что только его код обрамляют команды begin_fill
и end_fill
. Так, например, если end_fill
переместить в конец программы, то раскрашенными будут второй и третий треугольники.
В turtle, чтобы заливка сработала, фигура не обязательно должна быть замкнутой, то есть представлять собой многоугольник. Это может быть просто ломаная линия.
fillcolor('orange') begin_fill() teleport(-100, 50) forward(200) teleport(-100, 0) forward(100) teleport(10, 0) right(10) forward(100) left(10) teleport(-100, -50) forward(100) right(10) forward(100) end_fill()
В примере выше заливается только третья фигура, потому что только она подходит под определение ломаной ‒ фигуры, состоящей из последовательно соединенных друг за другом отрезков, не лежащих на одной прямой. По всей видимости модуль turtle "в уме" соединяет крайние концы по прямой и заливает пространство внутри этого недостроенного нами многоугольника.
Сложнее предсказать заливку или получить желаемое, когда ломаная самопересекающаяся или таковой получается, когда turtle ее достраивает до многоугольника.
pensize(3) pencolor('green') fillcolor('lightblue') teleport(-100, 50) begin_fill() forward(100) right(90) forward(100) right(90) backward(100) end_fill()
В коде выше, если необходимо залить недостроенные прямоугольные треугольники полностью, то придется сначала это сделать с одним и только потом рисовать другой.
Заливка срабатывает и при поднятом пере. В этом случае отсутствует контур фигуры.
fillcolor('lightgreen') teleport(-100, 50) penup() begin_fill() forward(150) right(90) forward(100) right(90) forward(150) end_fill()
Также сделать фигуру однотонной можно, установив одинаковый цвет для пера и заливки. Наиболее краткий способ это сделать ‒ использовать еще один метод ‒ color
. Например, инструкция color('lightgreen')
сделает и перо, и заливку светлозелеными.
Если в функцию color
передать два разных цвета, то первый из них определит цвет пера, второй ‒ заливку. Это удобнее, чем вызывать pencolor
и fillcolor
, когда надо изменить не одну, а обе характеристики.
Задания для самостоятельной работы
- Выведите с помощью черепахи пятиконечную звезду, когда при рисовании отрезки пересекают друг друга. В код добавьте команды ее заливки. Какой окажется середина звезды?
- Запрограммируйте рисунок раскрашенного домика.
- Напишите код, при выполнении которого внутри залитой цветом фигуры появляется белое пятно.