Построение фракталов на языках программирования

Автор работы: Пользователь скрыл имя, 25 Мая 2013 в 09:24, контрольная работа

Описание работы

Разрабатываемое приложение предназначено для демонстрации построения простейших фракталов.
Данное приложение может быть востребовано преподавателями и студентами высших учебных заведений.

1.2 Технические характеристики
Данное приложения может работать не только под операционной системой Windows, но и под NIX системами с помощью эмулятора Windows-приложений Wine.

Файлы: 1 файл

Курсовая.doc

— 724.50 Кб (Скачать файл)
    1. Назначение и область применения

 

Разрабатываемое приложение предназначено  для демонстрации построения простейших фракталов.

Данное приложение может быть востребовано преподавателями и студентами высших учебных заведений.

 

1.2 Технические характеристики

Данное приложения может работать не только под операционной системой Windows, но и под NIX системами с помощью эмулятора Windows-приложений Wine.

 

1.2.1 Постановка задачи

Целью курсовой работы заключается в разработке приложения под Windows, позволяющее демонстрировать построение фракталов Мандельброта и Жуля. Такая программа должна быть проста в использовании.

Разрабатываемое приложение должно содержать  форму с кнопками выбора вида фрактала и областью, где будет отображаться результат. Выбор любого из видов фракталов должен приводить к построению заранее указанного фрактала и отображению его в рабочей области.

 

1.2.2 Описание  алгоритма

После запуска приложения пользователь видит форму на которой расположены  кнопки выбора какой фрактал будет  построен, пустую область, занимающую большую часть формы (в ней будет отображаться результат выбора),строка редактирования где вводится имя файла для сохранения и кнопка «Сохранить». После того как пользователь выберет интересующий его фрактал, в рабочей области будет построен фрактал.

 

1.2.3 Выбор состава технических и программных средств

При разработке данного приложения была выбрана среда программирования Delphi 7. Ядром среды Delphi является язык программирования Object Pascal. Данная среда программирования была выбрана, т.к. она является объектно-ориентированной.

 

1.3 Разработка внешнего вида приложения

Интерфейс приложения должен быть наиболее удобным и простым в использовании, поэтому все компоненты на форме будут находиться на компонентах TPanel. Особой роли такое размещения не имеет, но это было сделано для удобства расположения рабочих компонентов в момент создания приложения.

 

Рисунок 1. Внешний  вид запущенного приложения

При запуске приложения не строится ни один фрактал, т.к. чтобы вывести нужный фрактал нужно нажать на кнопку в левом верхнем углу с его названием.

 

Рисунок 2. Выбор и вывод результата

Нажатие на другую кнопку приведет к  тому, что в рабочей области  отобразится другой фрактал:

Рисунок 3. Результат смены выбора

Если перемещать бегунки, которые находятся слева от рабочей области, и повторно нажать на кнопку с названием фрактала, результатом будет тот же самый фрактал, но уже в другой цветовой гамме:

Рисунок 4. Результат смены цветовой гаммы

Если возникнет необходимость  сохранения фрактала в виде графического изображения, то в поле ввода, которое находится в левом нижнем углу,  нужно ввести название файла и нажать кнопку «Сохранить». По умолчанию имя файла имеет значение «fractal». После нажатия кнопки, приложение сохраняет то, что отображено в рабочей области в формате jpg 

 

2.1 Конструирование Windows-окна

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 5 Внешний вид приложения с подписанными компонентами

 

 

№ п/п

Компонент

Назначение

1

Form1

 

2

Button1

Сохранение фрактала в файл

3

Button2

Фрактал Мандельброта

4

Button3

Фрактал Жуля

5

Button4

Фрактал Жуля

6

Button5

Выход из приложения

7

SpeedButton1

Значения по умолчанию

8

Edit1

Начальные значения

9

Edit2

10

Edit3

11

Edit4

12

Edit5

Поле ввода имени  файла для сохранения фрактала

13

Edit8

Значения для определения  цветовой гаммы в системе RGB

14

Edit9

15

Edit10

16

RadioButton1

Определение начальных координат для фрактала Мандельброта

17

RadioButton2

Определение начальных координат для фрактала Жулиа

18

RadioButton3

Определение начальных координат для второго фрактала Жулиа

19

Image1

Поле построения фрактала




Таблица 1. Назначение компонентов  главной формы

 

Таблица 2. Изменённые свойства компонентов  главной формы

№ п/п

Компонент

Свойства

1

Form1

Left = 265

  Top = 234

  Width = 811

  Height = 722

  Caption = ‘Фрактал’

  Color = clBtnFace

  Font.Charset = DEFAULT_CHARSET

  Font.Color = clWindowText

  Font.Height = -11

  Font.Name = 'MS Sans Serif'

  Font.Style = []

  OldCreateOrder = True

  Position = poScreenCenter

  Scaled = False

  OnCreate = FormCreate

  PixelsPerInch = 96

  TextHeight = 13

2

Button1

Left = 144

      Top = 8

      Width = 75

      Height = 25

      Caption = 'Сохранить'

      TabOrder = 1

      OnClick = Button1Click

3

Button2

Left = 0

      Top = 0

      Width = 81

      Height = 33

      Caption = 'Мандельброт'

      TabOrder = 0

      OnClick = Button2Click

4

Button3

Left = 80

      Top = 0

      Width = 75

      Height = 33

      Caption = 'Жулиа'

      TabOrder = 1

      OnClick = Button3Click

5

Button4

Left = 154

      Top = 0

      Width = 73

      Height = 33

      Caption = 'Жулиа 2'

      TabOrder = 4

      OnClick = Button4Click

6

Button5

Left = 256

      Top = 8

      Width = 75

      Height = 25

      Caption = 'Выход'

      TabOrder = 2

      OnClick = Button5Click

7

SpeedButton1

Left = 48

      Top = 256

      Width = 121

      Height = 33

      Hint = 'Установки  по умолчанию'

      Caption = 'Default'

      ParentShowHint = False

      ShowHint = True

      OnClick = SpeedButton1Click

8

Edit1

Left = 48

      Top = 124

      Width = 121

      Height = 21

      TabOrder = 3

      Text = 'Edit1'

9

Edit2

Left = 48

      Top = 156

      Width = 121

      Height = 21

      TabOrder = 1

      Text = 'Edit2'

10

Edit3

Left = 48

      Top = 188

      Width = 121

      Height = 21

      TabOrder = 2

      Text = 'Edit3'

11

Edit4

Left = 48

      Top = 224

      Width = 121

      Height = 21

      TabOrder = 0

      Text = 'Edit4'

12

Edit5

Left = 8

      Top = 12

      Width = 97

      Height = 21

      TabOrder = 0

      Text = 'fractal'

13

Edit6

Left = 392

      Top = 10

      Width = 121

      Height = 21

      Hint = 'C_imag'

      ParentShowHint = False

      ShowHint = True

      TabOrder = 2

      Text = '0,6'

      Visible = False

14

Edit7

Left = 264

      Top = 10

      Width = 121

      Height = 21

      Hint = 'C_real'

      ParentShowHint = False

      ShowHint = True

      TabOrder = 3

      Text = '-0,5'

      Visible = False

15

Edit8

Left = 96

      Top = 336

      Width = 81

      Height = 21

      TabOrder = 10

      Text = 'Edit8'

      OnChange = Edit8Change

16

Edit9

Left = 96

      Top = 400

      Width = 81

      Height = 21

      TabOrder = 11

      Text = 'Edit9'

      OnChange = Edit9Change

17

Edit10

Left = 96

      Top = 472

      Width = 81

      Height = 21

      TabOrder = 12

      Text = 'Edit10'

      OnChange = Edit10Change

18

RadioButton1

Left = 32

      Top = 24

      Width = 113

      Height = 17

      Caption = 'Мандельброт'

      Checked = True

      TabOrder = 8

      TabStop = True

      OnClick = RadioButton1Click

19

RadioButton2

Left = 32

      Top = 48

      Width = 113

      Height = 17

      Caption = 'Жулиа'

      TabOrder = 9

      OnClick = RadioButton2Click

20

RadioButton3

Left = 32

      Top = 72

      Width = 65

      Height = 17

      Caption = 'Жулиа 2'

      TabOrder = 13

      OnClick = RadioButton3Click

21

TImage

Left = 1

        Top = 1

        Width = 598

        Height = 598

        Visible = False

        OnMouseDown = Image1MouseDown

        OnMouseMove = Image1MouseMove

        OnMouseUp = Image1MouseUp


 

 

      1. Компонент TImage

В данном приложении компонент TImage является основным компонентом формы. Он отображает на форме графическое изображение. Свойство Picture типа TPicture содержит отображаемый графический объект типа битовой матрицы, пиктограммы, метафайла или определенного пользователем типа. Основная особенность этого компонента, которая была использована при создании приложения, это возможность увеличения определенной области изображения отображаемого в этом компоненте. Эта возможность реализована с помощью таких событий как, OnMouseDown, OnMouseMove и OnMouseUp.

 

      1. Компонент TPanel

В данном приложении этот компонент использован в целях удобства расположения компонентов на основной форме. При расположении других компонентов на нем, они автоматически закрепляются на этот компоненте как на отдельной области, и в дальнейшем во время создания приложения эти компоненты невозможно будет перетащить в другое место вне этой области.

Использование нескольких этих компонентов позволяет не только зафиксировать все компоненты в  определенном месте, но и дает возможность  располагать их по группам.

 

    1. Написание кода программы

При работе приложения были использованы следующие процедуры:

Таблица 3. Используемые процедуры

Процедура

Назначение

1

FormCreate(Sender: TObject);

Задание размера области, в которой выводится фрактал,  установка начальных координат относительно которых будет происходить построение фрактала, задание цветовой гаммы, в которой будет строиться фрактал по умолчанию 

2

Image1MouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

Построение прямоугольного фокуса увеличения области фрактала

3

Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

      Y: Integer);

4

Image1MouseUp(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

5

Button1Click(Sender: TObject);

Построение и сохранение графического изображения в файл

6

Button2Click(Sender: TObject);

Построение фрактала Мандельброта

7

Button3Click(Sender: TObject);

Построение фрактала Жулиа

8

Button4Click(Sender: TObject);

Построение второго фрактала Жулиа

9

Button5Click(Sender: TObject);

Завершение работы приложения

10

SpeedButton1Click(Sender: TObject);

Сброс координат всех фракталов на значение по умолчанию

11

RadioButton1Click(Sender: TObject);

Установка начальных  координат для фрактала Мандельброта

12

RadioButton2Click(Sender: TObject);

Установка начальных координат для фрактала Жулиа

13

RadioButton3Click

Установка начальных  координат для второго фрактала Жулиа

14

TrackBar1Change(Sender: TObject);

Изменение цвета фрактала с уклоном в зеленый спектр(0-255)

15

TrackBar2Change(Sender: TObject);

Изменение цвета фрактала с уклоном в синий спектр(0-255)

16

TrackBar3Change(Sender: TObject);

Изменение цвета фрактала с уклоном в красный спектр(0-255)

17

Edit8Change

Значение отклонения зеленого цвета от цветовой гаммы  которая была задана по умолчанию

18

Edit9Change

Значение отклонения синего цвета от цветовой гаммы которая  была задана по умолчанию

19

Edit10Change

Значение отклонения красного цвета от цветовой гаммы  которая была задана по умолчанию


 

Приведем описание некоторых  из вышеописанных процедур:

FormCreate(Sender: TObject);

Данная процедура выполняется  сразу после запуска приложения. В данной процедуре задаются начальные  координаты для фрактала Мандельброта (его координаты используются как  координаты по умолчанию для остальных  фракталов), устанавливаются начальные значения цвета в системе RGB и задается размер области отображения построения фрактала.

   

Image1MouseDown(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

При нажатии левой  кнопки мыши над компонентом TImage срабатывает событие MouseDown. Если выделение происходит от места нажатия курсора вниз и вправо/влево, то задаются координаты левого/правого верхнего угла. Но если выделение происходит от места нажатия курсора вверх и влево/вправо, то задаются координаты правого/левого нижнего угла фокуса увеличения.

 

Image1MouseMove(Sender: TObject; Shift: TShiftState; X,

      Y: Integer);

При возникновении этого  события происходит непосредственная прорисовка самой прямоугольной  области выделения. Чтобы прямоугольник фокуса рисовался без заливки, т.е. только его граница, то при начале прорисовки восстанавливается фон изображения.

 

Image1MouseUp(Sender: TObject; Button: TMouseButton;

      Shift: TShiftState; X, Y: Integer);

Это событие возникает  при отжатии левой клавиши мыши над компонентом TImage, при этом сохраняются координаты места над, которым находится указатель в данный момент. Эти координаты являются конечными для прямоугольного фокуса увеличения.

 

Button1Click(Sender: TObject);

Процедура сохранения фрактала в виде графического изображения. Если поле вводе имени файла остается пустым то процедура выдает диалоговое окно с уведомлением что имя конечного файла не указано и, следовательно, программа не может сохранить файл, имя которого не задано.

 

Button2Click(Sender: TObject);

Данная процедура предназначена  для построения фарктала Мандельброта. Приведем текст данный процедуры  с пояснительными комментариями:

var

cc, x, y: integer;

rX1, rY1, xx, zm, zr, zi: extended;

begin

Image1.Visible:=true;    //Установка видимости компонента TImage;

btm:=Tbitmap.create; //Создание изображенияж

btm.Height:=image1.Height; //Высота области построения изображения;

btm.Width:=image1.Width; //Ширина области построения изображения;

r4:=strtoint(edit8.text);

g4:=strtoint(edit9.text);

b4:=strtoint(edit10.text);

Информация о работе Построение фракталов на языках программирования