Автор работы: Пользователь скрыл имя, 18 Ноября 2012 в 12:18, курсовая работа
Роль фракталов в машинной графике сегодня достаточно велика. Они приходят на помощь, например, когда требуется, с помощью нескольких коэффициентов, задать линии и поверхности очень сложной формы. С точки зрения машинной графики, фрактальная геометрия незаменима при генерации искусственных облаков, гор, поверхности моря. Фактически найден способ легкого представления сложных неевклидовых объектов, образы которых весьма похожи на природные. Однако, большинство людей, сталкиваясь с термином «фрактал» не могут себе его представить. Таким образом, тема данной курсовой работы может быть актуальна для широкого круга людей.
В качестве примера фрактальных структур мы рассмотрим множество или фрактал Мандельброта, как одного из наиболее ярких и интересных визуально фракталов.
При построение математических структур наряду с точностью важным фактором является скорость расчета точек и их построения. Данная система может за минимальное время построить фрактал Мандельброта в заданном масштабе, а при желании пользователя можно масштабировать участки фрактала, что позволяет более полно и точно понять принципы фрактальных структур.
1. Актуальность 3
2. Теоретическая часть по фракталу Мандельброта 4
3. Задача курсового проекта 6
4. Техническое задание 7
5. Назначение разработки 7
6. Основная часть 9
6. 1. Руководство программиста 9
6. 2. Руководство пользователя 14
Апробация 17
Список литературы 18
Критерий остановки цикла-крайняя точка поля выходит за пределы границы окружности радиусом начального размера поля. Одновременно с итерационными вычислениями проходит изменение состояния шкалы прогресса построения.
procedure TForm1.Button1Click(Sender: TObject);
var i, j, t, Time, Size, L: integer;// Создаем переменные, отвечающие за координаты, время, размер поля вывода и максимальный размер множества
p0, q0, p1, q1, p, q, x, y, xx: double;//Создаем переменные, отвечающие за координаты границ построения и масштабирования и расчет точек фрактала
begin
Time := 100;//Задаем время построения
Size := 550;//Задаем размер поля
L := 550;//Задаем размер максимального размера фрактала
p0 :=
StrToFloat(Edit1.Text);//
p1 := StrToFloat(Edit2.Text);// -//-
q0 := StrToFloat(Edit3.Text);// -//-
q1 := StrToFloat(Edit4.Text);// -//-
for i := 0 to Size - 1 do //Начинаем цикл
begin
p := p0 + i * (p1 - p0) / (Size - 1); //Вычисляем начальную координату построения по оси X
for j := 0 to Size - 1 do
begin
q:= q0 + j * (q1-q0) / (Size -1);//Вычисляем начальную координату по Y
x := 0;
y := 0;
t := 0;
repeat inc(t); //Суммирование t
xx := x*y;// Задаем промежуточную переменную
x := x*x-y*y+ p;//Вычисляем координату X на n-м шаге
y := 2*xx + q;//Вычисляем координату по Y на n-м шаге
until (x * x + y * y > L) or (t = Time);// Критерий остановки
if t = Time then Image1.Canvas.Pixels[i, j] := clNavy
else Image1.Canvas.Pixels[i, j] := RGB(250 - t div 2,
250 - t div 4, 250-t div 3) //Операция присвоения цвета точке
;
end;
ProgressBar1.Position := round(i * 100 / Size);//Положение строки прогресса построения
end;
end;
Функция масштабирования объекта.
Функция принимает информацию о том, какая кнопка мыши нажата и координату курсора во время нажатия. Если нажата левая кнопка, то начинается алгоритм масштабирования увеличения поля множества фрактала. Если правая кнопка-уменьшение.
Увеличение или уменьшение происходит путем перерасчета новых координат границ поля множества фрактала. Для увеличения изображения отрезки границ сжимаются, и наоборот для уменьшения. После перерасчета координат границ фрактал перестраивается.
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var p0, q0, p1, q1, x0, y0, x1, y1: double;//Задаем координатные переменные
begin
p0 := StrToFloat(Edit1.Text);
p1 := StrToFloat(Edit2.Text);
q0 := StrToFloat(Edit3.Text);
q1 := StrToFloat(Edit4.Text);
if Button = mbLeft then //В случае нажатия левой кнопки мыши
begin
x0 := p0 + (p1 - p0) * X / Image1.Width - (p1 - p0) / 4;//Переназначения масштабов построения
y0 := q0 + (q1 - q0) * Y / Image1.Height - (q1 - q0) / 4;
x1 := p0 + (p1 - p0) * X / Image1.Width + (p1 - p0) / 4;
y1 := q0 + (q1 - q0) * Y / Image1.Height + (q1 - q0) / 4;
Image1.Repaint;//Перестроение изображения
end
else//В случае нажатия правой кнопки мыши
begin
x0 := p0 + (p1 - p0) * X / Image1.Width - (p1 - p0);
y0 := q0 + (q1 - q0) * Y / Image1.Height - (q1 - q0);
x1 := p0 + (p1 - p0) * X / Image1.Width + (p1 - p0);
y1 := q0 + (q1 - q0) * Y / Image1.Height + (q1 - q0);
end;
Edit1.Text := FloatToStr(x0);//Вывод перерасчетных координат
Edit2.Text := FloatToStr(x1);
Edit3.Text := FloatToStr(y0);
Edit4.Text := FloatToStr(y1);
Button1.Click;
end;
После запуска программы пользователь может видеть данное окно:
Рисунок 2 – Внешний вид программы после запуска
Пользователь
может вводить с помощью
Рисунок 3 – Фрагмент поля «Матрица А»
Для построения фрактала нужно воспользоваться кнопкой «Построить фрактал» и дождаться, пока полоса прогресса не загрузится целиком.
Рисунок 4 – Кнопка «Построить фрактал» и линия прогресса построения
После этого изображение фрактала построится в поле формы окна.
Рисунок 5 – Фрактал
При желании мы можем увеличить или уменьшить интересующую нас область изображения, нажав левую или правую кнопку мыши соответственно:
Рисунок 6 – Масштабирование фрактала нажатием левой кнопкой мыши
Заметим,
что в полях ввода изменились
значения координат. Это координаты,
которые были вычислены после
нажатия кнопки мыши.
Апробация
Чтобы проверить точность работы программы, сравним полученное изображение с изображение фрактала Мандельброта из журнала Scientific American, 1985г.
Рисунок 7 - Изображение фрактала Мандельброта из журнала журнала Scientific American
Сравним с полученным нами изображением:
Рисунок 8-Изображение, полученное в нашей программе
Ответы совпадают с ответами, представленными в статье, можно сделать вывод о том, что программа выполняет правильный.
Список литературы
Информация о работе Фрактал мандельброта с масштабированием на Delphi