Пример 3.5.2. Создание фигуры из мотива крючка Стилизованный «крючок» из трех частей, показанный на рис. 3.23, а, можно нарисовать с помощью следующих команд:
forward(3 * L. 1):
// L is the length of the short sides // L - ото длина коротких участков
Дополнительные инструменты для рисования
ишпОО): тогоагсК!.. 1): т.игп(90); т"оги/агсК1.. 1): гигп(90): где параметром является длина коротких отрезков Ь. Пусть все эти команды инкапсулированы в процедуре поокО. Тогда фигура на рис. 3.23, б будет начерчена путем четырехкратного повторения поокО. Этот рисунок можно как угодно размещать и ориентировать посредством выбора начальных значений СРиСО.
Рис. 3.23. Построение рисунка, состоящего из нескольких движений черепахи Пример 3.5.3. Полиспирали С помощью черепашьей графики легко генерировать большое семейство симпатичных фигур, называемых полиспиралями (polyspirals). Полиспиралью называется ломаная линия, каждый последующий отрезок которой больше (или меньше) предыдущего на постоянную величину, причем этот последующий отрезок повернут по отношению к предыдущему на некоторый постоянный угол. Полиспираль формируется с помощью следующего псевдокода:
forCsome number of itérations)
// для некоторого количества итераций
{
forward(length.l); // draw a line in the current direction // рисуем отрезок в текущем направлении
turn(angle): // turn through angle degrees // поворачиваем на angle градусов
length +» incrément: // incrément the line length // увеличиваем длину прямой на incrément }
Каждый раз при рисовании прямой увеличиваются и длина, и угол поворота. Если incrément равен нулю, то фигура ни растет, ни сжимается. На рис. 3.24 изображено несколько полиспиралей. Реализация приведенной выше подпрограммы предлагается в виде упражнения.
Практические упражнения
3.5.1. Рисование фигур с помощью черепахи Напишите подпрограммы, использующие движения черепахи для рисования следующих трех фигур, изображенных на рис. 3.25. Может ли черепаха нарисовать форму на рис. 3.25, в без «подъема пера» и без повторного рисования хотя бы одной прямой?