Матрица статей        Список статей        Всячина        Контакты       

Фрактальные строки

Многие, кто бродил по просторам сети Интернет, наверное видели т. н. фрактальные строки, в которых каждая буква состоит из уменьшенных копий самой строки. Пример такой строки приведен ниже:

Фрактальная строка

Рассмотрим, как можно получить подобные изображения.

Будем пользоваться алгоритмом СИФ, при этом сжимающие отображения будут аффинными преобразованиями плоскости. Как известно, аффинное преобразование плоскости задается двумя тройками точек и (при этом точки каждой тройки не лежат на одной прямой) такими, что .

Первой тройкой точек для всех преобразований являются точки ( — высота строки, — длина строки):

Требуя, чтобы строка помещалась в единичном квадрате, и замечая, что длина строки, как правило, больше высоты строки, получаем следующую тройку точек:
Полагая, что , в итоге получаем:
Такие действия необходимы, так как длину строки можно определить только тогда, когда задана сама строка.

Вторая тройка точек для каждого преобразования различна и получается следующим образом. Каждую букву представим как объединение параллелограммов, в которые и переходит вся строка при преобразовании:

Фрактальная строка Фрактальная строка

Три вершины параллелограмма из четырёх и будут искомой тройкой точек

При этом, конечно, параллелограм уменьшен в раз и сдвинут на вправо ( — ширина каждой буквы, — промежуток между буквами, так как каждая буква первоначально задана около начала координат и её высота равна ).

Теперь, зная все шесть точек, находим аффинное преобразование из системы:

В этой системе полагаем, что
, , и перегруппировываем:
Используя, что
получаем систему для вычисления коэффициентов аффинного преобразования:

Ниже находится аплет, который реализует данный алгоритм. В конце страницы Вы найдёте ссылки на исходный код аплета и на реализацию алгоритма на Pascal'е.

Скачать:

Смотрите также: