Орнамент - один из наиболее ярких, знаковых элементов нашей национальной культуры. Меня давно привлекал белорусский орнамент, но не столько своей эстетической или исторической ценностью, сколько своей, если можно так выразиться, синергетичностью и поразительным сходством со структурами, которые возникают в результате компьютерных опытов с различными клеточными автоматами. Несмотря на то, что орнамент представляет собой своеобразную визитную карточку нашей культуры и даже является частью национального флага, найти какую-нибудь серьёзную научную литературу о его структуре, элементах и происхождении оказалось совсем непростым делом. Поиски в интернете ничем не увенчались. Даже запись и поход в Национальную библиотеку не принес желаемых результатов. Впрочем, сама экскурсия и знакомство с внутренним убранством этого прекрасного архитектурного творения с лихвой компенсировали потраченное на бесплодные поиски время. Удача пришла неожиданно. Совершенно случайно я заметил на полке книгохранилища библиотеки Института правоведения контрольный экземпляр книги "Орнаменты Поднепровья"1. Наконец мне удалось найти полноценный научный соответствующего уровня и качества труд по интересующему меня вопросу. В книге, снабжённой множеством тщательно собранных и обширных фотоматериалов, анализируется своеобразный язык белорусского национального орнамента. Я с удовольствием и увлечением набрасывал фрагменты кода для построения отдельных его элементов, которые часто можно представить как какое-то n-е (второе, третье, четвёртое или даже девятое) поколение того или иного, как правило, немудрёного клеточного автомата. В целом же, на базе элементов белорусского национального орнамента можно запросто написать увлекательный учебник по информатике с основами алгоритмизации и программирования. Хрясты. Хрэшчык. Васьмiрог. Вочкi... (рис.1).
Рис. 1 |
Традиционный геометрический белорусский орнамент, несомненно, красив. Он абстрактен и сложен, а его язык крайне богат, но, вместе с тем, алгоритмически лаконичен. Всё богатство его элементов построено по остроумным и схожим алгоритмам, можно даже сказать, своеобразной модификации одного алгоритма. Не в этом ли кроется загадка красоты вообще? Красиво то, что сложно, но, вместе с тем, в своей основе и логике организовано и построено по некоему простому единому принципу. Может, в этом вся суть и тайна целесообразности и соразмерности природы, воспринимаемая нами как красота.
А тут ещё друг завёл меня на выставку изделий УП "Скарбнiца", подоспевшую в галерее во Дворце Республики, некоторые картинки с которой вдохновили меня на дальнейшие опыты. Там мне, уже немного теоретически подкованному, удалось увидеть кое-что из прочитанного воочию, да ещё одетым на прекрасных, юных, грациозных девушках...
Кроме традиционного и современного стилизованного костюма, на выставке были представлены замечательные гобелены. Их я бы охарактеризовал как выдержанные в стиле оп-арт (направление в авангардной живописи, называемое оптическим искусством или оп-артом). Впрочем, они также были навеяны традиционными мотивами народного белорусского изобразительного искусства (рис.2).
Рис. 2 |
После посещения выставки мне захотелось воспроизвести характерный рисунок гобеленов программным способом на своём компьютере. Специалист по программированию компьютерной графики, наверное, предложил бы какое-то общее математическое решение, специалист по какому-либо графическому редактору, вероятно, применил бы какую-то опцию в известной ему программе. Но меня интересовал не столько сам по себе прагматичный результат, сколько желание познать сущность понравившейся формы, проникнуть в её логику и прояснить для себя её смысл и строение.
Я рассуждал следующим образом. В основе рисунка лежит клеточное поле с чередующимися тёмными и светлыми ячейками, как на шахматной доске. Поэтому начинать программу следует с построения такого рода подобия шахматной доски. Я решил задачу при помощи двух вложенных циклов следующим образом:
n = 55 m = 55 h = 10 Y1 = 0 For i = 1 To n X1 = 0 Y2 = Y2 + h For j = 1 To m X2 = X1 + h c = ((i + j) Mod 2) * 255 Line (X1, Y1)-(X2, Y2), RGB(c, c, c), BF X1 = X2 Next j Y1 = Y2 Next i
Данный программный код генерирует шахматную доску размером n*m клеточек, каждая из которых представляет собой чёрный или белый квадратик со стороной в h пикселов. Чередование чёрных и белых полей в шахматном порядке обеспечивается путём умножения 255 на остаток от деления суммы номера столбца и номера строки на 2.
Отличие простого прямолинейного шахматного узора от узора на гобеленах заключается в том, что размеры полей на гобеленах неодинаковы. Длина и ширина клеточек изменяется как по горизонтали, так и по вертикали. Причём изменения размеров клеточек происходит в строке и столбце по определённому периодическому закону, сперва увеличиваясь, а потом уменьшаясь. Важно также, что длина и ширина клеток остаётся постоянной в пределах одной строки и одного столбца, соответственно. То есть в приведенном выше фрагменте программного кода изменениям должен подвергнуться шаг h, как периодическая функция от i в цикле по i, и от j в цикле по j. То есть, результирующая программа может иметь вид:
n = 55 m = 55 h = 10 Y1 = 0 For i = 1 To n X1 = 0 Y2 = Y2 + Abs(h * Sin((i / n) * 2 * 3.14)) For j = 1 To m X2 = X1 + Abs(h * Sin((j / m) * 2 * 3.14)) c = ((i + j) Mod 2) * 255 Line (X1, Y1)-(X2, Y2), RGB(c, c, c), BF X1 = X2 Next j Y1 = Y2 Next i
Результат её работы приведен на рисунке 3.
Рис. 3 |
Он в значительной степени по своей структуре воспроизводит логику рисунка столь впечатливших меня гобеленов. Если вы будете пробовать воспроизвести данные опыты на своих компьютерах, используя Visual Basic, не забудьте изменить единицы измерения экранного пространства формы (или того объекта, на который будете выводить результат) с твипов на пикселы. Если вы будете использовать рекомендованный мной ранее для написания небольших учебных программ SmallBASIC, то код немного видоизменится:
n = 55 m = 55 h = 10 Y1 = 0 For i = 1 To n X1 = 0 Y2 = Y2 + Abs(h * Sin((i / n) * 2 * 3.14)) For j = 1 To m X2 = X1 + Abs(h * Sin((j / m) * 2 * 3.14)) c = ((i + j) Mod 2) * 15 rect X1, Y1, X2, Y2, c filled X1 = X2 Next j Y1 = Y2 Next i
Ниже приведены еще несколько фрагментов гобеленов, которые также представляются интересными не только с чисто эстетической, но с алгоритмической точки зрения (рис.4).
Рис. 4 |
Для самостоятельной работы могу порекомендовать вам также задействовать цвет. Можно, например, заставить меняться по различным законам не только размеры полей, но и их тон, что может породить дополнительные весьма интересные оптические эффекты.
А.КОЛЕСНИКОВ,
andr61@mail.ru
1 Арнаменты Падняпроўя / аўт. тэксту Г.Р.Нячаева I iнш.; навук. рэд. Я.М.Сахута; фота А.В.Чыжова, Г.Р.Нячаевай. - Мн.: Бел. Навука, 2004. - 606 с.
Горячие темы