Виртуальный художник

В старших классах меня заинтересовала процедурная графика — создание изображений посредством лишь алгоритмов, кода. В результате экспериментов у меня получилась интересная программа художник-абстракционист :) Здесь представлены самые интересные её работы, а также немного рассказываю о том, как это устроено.

Abstraction art

Abstraction art

Abstraction art

Изображения состоят из пикселей, маленьких точек, находящихся по координатам X и Y и имеющих свой цвет. Как и всё в компьютере, цвет задаётся численно, а значит, его можно посчитать. И для того, чтобы создать новую работу, моя программа вначале случайным образом строит математическую формулу, которая выражает зависимость цвета от координат. Затем она просто считает цвет для каждой точки!

Abstraction art

При использовании разных соотношений, функций получаются совершенно разные формулы и картинки. Формулы такого вида:
(0.52/((cos(cos(((0.47/Y)+(Z-Z))+((0.48/Z)+(Y/0.15)))+((cos(Z+X)*(Z/X))-((Z+0.52)/(0.27*Z))))+((cos((0.78/Z)+cos(Y+0.45))-((Y*0.45)+(0.60*0.63)))-sin(cos((0.71*Z)+sin(0.57+0.90))+(cos(Z+0.68)-(0.30-0.39)))))-(sin(((sin(Y+X)/cos(Z+0.45))+(cos(Z+Z)+(0.22/0.06)))+((cos(X+Z)*(0.20-Y))-((X/0.82)*(0.22+Z))))*cos(sin(sin((0.84*Z)+(X-0.85))+(cos(X+Y)+(Z-Y)))+((cos(0.25+Z)*(0.57+Z))+sin((X*Z)+sin(X+Y)))))))+(0.40-0.14))+((0.60-((cos(cos(((0.47/Y)+(Z-Z))+((0.48/Z)+(Y/0.15)))+((cos(Z+X)*(Z/X))-((Z+0.52)/(0.27*Z))))...

Если кому интересно, программа написана на языке программирования C++ с простой библиотекой для записи PNG-файлов. Также, в ней всего лишь несколько классов (число, переменная, выражение) и рекурсивная функция, которая строит случайные формулы. Глубина вложенности составляет порядка восьми уровней, благодаря этому получаются совершенно разные рисунки и узоры.

Abstraction art

Abstraction art

Abstraction art


Крупные изображения — готовые обои для фона на рабочий стол:

Abstraction art

Abstraction art

Abstraction art

Abstraction art

Надеюсь, Вам понравились творения виртуального художника; и если так, то поставьте лайк и поделитесь страничкой с друзьями :) Всего доброго!