![]()
|
Код на Visual Basic для построения фрактальных изображенийЭтот код написан на VB4. Код обрабатывает события мыши и использует 16 цветов для окрашивания.После загрузки кода в новую форму (form1) необходимо уменьшить ее размер до 3500 твипсов по ширине и высоте. При нажатии правой клавиши мыши генерируется изображение фрактала Мандельброта, нажатие левой клавиши генерирует фрактал Жюлиа (Изображения получаемые по умолчанию представлены в конце страницы). Изменяя переменные и алгоритм раскрашивания вы получите другие отображения.
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 Byte, colorr As Byte, Bb 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 = 250: NY = 250 'Разрешение экрана
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.PSet (real, img) Else Form1.PSet (real, img), QBColor(tt)
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 = 250: Bb = 250
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.PSet (c_real, c_img) Else Form1.PSet (c_real, c_img), QBColor(colorr)
Next J
Next I
End Select
End Sub
К началу текста |