Давно уже натЫкался на проект http://www.contextfreeart.org, но из-за плохого знания английского, подзабил на него. Но вот сегодня наткнулся на хабро статью mholub-а, ниже она приведена. И вот решил снова попробЫвать :)
Кроме буквЫ "Ы" в статье нечего не изменено :)
http://www.contextfreeart.org - программирование на службе искусства
Пост тем, кто хочет немножко отвлечься от работЫ и поразвлекаться с умом.
Сегодня наткнулся на интереснЫй проект: contextfree
Все помнят курс теории компиляторов с университета? contextfree - генератор изображений на основе [wiki]контекстно-свободнЫх грамматик[/wiki]. Терминалами вЫступают простЫе графические примитивЫ (CIRCLE, SQUARE, TRIANGLE и т.д.). НетерминалЫ задаем мЫ. Правила вЫвода могут включать в себя так назЫваемЫе преобразования (повернуть, отразить, сдвинуть, поменять цвет). На основе этой простой модели можно получать очень интереснЫе вещи.. буквально несколькими строчками кода.
Начнем с простого примера:
Давайте попробуем что-нибудь посложнее. Что-нибудь рекурсивное.
Заметьте, всего несколько строк, а уже что-то красивое :)
Давайте реализуем с вами простейшее рекурсивное дерево. На нем я покажу, что правил вЫвода с одинаковЫми левЫми частями может бЫть несколько, тогда они вЫбираются случайно на основании "веса" правила.
С кодом разобраться уже чуть сложнее, но кому интересно, просто попробуйте...И очень бЫстро вЫ разберетесь.
Ну и наконец то, что получилось у меня.. не очень оригинально, но писал сам, никуда не подглядЫвая :)
Вот такая вот интересная программа.
У нее есть очень маленькая вики.
И фронтэнд на ruby+gnome.
Вот собственно и все. Творческих вам успехов!
---------------[Конец статьи, автору Спасибо]---------------
Скачать: (мир) (локал) (windows)
Для других платформ найдете тут
На ночь глядя решил не мучиться и на калякал такой код:
Мож потом что-нить дельное сделаю :)
Кроме буквЫ "Ы" в статье нечего не изменено :)
http://www.contextfreeart.org - программирование на службе искусства
Пост тем, кто хочет немножко отвлечься от работЫ и поразвлекаться с умом.
Сегодня наткнулся на интереснЫй проект: contextfree
Все помнят курс теории компиляторов с университета? contextfree - генератор изображений на основе [wiki]контекстно-свободнЫх грамматик[/wiki]. Терминалами вЫступают простЫе графические примитивЫ (CIRCLE, SQUARE, TRIANGLE и т.д.). НетерминалЫ задаем мЫ. Правила вЫвода могут включать в себя так назЫваемЫе преобразования (повернуть, отразить, сдвинуть, поменять цвет). На основе этой простой модели можно получать очень интереснЫе вещи.. буквально несколькими строчками кода.
Начнем с простого примера:
Код:
startshape JustASquare //НачальнЫй символ грамматики
background { b -1 } //Здесь мЫ задаем фон. b -1 - означает преобразование
//По умолчанию фон белЫй (brightness = 1), мЫ изменяем brightness до 0.
rule JustASquare { // Здесь мЫ задаем простое правило.
SQUARE { b 1 r 45 } // БелЫй квадрат, повернутЫй на 45 градусов.
}

Давайте попробуем что-нибудь посложнее. Что-нибудь рекурсивное.
Код:
startshape Circles
background { b -1 }
rule Circles {
CIRCLE { b 1 } //Кружочек белого цвета
CIRCLE { s 0.7 } //Кружочек черного цвета поменьше (s - масштаб), чтобЫ получилось кольцо.
Circles { x 1 s 0.9 r 30 } //А вот и реализация рекурсии. Правило вЫвода включает нетерминал.
//Явного вЫхода из рекурсии нет, поэтому рендериться будет до тех пор
//пока это еще полезно — пока не займет один пиксель на экране.
}

Заметьте, всего несколько строк, а уже что-то красивое :)
Давайте реализуем с вами простейшее рекурсивное дерево. На нем я покажу, что правил вЫвода с одинаковЫми левЫми частями может бЫть несколько, тогда они вЫбираются случайно на основании "веса" правила.
Код:
startshape begin
background { b -1 }
rule begin {
tree { b 1 }
}
rule tree { //Это правило в одиночестве нарисует завитушку.
CIRCLE { s 1 2 }
tree { y 1 s 0.99 r 7 b -0.005}
}
rule tree 0.2 { //А это иногда заставляет завитушку виться в другую сторону. Число 0.2 - и есть "вес" правила.
tree { flip 90 }
}
rule tree 0.1 { //Это правило добавляет ветвление.
tree { r 10 }
tree { s 0.5 r -20 }
}

С кодом разобраться уже чуть сложнее, но кому интересно, просто попробуйте...И очень бЫстро вЫ разберетесь.
Ну и наконец то, что получилось у меня.. не очень оригинально, но писал сам, никуда не подглядЫвая :)
Код:
startshape begin
background { b -1 }
rule begin {
tree { x 10 }
}
rule tree {
branch {}
}
rule branch {
CIRCLE { s 0.5 2 b .4 h 120 saturation .7}
branch { y 1 s 0.97 r 3 b -.2 }
}
rule branch 0.1 { //реализация нашего дерева
branch { flip 90 }
}
rule branch 0.3 {
branch { r 3 }
branch {s 0.5 r -30}
}
rule branch 0.01 {
branch2 {}
}
rule branch2 { //Ветвь без ответвлений
CIRCLE { s 0.5 2 b .4 h 120 saturation .7}
branch2 { y 1 s 0.99 r 3 b -.2 }
}
rule branch2 0.1 {
branch2 { flip 90 }
}
rule branch2 0.01 { //Заканчивается цветком
Rose { s 5 }
}
rule Rose { //Подобие цветка, полученное просто спиралевиднЫм закручиванием окружностей..как в нашем втором примере
CIRCLE { b 0.5 saturation 0.7 }
CIRCLE { b 1 s 0.8 saturation 0.7}
Rose { r 45 x 0.5 s 0.95 }
}

Вот такая вот интересная программа.
У нее есть очень маленькая вики.
И фронтэнд на ruby+gnome.
Вот собственно и все. Творческих вам успехов!
---------------[Конец статьи, автору Спасибо]---------------
Скачать: (мир) (локал) (windows)
Для других платформ найдете тут
На ночь глядя решил не мучиться и на калякал такой код:
Код:
startshape webcriiminal
include i_pix.cfdg
background { b -1 }
rule webcriiminal{
point {}
}
rule point {
W_5by5 {b 0.5}
E_5by5 {b 1 x 1.2}
B_5by5 {b 1 x 2.4}
C_5by5 {b 0.5 x 3.6}
R_5by5 {b 1 x 4.8}
I_5by5 {b 1 x 6.0}
M_5by5 {b 1 x 7.2}
I_5by5 {b 1 x 8.4}
N_5by5 {b 1 x 9.6}
A_5by5 {b 1 x 10.8}
L_5by5 {b 1 x 12.0}
point {y 2.0 x 2.2 size 0.6}
point {y -2.0 x 2.2 size 0.6}
}

Мож потом что-нить дельное сделаю :)