Страшная сказка про Биоморфа
3 февраля 2005
Рубрика: Обзоры и мнения.
Автор: .
pic
Иногда я кажусь себе рыбаком.
Компьютерные программы и идеи — это
мои крючки, удилища и спиннинги.
Компьютерные изображения — улов и
деликатесные блюда.
Клиффорд А.Пикоувер.

Занимательная информатика

В прошлом номере журнала мы открыли эту рубрику вступительной статьей, на этот раз мы ворвемся сразу в самую живую, горячую, завораживающую и плодотворную тему занимательного программирования, оставляя прочие вкусности на потом.
Клиф Пикоувер, чьи слова вынесены в эпиграф, один из ведущих выдумщиков-фантазеров на стыке программирования, математики, биологии и, главное для нас, занимательных развлечений со всеми этими науками. (Еще расскажу о нем много интересного.) Это про него газета «Лос-Анджелес Таймс» написала: «Пикоувер постоянно раздвигает наши понятия о программировании и об устройстве мира». Впервые о нем я прочел в журнале «В мире науки», № 9/1989 года. Там было рассказано о причудливых и красивых программных творениях К. Пикоувера, известного уже тогда ученого из Исследовательского центра им. Томаса Уотсона фирмы IBM в Йорктаун-Хейтсе (штат Нью-Йорк). Помимо увлечения серьезными исследованиями он коллекционирует развлекательные программы. Это его «рыболовные снасти». С их помощью на экране дисплея можно получать хаотичные и в то же время эстетически привлекательные формы.

Глядя на восхитительные уловы Пикоувера, хочется рассказать о программах, с которыми читатели смогут отправиться на «рыбалку» и ловить невиданные фантастические организмы (рис.1)

pic

Самое интересное, что все эти организмы порождаются простейшим алгоритмом многократным возведением в квадрат комплексного числа. К сожалению, их (комплексные числа) периодически исключают из школьной программы, а это один из красивейших разделов математики. Комплексное число состоит из реальной (обычного числа) и мнимой части. Мнимая часть содержит квадратный корень из -1, i=(-1)1/2. Разработаны правила действий с комплексными числами, основанные на том, что i в квадрате равно минус 1 (i2= -1). Комплексные числа имеют прикладное значение во многих областях науки, являются основным аппаратом для расчетов в электротехнике и связи. Если на плоскости по горизонтальной оси откладывать реальные числа, а по вертикальной мнимые, то каждому комплексному числу будет соответствовать точка на этой плоскости. Именно эта возможность «видеть» комплексные числа и действия над ними поразила меня еще в школе, когда о фракталах и речи не было. Например, известно, что корни третьей степени из единицы (один реальный и два комплексных) расположены в вершинах равностороннего треугольника, а корни кубические из 1 тоже лежат на вершинах равностороннего треугольника, но отраженного относительно первоначального вокруг вертикальной оси. А корни седьмой степени из любого числа лежат на вершинах правильного семиугольника. (Кстати, вопрос — сможете ли вы нарисовать семиугольную звезду так же, как пятиугольную, не отрывая пера от бумаги? А восьмиугольную, а девяти, десяти? А найти общее правило для рисования таких звезд? А программочку…).

Каждому комплексному числу соответствует точка на плоскости. Возведем число в квадрат — появляется другая точка, еще раз возведем в квадрат (или любую другую степень), появляется новая точка на плоскости. Потом эту простейшую операцию повторим многократно с получающимся каждый раз новым комплексным числом. В зависимости от начального числа могут быть три варианта: процесс пошел вразнос, число резко растет, уходит «из поля зрения», это не интересно; число быстро уменьшается и исчезает, еще менее интересно; да, да, теперь самое потрясающее. При некоторых начальных значениях новые числа группируются внутри некоторой области, а при отображении их на плоскости появляются невероятные изображения. Это группирование возводимых в квадрат комплексных чисел впервые подметил и описал Жюлиа в 1916 году. И это, так называемое множество Жюлиа, послужило отправной точкой для Бенуа Р. Мандельброта, математика из Исследовательского центра им. Томаса Уотстона при IBM, впервые предложившего термин «фрактал» для описания объектов, структура которых повторяется при переходе к все более мелким масштабам. Так как появляющиеся картинки обладают всеми признаками фракталов. Многие авторы оспаривают первенство Мандельброта, ссылаясь на более ранние работы, но название, тем не менее, закрепилось (как-то же множество надо называть). Подробности выяснения приоритета можно найти в журнале «В мире науки» (Scientific American), №6/1990 г. Однако вернемся к множеству. Суть технологии его получения состоит в следующем. Берется комплексное число. Выбранное число возводится в квадрат и прибавляется какое-то фиксированное постоянное число. Это число тоже комплексное, то есть имеет действительную и мнимую части, подбирая их, мы можем регулировать процесс, получая самые причудливые картины. Простейшая итерационная формула Zнов=Z2стар + С, соответствующая множеству Жюлиа, нарисует подобие куклы-неваляшки. Края ее размыты, как бы лохматые. В них-то и происходит самое таинство. Точки из зоны лохматости и порождают красивые картинки, так как из центральной области точки вырождаются в нуль, а периферийные улетают в бесконечность.

Так вот, все подбираемся к главному, Клиффорд Пикоувер первым заметил, что появляющиеся картинки очень похожи на клетки и живых организмов, а иногда даже и на настоящие организмы. Он и предложил жуткое и модное слово «биоморфы», то есть нечто, похожее на организм. Некоторые биоморфы Пикоувера похожи на микробов, в связи с чем в журнале «Omni» Пикоувер был назван «Левенгуком ХХ века». (Антони ван Левенгук, живший в XVII в., нидерландский натуралист, первым соорудивший микроскоп и увидевший в капле воды живые существа). Каждый, кто смотрел в микроскоп, видел подобную картину: все живые и растительные ткани построены из клеток, имеющих оболочку, ядро, протоплазму и вакуоли — внутренние органы. Поэтому, увидев на экране дисплея результат работы программы, невольно вскрикнешь: «Да это же живая клетка!».

Биоморфы Пикоувера, повторю, населяют комплексную плоскость. Каждый биоморф строится путем многочисленных итераций, или последовательных вычислений определенной математической функции, путем повторяющихся математических операций. На каждом шаге итерационного процесса результат предыдущего шага принимается за исходное значение переменной.
Рассмотрим, например, биоморф на картинке (рис. 2).

pic

Он получен с помощью итерационных вычислений по формуле Zn+1=Z9n+C. Исходное значение комплексной переменной возводится в девятую степень, и к результату прибавляется фиксированное комплексное число С. Затем те же арифметические действия применяются к сумме Z1, получается значение Z2 и т.д. Комплексное число, повторю еще раз, состоит из двух обычных чисел, одно из которых называется действительной, а другое мнимой частью комплексного числа. Эти два числа удобно представить в виде двух координат в декартовой системе. Традиционно комплексное число записывается в виде суммы, например 3 + 5i, где 3 — действительная часть (обычные действительные числа), а 5 мнимая, мы ее рассмотрели выше. (Буква i является своеобразным индексом, указывающим, какая из двух частей числа мнимая, причем, еще раз, i2=-1). Приведем основные правила арифметики комплексных чисел.

(a + bi) + (c + di) = (a + c) + (b + d)i
(a + bi) * (c + di) = (ac — bd) + (ad + bc)i
(a + bi)2 = (a2 — b2) + 2abi
(a + bi)3 = a(a2 — 3b2) + b(3a2 — b2)i.

Привожу текст программы на древнем Turbo Pascal’е (алгоритм легко переносится на любой язык программирования), рисующей на экране приведенный на картинке биоморф:

PROGRAM BIO_3;
USES CRT,GRAPH,DOS;
LABEL 1;
VAR RE,IM,RE1,IM1: REAL ;
V,X,Y : INTEGER;
C: STRING;
PROCEDURE QWA ; {1}
BEGIN
RE1:=RE*RE-IM*IM ;
IM1:=2*RE*IM ;
RE:=RE1 ;
IM:=IM1 ;
END ;
PROCEDURE KUB ; {2}
BEGIN
RE1:=RE*(RE*RE-3*IM*IM) ;
IM1:=IM*(3*RE*RE-IM*IM) ; RE:=RE1 ; IM:=IM1 ;
END ;
{++++++++++++++++++++++++}
BEGIN
InitGraph(GraphDriver,GraphMode,»);
SETFILLSTYLE(1,WHITE) ; {3}
BAR(0,0,640,480) ; {4}
X:=-320 ;
REPEAT
Y:=-240 ;
REPEAT
V:=0 ;
RE:=-1+0.008*X ; {5}
IM:=0+0.008*Y ; {6}
REPEAT KUB ;
KUB ; {7}
RE:=RE-0.9 ; {8}
IM:=IM+0.18 ; {9}
IF RE*RE > 5 THEN GOTO 1 ; {10}
IF IM*IM > 6 THEN GOTO 1; {11}
V:=V+1 ;
UNTIL V > 10 ; {12}
1: IF ( ABS(RE) < 7 ) OR (ABS(IM) < 3 ) THEN PUTPIXEL((X+220),(Y+240),V) {14} ELSE PUTPIXEL((X+220),(Y+240),15) ; {15} Y:=Y+1 ; UNTIL Y > 241 ;
X:=X+1 ;
UNTIL X > 420 ;
C:=READKEY ;
CLOSEGRAPH;
END.

Предварительно описаны две процедуры: QWA- возведение комплексного числа в квадрат и KUB — возведение комплексного числа в куб. Процедура QWA в приведенной программе не применяется, но понадобится для других биоморфов, где используется четная степень комплексных чисел. Комплексное число хранится двумя переменными: RE — действительная часть, IM — мнимая. Программа пробегает все точки экрана, для каждой точки определяется комплексное число с помощью подобранных коэффициентов в строках 5 и 6, меняя эти коэффициенты, можно получать разные конфигурации. В строках 3 и 4 экран предварительно заливается белым фоном. В строке 7 число возводится в девятую степень, так как процедура KUB вызывается два раза подряд. В строках 8 и 9 к полученному числу добавляется постоянное комплексное число (действительная часть к действительной, мнимая — к мнимой), также влияющее на вид биоморфа. Из итерационного цикла предусмотрены два «досрочных» выхода — по значению RE и IM в строках 10 и 11, причем эти значения влияют на вид и цвет внутренней полости биоморфа. В строке 13 тоже две проверки — RE и IM, и их значения влияют на толщину внешних колючек, причем каждый на свои. Координаты, в которых ничего «интересного» с числами не происходит, снова получают пиксель белого цвета в строке 15. Важнейшее «технологическое» замечание — цвет зависит от значения счетчика цикла, при котором произошел выход из цикла по условию. Именно этот «трюк» позволяет получить раскраску, отвечающую сути происходящего процесса.
Как посмотреть в микроскоп Пикоувера на другие организмы? На самом деле это можно сделать с помощью этой же программы. Нужно лишь подставить другую формулу в сердцевину алгоритма, поменять операцию в строке 7 и параметры в строках 8, 9, 10 и 11.

Хочу познакомить с одним из самых невероятных организмов. На первом из рисунков мы видим его общий портрет (мрачную черную колючку, внутри которой плавают три голубых организма, тоже с черными колючками, одна из которых, самая страшная, больше других) и начинаем увеличивать масштаб (рис.3)

pic

При увеличении масштаба, опускаясь внутрь чудища, видим, что в каждом из трех голубых организмов расположились по три красных с черными колючками, одна из которых,.. в каждом красном живут по три розовых, в них по три желтых, в них по три белых… и все с черными колючками, из которых одна… ну вы уже знаете. И это фрактальное самоподобие можно продолжать раскрывать до бесконечности (рис.4)
Код программы этого монстрика (возведение комплексного числа в куб) и другие картинки найдете на арбузной странице http://arbuz.uzpak.uz/x_complex.html

Пикоувер впервые столкнулся с биоморфами, когда совершил случайную ошибку в программе, предназначенной для изучения фрактальных свойств различных формул. Но биоморфы, кажется, зажили своей собственной жизнью. Как говорит Пикоувер: «В некотором смысле можно сказать, что математические создания существуют. Эти объекты обитают на комплексной плоскости, хотя и напоминают микроскопические организмы, которые мы легко можем увидеть в капле воды из любой лужи». В каком же море мы могли бы поймать представителей более развитых форм жизни? Пикоувер считает важным и тот факт, что сложность как естественных, так и искусственных организмов является результатом многократного применения простых динамических правил. А что, если мы на пути к разгадке появления жизни на Земле? Может быть, миллиард лет назад в «первичном бульоне» молекулы сложных углеводов причудливо соединялись по законам, схожим с законом «жизни» комплексных чисел? Теперь очередь за математиками и программистами — получить устойчивые, движущиеся, приспосабливающиеся и, наконец, разумные биоморфы, научиться общаться с ними, попросить их (не заставить!) работать для людей. Чем мы и займемся в одной из следующих статей.

Orphus system
В Telegram
В Одноклассники
ВКонтакте