1) Изучите тему фракталы, используя материалы Интернет и отразите изученное в отчете представив теоретический и графический материалы (ориентировочно 2-3 страницы);
2) Введите готовый текст программы в VBasic 6.0, запустите программу и получите изображения для множества Жюлиа (клик левой кнопкой мыши по форме) и Мандельброта (клик правой кнопкой мыши по форме);
3) Измените в тексте программы исходные значения согласно таблице и получите новые изображения;
4) Сделайте вывод: как зависят изображения от входных данных?
фрактал Жюлиа | фрактал Мандельброта |
|
|
Листинг программы
Dim NX As Integer, NY As Integer, M As Integer
Dim c_real As Single, c_img As Single, dcr As Single
Dim dci As Single, z_current_real As Single
Dim z_real As Single, z_img As Single, z_magnitude As Single
Dim crmin As Single, crmax As Single, cimin As Single, cimax As Single
Dim Aa As Integer, Bb As Integer
Dim colorr As Byte, kk As Byte, tt As Byte, L As Byte
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case Button
Case 1 'Julia set
Form1.Cls
Xmin = -1.5: Ymin = -1.5: Xmax = 1.5: Ymax = 1.5
Form1.Scale (Xmax, Ymin)-(Xmin, Ymax) 'Установка масштаба формы как комплексной плоскости
NX = 1000: NY = 1000 'Разрешение экрана
L = 10 'Максимальный предел для z_magnitude
M = 100 'Максимальное число итераций
dcr = (Xmax - Xmin) / (NX - 1) 'Определение шага для получения точки real
dci = (Ymax - Ymin) / (NY - 1) 'Определение шага для получения точки img
c_real = 0.32 'Определение фиксированной переменной
c_img = 0.043 'Определение фиксированной переменной
For I = 0 To NX
Real = Xmin + I * dcr
For J = 0 To NY
img = Ymin + J * dci
z_real = Xmin + I * dcr 'Определение динамической переменной
z_img = Ymin + J * dci 'Определение динамической переменной
Counter = 0
For Counter = 0 To M
z_current_real = z_real
z_real = z_real ^ 2 - z_img ^ 2 + c_real
z_img = 2 * z_current_real * z_img + c_img
z_magnitude = z_real ^ 2 + z_img ^ 2
|
|
If z_magnitude > L Then tt = Counter / 7: Exit For 'При увеличении числа итераций измените число 7 так чтобы tt не превышало 15
Next Counter
If z_magnitude < L Then
Form1.DrawWidth = 1
Form1.PSet (Real, img)
Else
Form1.DrawWidth = 1
Form1.PSet (Real, img), QBColor(tt)
End If
Next J
Next I
Case 2 'Mandelbrot set
Form1.Cls
crmin = -2.25: cimin = -1.5: crmax = 0.75: cimax = 1.5
Form1.Scale (crmin, cimax)-(crmax, cimin)
Ll = 10: Mm = 100
Aa = 1000: Bb = 1000
dcr = (crmax - crmin) / (Aa - 1)
dci = (cimax - cimin) / (Bb - 1)
For I = 0 To Aa
c_real = crmin + I * dcr
For J = 0 To Bb
c_img = cimin + J * dci
z_real = 0
z_img = 0
Counter = 0
For Counter = 0 To Mm
z_current_real = z_real
z_real = z_real ^ 2 - z_img ^ 2 + c_real
z_img = 2 * z_current_real * z_img + c_img
z_magnitude = z_real ^ 2 + z_img ^ 2
If z_magnitude > Ll Then colorr = Counter / 7: Exit For
Next Counter
If z_magnitude < Ll Then
Form1.DrawWidth = 1
Form1.PSet (c_real, c_img)
Else
Form1.DrawWidth = 1
Form1.PSet (c_real, c_img), QBColor(colorr)
End If
Next J
Next I
End Select
End Sub
ЛИТЕРАТУРА
1.О. Л. Голицына, И. И. Попов Основы алгоритмизации и программирования. Серия: Профессиональное образование Год издания: 2008 ISBN: 5-91134-214-6 Издательство: Форум 432 стр.
http://icc.mpei.ru/services/library.aspx?uuid=5fbb24a3-9c86-470c-afe3-1a25daffc8c6
http://314159.ru/belov/frakyy.htm