2. Выбираем в качестве начальной точки для рисования р0 одну из точек Г0, Тр Т2 случайным образом.

1 В математической литературе прошлых лет эта фамилия переводится как Серпиньский. - Примеч. пер.

А_

Моя первая попытка

-1^.

Рис. 2.5. Простое созвездие точек Глава 2. Начальная стадия: рисование фигур Теперь будем выполнять итерационный процесс до тех пор, пока поле рисунка не будет заполнено в достаточной степени.

1. Выберем случайным образом одну из точек Т0, Т1У Т2и обозначим ее Т.

2. Вычислим следующую точку рк как середину1 отрезка между точкой Г и найденной ранее точкой рку Это означает, что рк является серединой отрезка, соединяющего точки рк1 и Т.

3. Рисуем точку рк с помощью функции о"га>/0от.().

Френсис Хилл

Рис. 2.7. Построение ковра Серпинского Рисунок 2.7, б отображает несколько итераций описанной процедуры. Пусть начальной точкой будет Т0, а следующей выбрана точка Г,. В этом случае точка pt ляжет посередине между рх и Г,. Пусть далее выбрана точка Т2, так чтор2 ляжет посередине между р, и Т2 Пусть далее опять выбрана точка Г,, так что р3 будет вычислена по приведенной схеме и т. д. Данный процесс продолжает создавать и рисовать точки (теоретически бесконечно), и на экране быстро появляется орнамент ковра Серпинского.

Представляется удобным определить простой класс GlintPoint, описывающий точку с целыми координатами2:

class GlintPoint: public:

Glint x. у:

}: Теперь создадим и инициализируем массив из трех точек Т[0], Т[1] и Т[2] для хранения в нем трех углов треугольника, используя

GlintPoint Т[ЗН(10.10). (300.30). (200.300)}

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

Для случайного выбора одной из точек T[i] используем выражение i=random(3). Функция randomO) возвращает с одинаковой вероятностью одно из значений: 0,1,2. Она определяется следующим образом3:


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