Методика выполнения работы

 

Программа, реализующая L –систему, разработана в программной среде Visual Basic 2008. Она обеспечивает наименьшие затраты времени и объем памяти.

Интерфейс программы "Метод черепашки" представлен на рисунке 2.1.


 

Рисунок 2.1 – Интерфейс программы "Метод черепашки"

 

Листинг программы представлен в приложении А.

Фракталы, построенные с помощью программы, представлены в приложении Б.

Сущность работы заключается в том, чтобы освоить методику программирования L-систем, используя приведенный здесь образец решения задачи.

Для выполнения работы студент получает задание. Язык и среда программирования выбираются студентом самостоятельно.

Отчет должен содержать:

1. Исходную информацию.

2. Листинг программы.

3. Изображения фракталов при изменении основных параметров.

4. Выводы по работе относительно возможных сфер использования программы.

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

 

СПИСОК ЛИТЕРАТУРЫ

1. Морозов А.Д. Введение в теорию фракталов. - Москва-Ижевск: Институт компьютерных исследований, 2002, 160 с.


ПРИЛОЖЕНИЕ А

Листинг программы "Метод Черепашки"

 

Public Class FrmStar

 

Dim STR_Axiom As String 'Переменная для аксиомы

Dim STR_newF As String 'Переменная для правила F

Dim STR_newb As String 'Переменная для правила b

Dim STR_Body As String 'Переменная для полученного алгоритма построения

 

Dim INT_n As Integer 'Количество итераций

Dim INT_Tetta As Integer 'Приращение по углу

Dim INT_Xstart As Integer 'Начальная координата X

Dim INT_Ystart As Integer 'Начальная координата Y

Dim INT_Xfinish As Integer 'Конечная координата X

Dim INT_Yfinish As Integer 'Конечная координата Y

 

Dim DBL_Length As Double 'Длина стороны

Dim DBL_Alfa As Double 'Начальный угол для построения

 

Dim Stack1 As New Collection()

Dim Stack2 As New Collection()

Dim Stack3 As New Collection()

 

 

Private Sub FrmStar_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

 

'Загрузка программы

 

DefaultVariables() 'Установление переменных по умолчанию

TextFields() 'Заполнение текстовых полей

Calc() 'Расчет алгоритма построения

TxtBody.Text = STR_Axiom 'Вывод алгоритма построения на экран

 

End Sub

Sub DefaultVariables()

 

STR_Axiom = "F" 'Аксиома по умолчанию

STR_newF = "-F+F+[+F-F-]-[-F+F+F]" 'Правило по умолчанию

STR_newb = "" 'Правило для b по умолчанию

STR_Body = "" 'Выходной алгоритм по умолчанию

 

INT_n = 3 'Количество итераций по умолчанию

DBL_Alfa = -80 'Угол по умолчанию

INT_Tetta = 20 'Угол приращения по умолчанию

 

 

INT_Xstart = HSB_X0.Value 'Начальная координата X по умолчанию

INT_Ystart = HSB_Y0.Value 'Начальная координата Y по умолчанию

 

DBL_Length = HSB_M.Value 'Начальная длина стороны по умолчанию

 

End Sub

Sub TextFields()

 

'Заполнение текстовых полей значениями переменных

 

TxtAxiom.Text = STR_Axiom

TxtNewF.Text = STR_newF

TxtNewb.Text = STR_newb

TxtN.Text = INT_n

TxtTetta.Text = INT_Tetta

TxtAlfa.Text = DBL_Alfa

 

HSB_X0.Value = INT_Xstart

HSB_Y0.Value = INT_Ystart

HSB_M.Value = DBL_Length

 

TxtBody.Text = STR_Body

 

End Sub

 

Sub Calc()

Calculation()

CalculationLength()

End Sub

Sub Calculation()

 

For j = 1 To INT_n

CalculationOneIteration()

STR_Axiom = STR_Body

STR_Body = ""

Next

 

End Sub

Sub CalculationOneIteration()

 

For i = 0 To STR_Axiom.Length - 1

If STR_Axiom(i) = "F" Then

STR_Body = STR_Body + STR_newF

ElseIf STR_Axiom(i) = "b" Then

STR_Body = STR_Body + STR_newb

Else

STR_Body = STR_Body + STR_Axiom(i)

End If

Next

 

End Sub

Sub CalculationLength()

 

DBL_Length = DBL_Length / (3 ^ INT_n) 'Расчет длины одной стороны

 

End Sub

 

Sub ReDraw()

 

Me.Refresh() 'Очищение формы

 

INT_Xstart = HSB_X0.Value 'Обновление начальной координаты

INT_Ystart = HSB_Y0.Value 'Обновление начальной координаты

DBL_Length = HSB_M.Value 'Обновление масштаба

DBL_Alfa = Math.PI * TxtAlfa.Text / 180

 

 

'Обновление начального угла

CalculationLength()

Draw() 'Прорисовка

 

End Sub

Sub Draw()

 

For i = 0 To STR_Axiom.Length - 1

'============================

If STR_Axiom(i) = "F" Then

PaintF()

End If

'============================

If STR_Axiom(i) = "b" Then

Paintb()

End If

'============================

If STR_Axiom(i) = "[" Then

Stack1.Add(INT_Xstart)

Stack2.Add(INT_Ystart)

Stack3.Add(DBL_Alfa)

End If

'============================

If STR_Axiom(i) = "]" Then

INT_Xstart = Stack1(Stack1.Count)

INT_Ystart = Stack2(Stack2.Count)

DBL_Alfa = Stack3(Stack3.Count)

 

Stack1.Remove(Stack1.Count)

Stack2.Remove(Stack2.Count)

Stack3.Remove(Stack3.Count)

End If

'============================

If STR_Axiom(i) = "+" Then

DBL_Alfa = DBL_Alfa - Math.PI * INT_Tetta / 180

End If

'============================

If STR_Axiom(i) = "-" Then

DBL_Alfa = DBL_Alfa + (Math.PI * (INT_Tetta / 180))

End If

Next

 

End Sub

 

Sub PaintF()

 

Dim Graph As Graphics

Graph = CreateGraphics()

 

INT_Xfinish = INT_Xstart + DBL_Length * Math.Cos(DBL_Alfa)

INT_Yfinish = INT_Ystart + DBL_Length * Math.Sin(DBL_Alfa)

 

Graph.DrawLine(Pens.Black, INT_Xstart, INT_Ystart, INT_Xfinish, INT_Yfinish)

 

INT_Xstart = INT_Xfinish

INT_Ystart = INT_Yfinish

 

End Sub

Sub Paintb()

Dim Graph As Graphics

Graph = CreateGraphics()

 

INT_Xfinish = INT_Xstart + DBL_Length * Math.Cos(DBL_Alfa)

INT_Yfinish = INT_Ystart + DBL_Length * Math.Sin(DBL_Alfa)

 

INT_Xstart = INT_Xfinish

INT_Ystart = INT_Yfinish

End Sub

 

 

Private Sub BtnDraw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnDraw.Click

ReDraw()

End Sub

Private Sub BtnApply_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnApply.Click

STR_Axiom = TxtAxiom.Text

STR_newF = TxtNewF.Text

STR_newb = TxtNewb.Text

 

INT_n = TxtN.Text

INT_Tetta = TxtTetta.Text

DBL_Alfa = Math.PI * TxtAlfa.Text / 180

 

 

INT_Xstart = HSB_X0.Value

INT_Ystart = HSB_Y0.Value

DBL_Length = HSB_M.Value

 

Calc()

TxtBody.Text = STR_Axiom 'Вывод алгоритма построения на экран

 

End Sub

Private Sub HSB_X0_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HSB_X0.Scroll

ReDraw()

End Sub

Private Sub HSB_M_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HSB_M.Scroll

ReDraw()

End Sub

Private Sub HSB_Y0_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HSB_Y0.Scroll

ReDraw()

End Sub

 

End Class

 


ПРИЛОЖЕНИЕ Б

 

Фракталы, построенные с помощью программы

 

 

 



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: