Биоморфы -
клеточные организмы на экране.
Иногда я кажусь себе рыбаком.
Компьютерные программы и идеи - это мои крючки,
удилища и спиннинги. Компьютерные изображения -
улов и деликатесные блюда. Клиффорл А.Пикоувер.
В журнале «В мире науки» №9/1989г.
рассказано о причудливых и красивых графических
творениях К. Пикоувера, известного учёного из
Исследовательского центра им. Томаса Уотсона
фирмы IBM в Йорктаун-Хейтсе (штат Нью-Йорк). Помимо
увлечения серьёзными исследованиями он
коллекционирует развлекательные программы. Это
его «рыболовные снасти». С их помощью на экране
дисплея можно получать хаотичные и в то же время
эстетически привлекательные формы. Глядя на
восхитительные уловы Пикоувера, я не в состоянии
противостоять соблазну - рассказать о
программах, с которыми читатели смогут
отправиться на «рыбалку» и ловить
представителей трёх простых, но весьма забавных
видов, а именно биоморфы, плитки Трюше и
фрактальный попкорн. (Попкорн - потому что узор
похож на кукурузные хлопья).
Что такое биоморфы?
Это слово означает нечто похожее на живой
организм. Биоморфы Пикоувера похожи на микробов,
в связи с чем в журнале «Omni» Пикоувер был назван
«Левенгуком ХХ века. (Антони ван Левенгук, живший
в XVII в. нидерландский натуралист, первым
соорудивший микроскоп и увидевший в капле воды
живые существа). Каждый, кто смотрел в микроскоп,
видел подобную картину: все живые и растительные
ткани построены из клеток, имеющих оболочку,
ядро, протоплазму и вакуоли - внутренние органы.
Поэтому, увидев на экране дисплея результат
работы программы, невольно вскрикнешь: «Да это же
живая клетка!». Биоморфы Пикоувера населяют
комплексную плоскость. Каждый биоморф строится
путём многочисленных итераций, или
последовательных вычислений определённой
математической функции, путём повторяющихся
математических операций. На каждом шаге
итерационного процесса результат предыдущего
шага принимается за исходное значение
переменной.
Рассмотрим, например, биоморф на картинке.
Он получен с помощью
итерационных вычислений по формуле
Zn+1=Z9n+C.(9-степень) Исходное значение комплексной
переменной возводится в девятую степень и к
результату прибавляется фиксированное
комплексное число С. Затем те же арифметические
действия применяются к сумме 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 GrInit;
var GraphDriver :
Integer; GraphMode :
Integer; ErrorCode :
Integer; begin GraphDriver:= Detect;
InitGraph(GraphDriver,GraphMode,''); ErrorCode:=GraphResult; if ErrorCode <> grOk then begin
Writeln('ОШИБКА ГРАФИКИ’,
GraphErrorMsg(ErrorCode)); Writeln('ПРОГРАММА ОСТАНОВЛЕНА.');
Halt (1) end {if} end;
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
GRINIT; 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.
Пикоувер впервые столкнулся с биоморфами, когда
совершил случайную ошибку в программе,
предназначенной для изучения фрактальных
свойств различных формул. Но биоморфы, кажется,
зажили своей собственной жизнью.
Как говорит Пикоувер: «В некотором смысле можно сказать, что
математические создания существуют. Эти объекты
обитают на комплексной плоскости, хотя и
напоминают микроскопические организмы, которые
мы легко можем увидеть в капле воды из любой
лужи». В каком же море мы могли бы поймать
представителей более развитых форм жизни?
Пикоувер считает важным и тот факт, что сложность
как естественных, так и искусственных организмов
является результатом многократного применения
простых динамических правил. А что, если мы на
пути к разгадке появления жизни на Земле? Может
быть миллиард лет назад в «первичном бульоне»
молекулы сложных углеводов причудливо
соединялись по законам, схожим с законом «жизни»
комплексных чисел? Теперь очередь за
математиками и программистами - получить
устойчивые, движущиеся, приспосабливающиеся и,
наконец, разумные биоморфы, научиться общаться с
ними, попросить их (не заставить!) работать для
людей. |