- Программа
работает с фракталами вида (Zn+Ck)
* Vm
- Далее выставляются
значения действительной и мнимой частей
чисел Z0, C и VМинус означает, что действительная
или мнимая часть этого числа будет определяться
соответственно действительной или мнимой
частью точки A, принадлежность которой
к фракталу будет определяться
- Так же выставляются
значения n,k,m, которые здесь считаются
целыми, хотя ничто не мешает мне изменить
программу так, чтоб они были не обязательно
целыми.
- Далее следуют
значения, которые определяют, какой прямоугольный
кусок комплексной плоскости будет показан
на рисунке. Эти значения X,Y левого верхнего
угла и X,Y правого нижнего угла. Ничто не
мешает сделать координату Y нижнего угла
больше координат верхнего, или координату
X левого больше, чем правого, - в таком
случае изображение просто будет отражённым.
- Iterations – параметр,
который показывает, через сколько итераций
компьютер, всё ещё не получивший «бесконечность»
решит, что никогда её и не получит и объявит
точку чёрной.
- Infinity – параметр,
который показывает, какой модуль является
«бесконечностью», то есть, если в какой-то
момент Zi по модулю больше этого
параметра, компьютер решает, что оно далее
улетит в бесконечность. Причём номер
этого Zi, то есть i, он запоминает.
- Далее следует
система окраски. В зависимости от того,
на какой итерации Zi превысило infinity,
у него выбирается цвет от 1 до iterations. Какие
именно это цвета регулируется здесь.По
умолчанию выбрана система RGB, т.е. для
каждой компоненты цвета распределяются
равномерно: т.е. для 30 итераций:
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
… |
R |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
… |
G |
9 |
17 |
26 |
34 |
43 |
51 |
60 |
68 |
… |
B |
3 |
7 |
10 |
13 |
17 |
20 |
23 |
27 |
… |
Если
поставлена галочка FFFFFF system of color, то
RGB переводится в 16-ричный код, который
равномерно делится на iterations частей.
- Crazy paint. Пожалуй,
самая бессмысленная, но самая сложная
в понимании галочка. Дело в том, что когда
для некоторого A мы считаем его ряд Z0,
Z1, Z2, … Ziterations, то если
A=Z0, то существует некое A’ = Z1(A),
у которого Z1(A’) = Z2(A), Z2 (A’) = Z3(A) и т.д.То
есть попутно, определяя цвет точки A, можно
определить цвета точек A’, A’’, A’’’,
и т.д.: если у A итерация вылета равна 17,
то у A’ – 16, у A’’ – 15 и т.д. Правда, если
A не уходит в бесконечность, никто не гарантирует,
что A’ следующей итерацией туда не вылетит
(хотя это, по сути, значит, что A тоже бы
вылетело в бесконечность, будь iterations
больше, но здесь обратная зависимость,
что довольно некрасиво реализуемо). Поэтому
если A=Z0, то картинку можно нарисовать
быстрее и довольно красивыми россыпями
точек, а не унылым «слева направо». Но
если Z0 не равно A, то красивыми россыпями
будет рисоваться что-то совсем не то,
что нужно, но тоже порой красиво. Поэтому
галочка и называется Crazy paint.
- Current location.
Эти панели показывают действительную
и мнимую части комплексной точки, на которую
указывает указатель мыши, если он внутри
рисунка.
- Выпадающее
меню модулей. Дело в том, что модуль комплексного
числа можно определить не только как
, но и, например, как
Для
удобства Re(Z) обозначено за X, Im(Z) – за Y.Тогда
определяться, когда Zi стало больше
infinity по модулю, будет несколько иначе,
и раскраска будет несколько другая.
- Следующая
панель имеет в виду, что если правой кнопкой
мыши щёлкнуть по какой-то точке на рисунке,
её координаты (т.е. x=Re(Z) и y=Im(Z)) попадут
в поля ввода координат точки C, Координаты
точки Z0 заполнятся минусами, координаты
прямоугольника рисунка станут (-2;-2), (2;2),
поставится галочка Crazy paint.
- Следующая
панель говорит о том, что если выделить
прямоугольной рамкой кусочек рисунка,
он незамедлительно начнёт рисоваться
уже в увеличенном масштабе вместо целого
рисунка.
- Последняя
панель – мой копирайт.
Для
реализации всех этих функций я написал
некоторое количество функций, которые
выполняют действия над комплексными
переменными (хотя аналогичные, есть в
некоторых библиотеках). Присутствуют
функции xm, ym, которые восстанавливают
соответствующие координаты на мониторе
в соответствии со значениями координат
прямоугольника рисунка, и обратные им
xr и yr, которые восстанавливают значение
комплексного числа по его координате
на экране. Написано множество функций
для реализации того, что указано выше,
в общем, ясно как они пишутся. Основная
процедура, вызываемая кнопкой Paint, просто
перебирает все пиксели, переводит их
в реальные xr и ym, для них выполняет итеративный
процесс (с некоторыми коррекциями в случае
Crazy paint). После того, как рисуется линия
для одного xm, делается Refresh, чтобы вывести
это на форму, чтоб процесс рисования был
виден для пользователя. В качестве небольшой
оптимизации по времени, значения из всех
полей с формы дублируются локальными
переменными. Буфер не используется, хотя
можно было бы. Система Windows иногда излишне
перегружена непонятно чем, и вместо того,
чтоб рисовать, особенно если выбран Crazy
paint, особенно, если ресурсы компьютера
не такие уж хорошие, предпочитает дождаться,
пока изображение дорисуется в оперативной
памяти, а уж потом выводить его на экран,
что есть печально.
Фракталы
поражают своей красотой, примеры
программ и принтскринов работы программ,
находятся в этой же папке. Если что-то
непонятно или интересует - могу объяснить.
Размещено
на Allbest