Программа, реализующая 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
ПРИЛОЖЕНИЕ Б
Фракталы, построенные с помощью программы