Алгоритм Fractal flames для чайников
Всем снова привет, с вами @meskalinerush.
Во-первых, нужно понять, что Алгоритм Fractal flames (в дальнейшем я называть его буду FFA) – это часть и член математических IFS (Iterated Function Systems – системы итерированных функций). Что же такое IFS?
В математике это достаточно сложные определения и построения, но мы ограничимся тем, что IFS – это метод построения фракталов, которые состоят из объединенных копий самих себя (от 1 до бесконечности). В свою очередь, копии самих себя преобразуются определенной функцией.
В примере, который используется везде для описания IFS, используется треугольник Серпинского. И это правильно, так как здесь понятие о IFS наиболее раскрыто наглядно.
***
В классическом итерационном методе построения треугольника сначала из середин сторон исходного треугольника строят серединный треугольник, далее его внутренность удаляется, и получаются 3 треугольника. Это первая итерация. Также поступают далее – строятся серединные треугольники получившихся трех треугольников, у них удаляются серединки – получается 9 треугольников (2 итерация). И так далее, пока хватит терпения))))
***
Грубо говоря, в IFS используется сжимающая функция для каждого треугольника. Треугольник сжат функцией и размножен (первая итерация состоит из трех треугольников). В дальнейшем та же функция сжимает эти три треугольника и снова размножает (вторая итерация получается из 9 треугольников). И так далее. Таким образом IFS использует линейные функции построения. Кстати, результат построения (картинка на плоскости) называется аттрактор. Можно сказать, что IFS использует функцию сжимающего преобразования на метрическом пространстве, которая равномерно уменьшает расстояние между двумя точками пространства. Если итерировать (множить) данный аффинный процесс преобразования (функцию) точки или изображения, то и получается алгоритм IFS.
Алгоритм FFA хотя и является частью IFS, использует несколько иное построение фракталов в дополнение к оригинальной IFS. В случае, если IFS построены из нелинейных функций, включая проективные преобразования и преобразования Мёбиуса, то такой алгоритм является FFA. Но не всегда, так как существует еще несколько алгоритмов.
Алгоритм FFA отличается тем, что использует:
- нелинейные функции вместе с аффинными преобразованиями классической IFS;
- цвет по структуре вместо монохромного или цвета по плотности (если IFS использует для построения монохром, то использование FFA делает фрактал более привлекательным для восприятия также за счет расширения видимой части фрактала);
- лог отображения плотности вместо линейного или двоичного (форма tone mapping, а тональные диапазоны сокращают динамический диапазон).
Таким образом, FFA имеет некоторое преимущество перед использованием обычных IFS. Практически все генераторы фракталов обязаны этим Скотту Дрейвсу, который написал этот алгоритм еще в 1982 году. Добавим к этой процедуре аффинных и нелинейной трансформаций алгоритм рендеринга, гамма-коррекцию и - вуаля! - наш фрактал готов!
Если применять данную процедуру к небезызвестному Apophysis 7X, то плагины с расширением .dll, написанные на Си или C++, есть не что иное, как нелинейные преобразования к обычным аффинным трансформациям. Гамма-коррекция и операции с цветом также знакомы по окну Adjustment и вкладке Rendering.
Краткий экскурс в FFA окончен. Если я в чем-то неправ, прошу поправить, так как я описал только то, к чему пришел сам, без особого погружения а алгоритмы и математические дебри фрактальной геометрии. Если же кому-то стало интересно – добро пожаловать в мир высоких технологий: алгоритм Fractal flame от Скотта Дрейвса всегда можно нарыть в сети, почитать (!!нужен английский!!) и сделать самостоятельные выводы.
Пост подготовил @meskalinerush для сообщества Fractal