Листинг 9.3. Скелет программы для рисования тримино

void doTrio(double size, int depth) {
int i:
if (depth - 1) drawTrioO:

else for(i =0: i < 4: i++) // draw four children // рисуем четырех потомков {

set up for the i-th child: II подготавливаемся для i- го потомка

doTrio(size / 2. depth - 1): // draw child // рисуем потомка }

}

Текущее рисование в подпрограмме doTrioO, а также выполнение операторов, обозначенных словами «set up for the i-th child», может быть выполнено несколькими способами. Для некоторых форм более предпочтительна черепашья графика; такие формы рассматриваются ниже. Для других форм проще изменять систему координат путем управления текущим преобразованием, как это сделано в тематическом задании 9.2.

На рис. 9.24 показано тримино со своими четырьмя потомками; каждый из которых для удобства помечен. (Украшение в виде дерева сделано просто для ориентировки глаза.) На рисунке проиллюстрировано применение черепашьей графики: «каркас» тримино рисуется с помощью последовательности инструкций forwardO и turnO, начиная с правого нижнего угла, что показано зачерненным значком, обозначающим черепаху. Если же вначале требуется нарисовать потомков, то группа операторов «set up for the i-th child» вначале перемещает невидимую черепаху (без рисования) к одной из четырех начальных точек и затем поворачивает ее в нужном направлении. В ниже приведенных упражнениях будет дано задание реализовать такую подпрограмму.

Рисование тримино

Рис. 9.24. Рисование тримино

9.4. Замощение плоскости

Примеры тримино

Рис. 9.25. Примеры тримино: а) глубина = 3; б) глубина = 4; в) глубина = б На рис. 9.25 показаны примеры тримино, сгенерированные посредством кода, приведенного в листинге 9.3. Для случая depth - 6 окно выбрано так, что оно целиком лежит внутри объекта, поэтому это окно выглядит заполненным мозаикой.

Практические упражнения

9.4.6. Нахождение рептилий Для того чтобы поближе познакомиться с рептилиями, докажите каждое из приведенных ниже утверждений (позаимствовано из [Clason, 42]):


⇐ Предыдущая| |Следующая ⇒