На рис. 2.5 изображен узор из восьми точек, представляющих собой Большую Медведицу - привычное созвездие на ночном небе.

Названия и местоположения этих восьми звезд Большой Медведицы (при одном определенном виде ночного неба) - Дубхе, Мерак, Фекда, Мегрец, Алиот, Мицар, Алькор, Бенетнаш (Алькаид) - задают2.2. Рисование основных графических примитивов ся посредством следующих упорядоченных троек: {Dubhe, 289,190}, {Merak, 320,128}, {Phecda, 239,67}, {Megrez, 194,101}, {Alioth, 129,83}, [Mizar, 75,73}, {Alcor, 74, 74}, {Alkaid, 20,10}. Поскольку данных для точек очень мало, проще внести их в явный список или «вмонтировать» («hardwire») в код. (Если требуется нарисовать много точек, то удобнее записать их в файл и заставить программу читать их из файла и рисовать; позже в данной главе мы проделаем это.) Эти точки могут заменить собой те три точки, которые задавались в листинге 2.5. Полезно поэкспериментировать с этим созвездием точек, задавая различные размеры точек, цвет фона и линий.

Пример 2.2.2. Рисование ковра Серпинского (Sierpinski gasket)

На рис. 2.6 изображен ковер Серпинского1. Совокупность точек для него генерируется процедорно. Это означает, что каждая последующая точка определяется некоторым процедурным правилом. Хотя этот закон в данном случае весьма прост, результирующий орнамент является фракталом (fractal) (см. главу 9). Сначала выведем правило построения ковра Серпинского чисто интуитивным путем. В тематическом задании 2.2 мы увидим еще один образец системц итерироемир фонкций {iterated function system).

Ковер Серпинского рисуется посредством многократного вызова функции с!га\ЛМ() с координатами точек (х0,у0), (х^у^, {х2,у2)…, задаваемых с помощью простого алгоритма. Обозначим £-ю точку рк~ (хк,ук). Каждая следующая точка зависит от предыдущей точкирк_у Процедура вычисления точек заключается в следующем:

1. Выбираем три фиксированные точки Т0, Г,, Т2, так чтобы они составили некоторый треугольник, как показано на рис. 2.7, а.


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