Добавим к повороту и симметрии два новых преобразования: одно из них позволяет изменять ширину и высоту фигуры в разных пропорциях, другое — поворачивать оси координат на разные углы. Получим множество преобразований, которые называются аффинными преобразованиями плоскости. Первое из этих двух преобразований позволяет трансформировать квадрат в треугольник, а с помощью второго, которое называется сжатием, можно превратить квадрат в ромб. Фрактальные структуры, которые можно получить с помощью подобных преобразований, называются самоаффинными. К ним относится очень известный «папоротник Барнсли», открытый британским ученым Майклом Барнсли. Можно заметить, что для его построения требуется четыре аффинных преобразования, одно из которых заключается в сжатии по ширине до нуля (так формируется стебель), второе, примененное трижды, — комбинация сжатия и поворота (представлено на рисунке), с помощью которого получаются ветви.
Используя эти преобразования, можно построить множество различных фракталов, которые называются линейными фракталами или системами итерируемых функций (от английского IFS — Iterated Function Systems). Эти системы получаются путем применения ряда преобразований к некоему множеству. Согласно формулировке, введенной Барнсли в книге «Фракталы повсюду», система итерируемых функций — это система функций, задающих определенное преобразование, которое затем выполняется на протяжении множества итераций. Результатом применения этих преобразований является так называемый аттрактор. Другими словами, аттрактор системы итерируемых функций — это форма, к которой стремится фрактал, когда указанные преобразования повторяются достаточно большое число раз. Может показаться удивительным, но аттрактор не зависит от изначально выбранной исходной фигуры, на которой строится фрактал. Все фракталы, о которых мы рассказали в этой книге, можно построить, используя это множество преобразований.
Попробуем использовать систему итерируемых функций, чтобы описать кривую дракона, о которой рассказано в предыдущей главе. Несмотря на внешнюю сложность этой кривой, для ее построения нужно всего два преобразования. Чтобы показать, что форма итоговой кривой не зависит от исходного множества, построим кривую дракона сначала на основе отрезка, а затем на основе некоторой фигуры.
В случае с отрезком будем для простоты считать его длину равной единице. Сначала уменьшим отрезок в 1/√2 раз и повернем его на 45° против часовой стрелки. Поместим левый конец отрезка в точку с координатами (0, 0). Затем снова уменьшим исходный отрезок в 1/√2 раз и повернем его на 135° снова против часовой стрелки, поместив правый конец полученного отрезка в точку с координатами (1,1).
Нетрудно заметить, что полученные отрезки соприкасаются концами в верхней точке. Это возможно благодаря тому, что мы подобрали коэффициент уменьшения так, что отрезки образуют половину квадрата, разрезанного по диагонали. Применив эти же преобразования к кривой, полученной на первой итерации, получим следующую итерацию кривой дракона и так далее. Заметьте, насколько быстро кривая, полученная на промежуточных итерациях, приближается по форме к итоговой кривой дракона.
(Источник:
Во втором случае выберем в качестве исходной фигуры изображение щенка далматинца, которых в итоге станет 101, а может быть, и больше. Построение кривой дракона в этом случае будет аналогично построению на основе отрезка.
(Источник:
Мы увидели, как с помощью систем итерируемых функций можно получить некоторые классические фракталы, и показали, как при последовательном выполнении аффинных преобразований формируется некий аттрактор. Тем не менее по-настоящему интересно то, что для любого изображения можно описать систему итерируемых функций, аттрактором которой будет данное изображение. Другими словами, мы решим обратную задачу фрактальной геометрии.
В этом смысле одним из важнейших открытий является теорема коллажа, которую сформулировал Барнсли в 1985 г. Допустим, дано некоторое множество