на главную страницу |
||
Фракталы Мартынов Сергей
Александрович
|
Download and Install by Self-Extracting It's free, It's easy. |
|
Реализован
метод, позволяющий построить следующие фракталы:
Из дополнительных возможностей
реализовано:
Система программирования:
Borland C++ Builder 3.0 Метод: Последовательность комплексных
чисел вычисляется по рекуррентной формуле:
z(n+1) = k1*zn^p1 +
k2*zn^p2 + k0*z0^p0 + c,
где: z(n+1)
- вычисляемый член последовательности
zn - предыдущий член k1, k2, k0 - вещественные числа p1, p2, p0 - целые числа c - комплексное число z0 - первый член последовательности Область изображения - произвольный прямоугольник на комплексной плоскости, который задается координатами его центра, размерами и углом поворота относительно центра - всего 5 вещественных чисел. Для каждой точки изображения просчитывается не более Iterations (целый параметр) членов последовательности. Последовательность считается расходящейся, если модуль очередного члена превысил Limitation (вещественный параметр), и считается сходящейся, если модуль разности соседних членов стал меньше вещественного параметра Tolerance. В зависимости от номера члена, на котором выяснилась сходимость последовательности, выбирается цвет точки. Раскраска задается пользователем на специально разработанном органе управления GradientBar. Интерфейс программы: Программа использует стандартный интерфейс windows. При запуске программы по умолчанию включен режим вывода подсказок (hints). Текущие настройки, относящиеся к виду фрактального изображения (то есть коэффициенты формулы, область изображения и параметры раскраски) могут быть сохранены в конфигурационном файле (FractGen.ini - он ищется в текущем каталоге). Выбор сохраненного набора параметров из списка и его загрузка осуществляется двойным щелчком мыши. В каталоге с программой находится конфигурационный файл с 20 предустановками параметров, соответствующих различным фрактальным картинкам. Многие из них лучше смотрятся в большом разрешении - советую просчитать их в размере, скажем, 700x600 (кнопка "Render..."). Если программа не может найти
конфигурационный файл (или он поврежден), NB: Этого не должно произойти, так как в файле FractGen.ini заключается немалая часть работы над заданием! Анимация сохраняется как
последовательность файлов с именами baseXXXX.bmp в заданном каталоге,
где base - строка, заданная пользователем, XXXX - шестнадцатеричный
номер кадра. На GradientBar можно левой кнопкой мыши двигать существующие и добавлять новые точки, правой кнопкой - изменять цвет существующих точек. При работе программы (при вычислениях) в строке состояния выводится количество выполненной работы в процентах и предполагаемое время завершения работы. Заметки по реализации: Возведение в степень реализовано не через функцию pow (которая работает весьма медленно), а путем многократного умножения - этот метод дает ощутимый прирост производительности, так как обычно используются небольшие значения степени. Для раскраски применяется придуманный мной алгоритм, вот его краткое описание: на отрезке [0; 1] пользователь в нескольких точках задает цвет. В качестве цвета в остальных точках отрезка берется среднее взвешенное всех заданных цветов, где каждый весовой коэффициент обратно пропорционален расстоянию от точки, в которой задан цвет, до точки, в которой вычисляется значение цвета. При рисовании фрактала, если вычисления последовательности в данной точке прервалось на i-ой итерации, то точка закрашивается цветом, соответствующим точке i/maxIt на отрезке цветов [0; 1]. Замечу, что этот метод можно применять не только на отрезке, но и в пространстве любой размерности. Оптимальная формула для вычисления следующая: color(r) = sum(i=1..N,
k(i)*color(i)) / sum(i=1..N, k(i)), где: Можно заметить, что при таком выборе коэффициентов производная "цвета" обращается в 0 в точках задания цвета. Еще одним дополнением является алгоритм сглаживания (переключатель Smooth) резких границ изображения, которые возникают из-за дискретности счетчика итераций. Для сглаживания границ оценивается, насколько модуль очередного члена последовательности "убежал" за установленное предельное значение, и вводится "поправка" (от 0 до 1) к счетчику итераций. Параметры компиляции: Программа откомпилирована Borland C++ Builder 3.0 без runtime libraries, то есть для запуска (по идее необходимы всего два файла: FractGen.exe и FractGen.ini. При компиляции было разрешено использование инструкций процессора Pentium.
|
WBR, Сергей Мартынов, smarts@beep.ru