— Какие чудные цветы! — воскликнула Элли.
— Они хороши! — молвил Страшила. — Конечно,
будь у меня мозги, я восхищался бы цветами
больше, чем теперь.
А. Волков. Волшебник Изумрудного города
На потрясающие объекты с таким необычным названием обратили мое внимание знакомые — любители математических забав. Впервые увидел эти объекты на страничке www.mathworld.wolfram.com в знаменитой математической энциклопедии для непрофессионалов от Стивена Вольфрама. От всех известных ранее математических объектов фракталы Курликю отличаются не столько волнующей красотой, сколько до безобразия простым алгоритмом. К отрезку прикладывается такой же отрезок, но повернутый на некоторый угол, к этому новому отрезку примыкает следующий, тоже повернутый на тот же угол относительно предыдущего. И все! Никаких комплексных чисел, дифференциальных уравнений и всяких прочих интегралов-логарифмов, пугающих обывателя своими названиями.
Да, о названии. Всю жизнь (ну ладно, не всю, года два-три) был уверен, что фракталы эти назвали в честь их первооткрывателя, и писал название с заглавной буквы. Но оказалось, что curlicue означает просто «причудливый узор, завитушка». Так что писать название надо бы со строчной... но это будет не так романтично, как если бы в честь какого-нибудь древнего грека, или средневекового алхимика, или студента колледжа по фамилии Курликю... Так что исправлять не буду — пусть с заглавной.
Простота и красота задумки искушают сразу же запустить процесс в любом доступном языке программирования. Повозившись несколько минут с коэффициентами, вы будете сторицей вознаграждены появляющимися картинами и не заметите, как наступит утро. И станете еще не раз возвращаться к этой полюбившейся игрушке. Так непредсказуемы получающиеся елочки-спиральки-гроздья-вьюнки, что никак не отслеживаются вид картинки и ее зависимость от задаваемых параметров. Влияют шаг цикла и коэффициент, с которыми берутся счетчик цикла для построения и показатель степени этого счетчика цикла, причем все эти влияния взаимосвязаны. Идеальный объект, кстати, для приобщения к программированию подрастающего поколения.
Если самим лень возиться, взгляните на готовую галерею этих самых фракталов Курликю. Впору невольно задуматься в который раз: почему так красивы математические картинки? То ли мир устроен красиво, то ли математика сама по себе хороша?
Однако такие беседы можно вести бесконечно, рискуя вывести из терпения людей практичных. Поэтому приступим к делу. В Visual Basice создаем форму, «кидаем» на нее две кнопки — «Start» и «End» и назначаем им код.
Private Sub Command1_Click() Для кнопки Start
DrawWidth = 3 Толщина рисуемой линии
ScaleMode = 3 Режим попиксельного вывода
xmax = 500 Сдвиг для убегающего за кадр
ymax = 10 рисунка
r = 6 Длина одного участка
X1 = 0 Координаты начальной
Y1 = 100 точки
t = 3 Показатель степени
s = 0.0001 Коэффициент
For v = — 10000 To 10000 Step 2# Запускаем цикл
с заданным шагом
w = s * v ^ t Вычисляем текущий угол
для отрезка
X2 = X1 + r * Cos(w) Координаты следующей
Y2 = Y1 + r * Sin(1 * w) точки
On Error Resume Next Выход в случае ошибки
red = Abs(v / 2) Mod 255 Задание цвета
green = Abs(255 — v / 3) Mod 255
blue = Abs(0 / 1) Mod 255
Col = RGB(red, green, blue)
Line (X1 + xmax, Y1 + ymax)-(X2 + xmax, Y2 + ymax), Col
Рисование
X1 = X2 : Y1 = Y2 Передача координат новой точки
Next v Конец цикла
End Sub
Private Sub Command2_Click() Действия для кнопки «End»
End
End Sub
Вот и вся программа. Алгоритм незатейлив и прост, его можно «запустить» в любом вашем привычном языке программирования от С++ до Delphi. Меняя переменные t, s, r и шаг цикла, вы каждый раз будете получать неожиданно-непредсказуемые, но неизменно красивые рисунки. Еще раз повторю — самое удивительное в этой игрушке, что результат опытов непредсказуем: поменяв угол на тысячные доли радиана, получаем узор, совершенно отличный от предыдущего... Стоит попробовать, — лучшей замены вашей скуке не найти.
Гость
12.02.2009 12:25:42 #