Реализация фракталов в информатике
Курсовая работа, 01 Мая 2012, автор: пользователь скрыл имя
Краткое описание
Фракталы – геометрические самоподобные объекты с нецелыми коэффициентами размерности.То есть некоторая часть этого объекта в точности повторяет форму целого, но имеет размер в нецелое количество раз меньший.
По построению фракталы можно разделить на геометрические и алгебраические.
По закономерности повторений фракталы можно разделить на симметричные и стохастические.
Вложенные файлы: 1 файл
Реализация фракталов в информатике.docx
— 248.68 Кб (Скачать файл)- Программа работает с фракталами вида (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