Методы fillcolor, begin_fill и end_fill модуля turtle языка Python. Заливка фигур

Словарь урока

из модуля turtle:
  • teleport ‒ телепорт
  • goto ‒ перейти
  • forward ‒ вперед
  • backward ‒ назад
  • left ‒ налево
  • right ‒ направо
  • write ‒ писать, записывать
  • stamp ‒ штамп, печать, отпечаток
  • shape ‒ форма, вид, облик, фигура
  • turtle ‒ черепаха
  • pensize ‒ размер (size) пера (pen)
  • pencolor ‒ цвет (color) пера (pen)
  • fillcolor ‒ цвет (color) заливки (filling)
  • color ‒ цвет
  • begin_fill ‒ начать (begin) заполнение (fill)
  • end_fill ‒ конец (end) заполнения (fill)
  • shapesize ‒ размер (size) фигуры (shape)

На прошлом уроке вы могли заметить, что при смене цвета пера заливка самой черепашки не меняется. Неважно, отображается она в виде стрелки или черепахи. Ее контур соответствует цвету пера, а внутри она остается черной.

Это связано с тем, что в черепашьей графике языка 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, когда надо изменить не одну, а обе характеристики.

Задания для самостоятельной работы

  1. Выведите с помощью черепахи пятиконечную звезду, когда при рисовании отрезки пересекают друг друга. В код добавьте команды ее заливки. Какой окажется середина звезды?
  2. Запрограммируйте рисунок раскрашенного домика.
  3. Напишите код, при выполнении которого внутри залитой цветом фигуры появляется белое пятно.

Turtle. Программирование на Python для школьников




Все разделы сайта