Фрактальные
линии
Продолжим тему о
фракталах, начатую в статье о
Биоморфах.Некоторое время работа Пикоувера была
связана с изучением новых подходов к определению
смыслового содержания данных по их внешнему
виду, и теперь мы можем обратиться ещё к одной
графической забаве Пикоувера: фрактальному
попкорну. Для тех, кто не знает: попкорн – это
кукурузные хлопья, ну а что такое фрактальный –
наверняка известно всем. Слово новое, красивое,
уже есть фирмы с таким названием, (можно даже
назвать породистого кота это будет не слабее чем
Брэндон или Круз Кастильо). Тому, кто
интересуется математикой, наверняка известен
ковёр Серпинского. У мэтра популярной математики
Мартина Гарднера найдём, что ещё в 1905 году на
ежегодной математической олимпиаде в Венгрии
предлагалась задача: «Квадрат разделён на 9
частей (как для игры крестики-нолики) и
центральный квадрат удалён. Затем каждый из
оставшихся 8 квадратов разделён на 9 частей,
центральный квадрат удалён и процедура
повторяется многократно. Найти предел, к
которому стремится площадь полученной фигуры».
Так вот – полученная фигура и есть ковёр
Серпинского – квадрат настолько дырявый, что он
уже ближе к линии. Известны множество объектов,
застрявшие на полпути от одного измерения к
другому, например, по аналогии с ковром можно
представить куб Серпинского, трухлявый как
губка, почти не обладающий объёмом. Для таких
объектов создано направление математики –
теория размерностей, занимающаяся серьёзными
приложениями, например, вычисление длины
береговой линии из-за изломанности формы не
подающееся простым вычислениям. Нас же
интересуют более красивые модели. Например, если
у треугольника каждую сторону разделить на три
части и на центральной построить правильный
треугольник (получим шестиугольник – так
называемая Звезда Давида – символ сионизма),
потом с каждой стороной повторить эту операцию,
то получим »снежинку». С каждым повторением
операции снежинка будет всё пушистее, а
суммарная длинна её отрезков (периметр) может
быть сколь угодно длинной. Она может умещаться на
почтовой марке и всё же быть длиннее, чем
расстояние от Земли до самой далёкой звезды!
Кривая-снежинка – один из красивейших
представителей бесконечного множества кривых,
названных паталогическими из-за своих
парадоксальных свойств. При неограниченном
увеличении числа звеньев длина ломанных в
пределе стремится к бесконечности, хотя площадь
заключённого внутри ломанных участка плоскости
остаётся конечной. Ещё два маленьких замечания: к
предельной кривой ни в одной точке нельзя
провести касательную, а площадь снежинки
стремится к 8/5 от площади исходного треугольника
(проверьте!). Надо ли ещё
объяснять, что такое фрактал? Это многократное
повторение вычислительного и графического
процесса, приводящее к объектам с нецелой
размерностью: уже не линия, но ещё не плоскость.
Даже если это популярное объяснение совсем не
передаёт сути процесса, это не помешает нам
поиграть с фрактальными картинками на экране и
полюбоваться на них.
Изображение попкорна Пикоувера, как бы
осязаемое, приведено на рисунке. На самом деле
эти кружева были получены путём итерационного
решения пары дифференциальгых уравнений в
дискретной форме. Координата X точки решения
вычисляется путём вычитания значения функции Y
из координаты X решения, вычисленного на
предыдущем шаге. Аналогичным образом координата
Y точки решения вычисляется вычитанием значения
функции X из координаты Y решения на предыдущем
шаге. Такая система уравнений называется
циклической. Приведём текст программы, выводящей
на экран то, что мы называем фрактальным
попкорном. PROGRAM POPCORN;
USES
GRAPH,DOS,CRT;
VAR
Q,W,X,Y,XX,YY: REAL;
N : INTEGER;
C: CHAR;
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;
BEGIN
GRINIT;
SETFILLSTYLE(1,15)
;
{3}
BAR(0,0,640,480)
;
{4}
Q:=210
;
REPEAT
W:=180;
REPEAT
X:=Q ;
Y:=480-W ;
{2}
N:=1 ;
{3}
REPEAT
{4}
XX:=X+0.75*SIN(Y+SIN(3*Y)/COS(3*Y))
;
YY:=Y+0.75*SIN(X+SIN(3*X)/COS(3*X))
;
SETCOLOR(TRUNC(N/5000)+8)
;
IF KEYPRESSED THEN
EXIT ;
LINE(TRUNC(X),TRUNC(Y),TRUNC(1*XX),TRUNC(1*YY))
;
X:=XX ; Y:=YY ;
N:=N+1 ;
UNTIL N>30000 ;
{5}
W:=W+80 ;
UNTIL W>300 ;
Q:=Q+40 ;
{7}
UNTIL Q>560 ;
C:=READKEY;
END.
Как видно из текста
программы, новые координаты получены
прибавлением к старым шага (
у нас он равен 0.75 – можно поменять), умноженного
на синус, аргументами которого является сумма
другой координаты с тангенсом утроенной другой
координаты. Такая замысловатая зависимость
заставляет линию на каждом шаге ломаться и
поворачиваться. Тангенс, не включённый во
встроенные функции Паскаля, представлен частным
от деления синуса на косинус. Вертящаяся линия,
сделав цикл из 30000 шагов и замазав некоторую
область, начинает с новой начальной точки. В
прилагаемом рисунке всё построено чёрным цветом,
а в тексте программы видно, что цвет зависит от
номера счётчика цикла и меняется через каждые 5000
шагов, фрактальная змейка получается
раскрашенной.В отличие от Пикоувера, наша
программа рисует не пикселями, а отрезками
прямых линий. Предлагаем читателям попробовать
поменять параметры программы и полюбоваться на
замысловатые узоры. Графика Пикоувера уже не раз
привлекала внимание общественности. Его работа
обсуждалась не только в различных журналах, но и
на телевидении; полученные им изображения
демонстрировались даже на выставках в Швейцарии,
Японии и в экспозиции музея вычислительной
техники в Бостоне. Остаётся только выразить
благодарность таким замечательным
программистам-художникам, дающим всем нам лишний
повод насладиться общением с компьютером. |