Черепашья графика
Черепа́шья гра́фика — принцип организации библиотеки графического вывода, построенный на метафоре Черепахи[1], воображаемого (а в некоторых экспериментах и реального) роботоподобного устройства, которое перемещается по экрану или бумаге и поворачивается в заданных направлениях, при этом оставляя (или, по выбору, не оставляя) за собой нарисованный след заданного цвета и ширины.
Базовые принципы
Впервые, по-видимому, черепашья графика была применена при реализации языка программирования Лого, в дальнейшем использовалась в ряде графических библиотек и систем программирования.
Фактически используется управление рисованием в полярной системе координат, связанной с текущим положением черепахи.
Базовые команды:
- повернуть направо / повернуть налево (на указанный угол)
- переместиться вперёд / переместиться назад (на указанное расстояние, обычно в условных «шагах», часто равных по длине размеру пикселя экрана)
- поднять перо / опустить перо
- установить новый цвет пера / установить новую толщину пера
- установить новый курс / установить новое место (поворот и перемещение относительно базовой Декартовой системы координат листа)
- стереть всё
- показать черепаху / спрятать черепаху
- получить значения текущих координат, угла поворота черепахи, цвета и толщины пера
В системах, поддерживающих работу с несколькими черепахами, обычно есть команды
- добавления и удаления черепахи
- задания черепахе имени и обращения к ней по имени
- назначения черепахе команд, выполняемых черепахой асинхронно, в автономном режиме
- перемещения черепахи на задний/на передний план
В системах, нацеленных на детей, например, в системе ЛогоМиры, есть возможность менять внешний вид черепахи, заменяя её стандартный вид на картинку из комплекта поставки или на нарисованную вручную. Кроме того, изображение черепахи можно делать крупнее или мельче, а также отпечатывать на листе или наоборот, копировать с листа.
Одним из применений черепашьей графики являются L-системы[2], предоставляющие механизм для визуализации фрактальных кривых.
Примеры
В качестве примера рассмотрим рисование в начале координат квадрата со стороной в 100 точек в «обычной» графике:
line (0, 0, 0, 100); line (0, 100, 100, 100); line (100, 100, 100, 0); line (100, 0, 0, 0);
то же самое в черепашьей графике, на языке Лого:
repeat 4 [forward 100 right 90]
Обобщить данный пример для случая N-угольника в «обычной» графике уже довольно затруднительно, в то время как в черепашьей графике это так же просто:
repeat :N [forward 100 right 360/:N]
Пример рисования квадрата на языке Python
import turtle
for i in range(4):
turtle.forward(50)
turtle.left(90)
Примечания
- Николов Р., Сендова Е. Начала информатики. Язык Лого / Под ред. Б. Сендова, Пер. с болг. Под ред. А. В. Гиглавого. М.: Гл. ред. физ.-мат. лит., 1989. ISBN 5-02-013998-X
- Моделирование растений при помощи L-систем