Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комп_практикум_Совр_методы.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.09 Mб
Скачать

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

Программа, реализующая 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

ПРИЛОЖЕНИЕ Б

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