-
Notifications
You must be signed in to change notification settings - Fork 0
/
mandelbrot.kum
156 lines (127 loc) · 3.62 KB
/
mandelbrot.kum
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
использовать Рисователь
|| константы и удаление значения
вещ Pi = 3.14159265359
лог _
|| Настройки
цел ширина = 1280
цел высота = 720
лог оптимизация = да
вещ масштаб; масштаб := 1.0/0.000000064
вещ смещениеX = -0.56267837374
вещ смещениеY = 0.65679461735
цел цветоваяСхема = 1
|| Координаты верхнего левого угла на комплексной плоскости
вещ x0; x0 := 1.75
вещ y0; y0 := 1.2
алг
нач
цел x, y, i
вещ таб z[0:1]
вещ startX, startY, итерX, итерY
startX := смещениеX - (x0 / масштаб)
startY := смещениеY - (y0 / масштаб)
итерX := ((x0 / масштаб) * 2) / ширина
итерY := ((y0 / масштаб) * 2) / высота
новый лист(ширина, высота, серый)
нц для y от 0 до высота - 1
нц для x от 0 до ширина - 1
пиксель(x, y, красный)
z[0] := startX + (итерX * x)
z[1] := startY + (итерY * y)
пиксель(x, y, мандельброт(z))
кц
кц
кон
алг цвет мандельброт(вещ таб z0[0:1])
нач
вещ таб z[0:1]
z[0] := z0[0]
z[1] := z0[1]
вещ таб zt[0:1]
zt[0] := 0
zt[1] := 0
цел итер = 255
вещ q
если оптимизация
то
q := (z[0] - 0.25) ** 2 + z[1] ** 2
если q * (q + (z[0] - 0.25)) < z[1] ** 2 * 0.25 или z[0] ** 2 + (2 * z[0]) + 1 + z[1] ** 2 < 0.0625
то
знач := черный
выход
все
все
нц для итер от 255 до 0 шаг -1
если модульКвадратный(z) > 4
то
выход
все
умножение(z, z, zt)
сложение(zt, z0, z)
кц
если итер = 0
то
знач := черный
выход
все
знач := получитьЦвет(итер)
кон
алг цвет получитьЦвет(цел итер)
нач
вещ цв
цел к, з, с
цв := итер
выбор
при цветоваяСхема = 0:
к := итер
з := итер
с := итер
при цветоваяСхема = 1:
к := ввц(((sin((цв / 255) * Pi + 2) + 1.0) / 2.0) * 255)
з := ввц(((sin((цв / 255) * Pi + 4) + 1.0) / 2.0) * 255)
с := ввц(((sin((цв / 255) * Pi + 6) + 1.0) / 2.0) * 255)
все
знач := RGB(к, з, с)
кон
алг сложение(вещ таб а[0:1], б[0:1], рез вещ таб в[0:1])
нач
в[0] := а[0] + б[0]
в[1] := а[1] + б[1]
кон
алг умножение(вещ таб а[0:1], б[0:1], рез вещ таб в[0:1])
нач
в[0] := а[0] * б[0] - а[1] * б[1]
в[1] := а[1] * б[0] + а[0] * б[1]
кон
алг вещ модульКвадратный(вещ таб а[0:1])
нач
знач := а[0] ** 2 + а[1] ** 2
кон
алг цел ввц(вещ число)
нач
лит строка
строка := вещ_в_лит(число)
цел индекс
индекс := поз(строка, ".")
знач := лит_в_цел(строка[1:индекс - 1], _)
кон
алг цел поз(лит строка, фрагмент)
нач
цел i, j
лог найдено = нет
нц для i от 1 до длин(строка)
если строка[i] = фрагмент[1] то
нц для j от 1 до длин(фрагмент)
если строка[i + j - 1] = фрагмент[j] то
если j = длин(фрагмент) то
найдено := да
знач := i
все
иначе выход
все
кц
если найдено то выход все
все
кц
если не найдено то знач := 0 все
кон