Код на Visual Basic для построения фрактальных изображений

Этот код написан на VB4. Код обрабатывает события мыши и использует 16 цветов для окрашивания.

При нажатии правой клавиши мыши генерируется изображение фрактала Мандельброта, нажатие левой клавиши генерирует фрактал Жюлиа (Изображения получаемые по умолчанию представлены в конце страницы).

Изменяя переменные и алгоритм раскрашивания вы получите другие отображения.

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


Hosted by uCoz