Фрактал мандельброта с масштабированием на Delphi

Автор работы: Пользователь скрыл имя, 18 Ноября 2012 в 12:18, курсовая работа

Краткое описание

Роль фракталов в машинной графике сегодня достаточно велика. Они приходят на помощь, например, когда требуется, с помощью нескольких коэффициентов, задать линии и поверхности очень сложной формы. С точки зрения машинной графики, фрактальная геометрия незаменима при генерации искусственных облаков, гор, поверхности моря. Фактически найден способ легкого представления сложных неевклидовых объектов, образы которых весьма похожи на природные. Однако, большинство людей, сталкиваясь с термином «фрактал» не могут себе его представить. Таким образом, тема данной курсовой работы может быть актуальна для широкого круга людей.
В качестве примера фрактальных структур мы рассмотрим множество или фрактал Мандельброта, как одного из наиболее ярких и интересных визуально фракталов.
При построение математических структур наряду с точностью важным фактором является скорость расчета точек и их построения. Данная система может за минимальное время построить фрактал Мандельброта в заданном масштабе, а при желании пользователя можно масштабировать участки фрактала, что позволяет более полно и точно понять принципы фрактальных структур.

Содержание

1. Актуальность 3
2. Теоретическая часть по фракталу Мандельброта 4
3. Задача курсового проекта 6
4. Техническое задание 7
5. Назначение разработки 7
6. Основная часть 9
6. 1. Руководство программиста 9
6. 2. Руководство пользователя 14
Апробация 17
Список литературы 18

Вложенные файлы: 1 файл

Курсовая работа ТРПО Баталов Д. С..docx

— 929.79 Кб (Скачать файл)

Критерий  остановки цикла-крайняя точка  поля выходит за пределы границы  окружности радиусом начального размера  поля. Одновременно с итерационными вычислениями проходит изменение состояния шкалы прогресса построения.

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 – Внешний вид программы после  запуска

Пользователь  может вводить с помощью клавиатуры границы поля координат в соответствующие  поля X,min; X,max; Y,min; Y,max».

Рисунок 3 – Фрагмент поля «Матрица А»

Для построения фрактала  нужно воспользоваться  кнопкой «Построить фрактал» и дождаться,  пока полоса прогресса не загрузится целиком.

Рисунок 4 – Кнопка «Построить фрактал» и линия прогресса построения

После этого  изображение фрактала построится в  поле формы окна.

Рисунок 5 – Фрактал

При желании  мы можем увеличить или уменьшить  интересующую нас область изображения, нажав левую или правую кнопку мыши соответственно:

Рисунок 6 – Масштабирование фрактала нажатием левой кнопкой мыши

Заметим, что в полях ввода изменились значения координат. Это координаты, которые были вычислены  после  нажатия кнопки мыши. 

Апробация

Чтобы проверить  точность работы программы, сравним  полученное изображение с изображение  фрактала Мандельброта из журнала Scientific American, 1985г.

Рисунок 7 - Изображение фрактала Мандельброта из журнала журнала Scientific American

Сравним с  полученным нами изображением:

Рисунок 8-Изображение, полученное в нашей программе

Ответы  совпадают с ответами, представленными  в статье, можно сделать вывод  о том, что программа выполняет  правильный.

 

Список литературы

  1. Бобровский С.И. Delphi 7. Учебный курс – М.: Питер. 2004, – 736 с. – ISBN 5-8046-0086-9
  2. Бугров Я.С., Никольский С.М.Высшая математика – Учебник для вузов – М.: Дрофа. 2004, – 288 с. – ISBN 5-7107-8420-6
  3. Ильин В.А., Позняк Э.Г. Линейная алгебра. Учебник для вузов – М.: ФИЗМАТЛИТ. 2002,–320 с.– ISBN 5-9221-0129-3
  4. Культин Н.Б.Delphi в задачах и примерах – М.: БХВ-Петербург. 2012, – 288 с. – ISBN 978-5-9775-0811-7
  5. Фаронов В.В. Delphi. Программирование на языке высокого уровня – М.: Питер. 2004, – 640 с. – ISBN 5-8046-0008-7

 

 


Информация о работе Фрактал мандельброта с масштабированием на Delphi