Сложная красота в простой формуле

в 6:31, , рубрики: генеративное искусство, динамическая система, занимательное программирование

В детстве мне крупно повезло. Когда я учился в восьмом классе, в нашем доме появился всамделишный компьютер ZX Spectrum 128, который подключался к нашему домашнему телевизору и позволял почувствовать себя программистом. После школы, кое-как разобравшись с уроками, я крепко залипал перед экраном и старался успеть до прихода родителей с работы (телевизор-то на всех один), сотворить что-нибудь сногсшибательное. Творил я тогда на неотъемлемом от компьютера, и даже от его клавиатуры, языке BASIC, а источником вдохновения служили журналы «Наука и жизнь», «Техника молодёжи» и «В мире науки» (перевод «Scientific American»), в которых к концу 80-х начали появляться регулярные рубрики для любителей ЭВМ. В результате многочасового сидения перед телевизором я ожидаемо приобрёл близорукость, однако вместе с очками пришла убеждённость в том, что математика, даже школьная, может быть безумно красивой и интересной!

В ноябрьском номере журнала «В мире науки» за 1986 год появилась статья, в которой рассказывалось, как с помощью очень простых вычислений можно генерировать на экране необычные, сложные и на удивление красивые картины. Речь в ней идёт о функциях на модулярных арифметиках, о динамических системах и клеточных автоматах. Среди прочих приводилась очень простая итерационная схема некоего Барри Мартина, опубликованная им ранее в статье «Graphic Potential of Recursive Functions»:

(x,y) to left( y - mathrm{sign}(x)sqrt{|b x+c|},a - x right).

При многократном применении (итерациях) это преобразование из точки на плоскости порождает множество, обладающее причудливой и гармоничной структурой. Разнообразные картины можно получать, изменяя три параметра ab и c, начальную точку и масштаб изображения. Цвет точек определяется шагом итерации. Алгоритм предельно прост:

x = 0, y = 0
a = 1, b = 3, c = 0
col = 0
while true
  (x, y) = (y - sign(x)*sqrt(abs(b*x + c)), a - x)
  col = col + 1
  if col > 10000
    поменять цвет точки
    col = 0
  end
  нарисовать точку с координатами (x, y)
end
В детстве мне крупно повезло.-2

Тот самый номер журнала до сих пор хранится в домашней библиотеке.
В детстве мне крупно повезло.-2-2
В детстве мне крупно повезло.-2-3
Сложная красота в простой формуле - 8
Сложная красота в простой формуле - 9
Сложная красота в простой формуле - 10

Этот способ генерации сложных картин настолько прост, что я смог реализовать его даже на мучительно медленном Спектруме, получая обалденные изображения, которые называл «салфетками». Ну, а сейчас я за часик набросал для вас интерактивный рисователь «салфеток Мартина», с которым вы можете поиграть сами. А вот тут реализован эффектный «полёт» сквозь это множество.

Я очень рекомендую этот способ генерации изображений тем, кто хочет заинтересовать детей программированием и математикой. Он очень легко кодируется на чём угодно и производит впечатление на зрителей.

Круто, а почему так?

Но что же такого таится в мартиновской формуле, что способно порождать эту красоту? Можно ли как-то объяснить все эти пузыри, ритмичные мотивы, перетекающие друг в друга симметрии? Как вообще анализируют подобные системы?

Занимается этим раздел математики, который называется теорией динамических систем, граничащий с теорией хаоса. Я не буду здесь глубоко влезать в теорию, сосредоточившись на объяснении основных структур, а больше даже — на красивых картинках.

Изобилие параметров в формуле Мартина излишне. Чтобы проявить все существенные свойства этого отображения, достаточно коэффициента b, при фиксированных значениях a =1 и c =0. Таким образом, мы рассмотрим упрощённое преобразование, которое обозначим как M:

 M : (x,y) to left( y - b,mathrm{sign}(x)sqrt{|x|},1 - x right).

Его, в свою очередь, можно представить композицией двух простых преобразований — нелинейного искажения F, которое, не меняя координат x, сдвигает точки вдоль y, как показано на картинке ниже, и поворота на 90° против часовой стрелки R:

begin{eqnarray*}   &M=R circ F\   &R : (x,y) to left( y, 1 - x right),\   &F : (x,y) to left( x, y - b, mathrm{sign}(x)sqrt{|x|} right).\ end{eqnarray*}

Нелинейная трансформация и поворот, образующие преобразование M.

Нелинейная трансформация и поворот, образующие преобразование M.

Коэффициент b приобретает теперь вполне определённый смысл: он отвечает за масштаб нелинейного сдвига. Важной особенностью обоих этих преобразований является то, что они сохраняют площади, а значит и преобразование M, искажая пространство, не сжимает или растягивает его, а только сдвигает и поворачивает. Таким образом, при многократном применении преобразования, точки пространства перемешиваются, не стягиваясь в точку и не разбегаясь на бесконечность.

Преобразования для b=1

Преобразования для b=1

Перемешивание качественно объясняет появление хаотичных областей, в которых не угадывается какой-либо структуры. Однако куда больше хаоса наш глаз привлекают организованные структуры. Обратите внимание на то, как при перемешивании постепенно выявляются три каплеобразные области, которые переходят друг в друга не сильно изменяясь. Они называются резонансами и соответствуют точкам, которые циклично переходят друг в друга под действием нашего преобразования. Вокруг резонансных точек вместо перемешивания происходит только вращение пространства.

Резонансы возникают между поворотом R, который имеет период 4 (через четыре поворота на 90 ° всё точки возвращаются на место) и смещениями нелинейного преобразования F. Из-за этого точки в разной степени недоворачиваются на положенные 90°, а поскольку смещение гладко и неравномерно, то большая часть точек никогда не вернётся на место, сколько их ни крути. Однако, каким-то точкам, всё-таки повезёт, и смещение с последующим поворотом сможет вернуть их через 2, 3, 5, 7 и более итераций. Это явление порождает точки, неподвижные для многократно применяемых преобразований, таких как M^2, M^3 и так далее.

Теперь мы можем детально разобрать происхождение основных элементов «салфетки Мартина», рождающихся из различных начальных точек.

Семейство траекторий для b=1.

Семейство траекторий для b=1.

Хаотические облака происходят в результате перемешивания пространства, а внутри них располагаются «пузыри», окружающие резонансы различного порядка. Эти пустоты на самом деле не пусты, они заполнены кольцевыми орбитами, демонстрирующими не перемешивание, а вращение пространства. Поскольку смещение F гладко, то соседи резонансных точек немного недоворачиваются на каждом цикле, и по мере накопления, результаты итераций заполняют замкнутую орбиту. Это недоворачивание окрестностей резонанса тоже может оказаться в резонансе с периодом преобразования R. В таком случае мы увидим, как овальная орбита сама распадается на цепочку полюсов более высокого порядка. Так на предыдущей картинке образовались симпатичные оранжевые колечки, четвёрками окружающие синие точки резонанса с периодом 17.

Между резонансами и хаотическими областями есть тесная связь. Резонансы порождаются так называемыми эллиптическими неподвижными точками преобразования M, или полюсами, именно они окружены овальными траекториями. Но полюсы не могут появляться сами по себе: окружающие их овальные орбиты неизбежно пересекутся, образуя неподвижные точки другого типа — седловые точки. Эти точки неустойчивы, и соседние с ними точки под действием отображения M экспоненциально разбегаются от седловых точек в разные стороны. Именно это разбегание и порождает хаотические области, которые заполняют пространство между упорядоченными областями, окружающими полюсы. Дело в том, что постоянно разбегаясь от седловых точек, их окресности обречены всё время оказываться замкнутыми в пределах одной сложной структуры: странного аттрактора. Подробнее об этом я рассказывал в серии статей, посвящённых динамическому хаосу.

Седловые точки соединяются особыми орбитами — инвариантными гетероклиническими многообразиями. Звучит, может быть, непонятно, но, согласитесь, красиво. А выглядят эти многообразия ещё красивее!

При любом значении параметра b преобразование F оставляет на месте линию x =0. Именно она и является инвариантным многообразием этого преобразования. После поворота, она превращается в линию y =1, и её отображение преобразованием M выявляет множество всех седловых точек и гетероклинических орбит, которые их соединяют. Смотрите, как красиво они выявляют тонкие структуры хаотических областей для различных значений параметра b:

В детстве мне крупно повезло.-8
В детстве мне крупно повезло.-8-2
В детстве мне крупно повезло.-8-3
Сложная красота в простой формуле - 45
Сложная красота в простой формуле - 46

Наконец, к картине инвариантных многообразий можно добавить красок. Для этого наложим их на карту скоростей с которой каждая точка пространства удаляется от своих соседей под действием преобразования M:

Сложная красота в простой формуле - 48
Сложная красота в простой формуле - 49
Сложная красота в простой формуле - 50
Сложная красота в простой формуле - 51
Сложная красота в простой формуле - 52
Сложная красота в простой формуле - 53
Сложная красота в простой формуле - 54

Для полноты картины здесь можно полюбоваться тем, что происходит с этой красотой при плавном изменении параметра b (осторожно, тяжёлый GIF).

* * *

Ещё со времени моих экспериментов на Спектруме меня не переставало удивлять, как сухая математика позволяет получать элегантные и гармоничные картины, сравнимые по «креативности» с человеческой фантазией или творениями живой природы. Благодаря этому удивлению я и стал профессионально заниматься теорией динамического хаоса, которая помогает наслаждаться красотой не только внешней, но и внутренней — в логике и неожиданных взаимосвязях между разными объектами и концепциями.

Автор: Сергей Самойленко

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js