Context Free Art

scrptn

Пользователь
Context Free - программа, генерирующая изображения по набору инструкций, называемому грамматикой. Программа, следуя инструкциям, за секунды создает изображения, содержащие миллионы геометрических форм.

См. галлерею, а вот всего лишь три работы, которые я выбрал при беглом осмотре:







Это так круто, что даже трудно поверить.
 

scrptn

Пользователь
Немного подробностей.

"Context free" = "контекстно-свободный". Дело в том, что в теории формальных языков выделяют несколько видов грамматик (см. Иерархия Хомского). Контекстно-свободные грамматики - это такой вид грамматик, где символы (абстрактные, не обязательно только буквы/цифры) имеют одно и то же значение независимо от контекста, т.е. окружающих символов. Именно контекстно-свободные грамматики лежат в основе большинства языков программирования (но не всех и не всегда).

Язык, используемый в Context free представляет собой набор правил, называемый грамматикой.

Каждое правило может содержать в себе другие правила, примитивы и само себя (точнее, рекурсивный вызов себя). Правила могут иметь одинаковые имена, в этом случае получаем недетерминированное правило, где каждая версия выбирается случайно (с учетом весовых коэффициентов).

Язык содержит несколько простых примитивов, средства для работы с цветом, механизм повторения узора (tiling, плитка), масштабирования/вращения/скоса фигур (см. Афинные преобразования), средства рисования кривых (отрезки, кривые Безье) и заливки цветом. В общем, стандартный для процедурной графики набор.

Характеристики языка:
  • декларативный на уровне правил: описывается желаемый результат (набор правил типа "цветок - это шесть лепестков с такими-то параметрами"), а не способ его получения.
  • императивный на уровне рисования кривых: описывается способ рисования кривой (глаголами типа "передвинуть", "нарисовать" и т.п.)
  • поддержка модульности посредством директивы include - отдельные правила можно помещать в отдельные файлы для повторного использования
  • поддержка рекурсии (во-видимому, бесконечной) и циклов
  • стандартный набор арифметических/тригонометрических операций, по-видимому, нерасширяем

Для полноценного использования языка необходимо знать:

В общем, язык не самый сложный, но довольно интересный. Как можно видеть выше, результат в большей степени ограничен фантазией, чем возможностями контекстно-свободной грамматики.
 

Party

Active Member
Очень красиво. Почему-то мне больше всего понравилась эта черная "растекающаяся" площадка.







Ассоциативное искусство.

А сколько фракталов!

 

scrptn

Пользователь
[quote name='Party' post='511481']А сколько фракталов![/quote] Собственно, фракталами можно назвать все, что ты прикрепила к сообщению, но тут есть проблема:

Фрактал - геометрический объект с дробной ("фрактальной", обратной "интегральной", целой) размерностью. Я считаю неправильным отождествлять фракталы и самоповторяющиеся структуры.

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

Party

Active Member
scrptn написал(а):
Собственно, фракталами можно назвать все, что ты прикрепила к сообщению, но тут есть проблема:

Фрактал - геометрический объект с дробной ("фрактальной", обратной "интегральной", целой) размерностью. Я считаю неправильным отождествлять фракталы и самоповторяющиеся структуры.
Я и не отождествляла. Но последнее очень похоже на фрактал, ну точно фрактал. Ну может быть еще и первое.
scrptn написал(а):
Собственно, фрактал - это математический объект, а не его визуальное представление, и тут тоже некоторая путаница в терминах.
Тогда это не фракталы :(
 

scrptn

Пользователь
[member="Party"], кажется, ты отождествляешь фракталы с множествами Мандельброта/Жулиа. А это только один из примеров, видов фракталов очень много.
 

Party

Active Member
Я не уверена, но по-моему ты мне только про эту модель рассказывал. Или я что-то забыла.
 

scrptn

Пользователь
Первый эксперимент:



Код:
startshape Flower

background { h 280 sat .3 b -.85 }

size { s 5 x -.5 y .5 }

rule Flower {
  5 * { r (360/5) y -.8 }
    RedPetal {}
  5 * { r (360/5) y -.8 }
    WhitePetal { x .53 y -.3 r 45 }
}

rule RedPetal {
  10 * { s .7 b .15 y -.05 z .1 } {
    32 * { r -8 x .03}
      CIRCLE { s 1.2 h 0 sat 1 b .3 z 0 }
  }
}

rule WhitePetal {
  15 * { x .1 y .002 r 15 s .8 sat .05 } {
    CIRCLE { s .05 z 1
             h 0 sat 0 b 1 }
  }
  WhitePetal { s .8 y .09 r -5 }
}
 

scrptn

Пользователь


Зависимость есть.

Код:
startshape ColoredSquares

rule ColoredSquares {
  10 * { x 1 } {
    10 * { y 1 } S {}
  }
}

rule S {
  SQUARE { h 87 sat .50 b .25 }
  S { s .2 }
}

rule S {
  SQUARE { h 200 sat .50 b .75 }
  S { s .2 }
}

rule S {
  SQUARE { h 22 sat .75 b 1 }
  S { s .2 }
}
 
Сверху