[d | an-b-bro-fr-gf-hr-l-m-maid-med-mi-mu-ne-o-old_o-p-ph-r-s-sci-sp-t-tran-tv-w-x | bg-vg | au-mo-tr | a-aa-abe-azu-c-dn-fi-hau-jp-ls-ma-me-rm-sos-tan-to-vn | misc-tenma-vndev | dev-stat]
[Burichan] [Futaba] [Gurochan] [Tomorrow] - [Архив - Каталог - К доске] [Главная]

[Назад]
Ответ
Файл: 1327962751691.png -(210 KB, 500x500)
210 No.2160519  

Привет, Ийчан.

Помнишь тред, в котором мы рисовали картинки, задавая формулы, по которым вычислялись цвета пикселей?

Предлагаю вернуться к этой теме. Есть такая классная программа, называется Context Free. Только это не растровая рисовалка, а векторная. Использовать её очень просто. Ниже я напишу краткий туториал для непрограммистов.

Работает она на всех платформах. Скачать бесплатно без смс: http://www.contextfreeart.org/mediawiki/index.php/Download_page

>> No.2160524  
Файл: 1327962880941.png -(4 KB, 500x500)
4

Язык CF прост как три рубля. Код каждой картинки состоит из описаний фигур, из которых эта картинка состоит. Простейший пример:

shape TRINKET {
CIRCLE []
}

startshape TRINKET

Здесь описана фигура trinket, которая состоит из одного круга. Круг мы не описываем: что это такое, Context Free уже знает. Последняя строчка указывает, что с именно этой фигуры нужно начинать рисование.

В результате получаем... пикрелейтед. Потрясающе.

>> No.2160528  
Файл: 1327962947067.png -(5 KB, 500x500)
5
startshape PICTURE

shape PAWN {
CIRCLE [y 0.4 size 0.6]
TRIANGLE [y -0.4]
}
shape PICTURE {
PAWN [x -1]
PAWN [x 1 size 1.5]
}

В квадратных скобках мы указываем координаты и размер фигур.
Здесь описана фигура «пешка», состоящая из круга (чуть повыше и поменьше) и треугольника (чуть пониже). А фигура «рисунок» состоит из двух пешек, одна левее, другая правее (и побольше).

>> No.2160531  
Файл: 1327963046167.png -(5 KB, 500x500)
5

Тут начинается самое интересное: фигура может включать себя саму. Взгляните:

startshape TENTACLE

shape TENTACLE {
SQUARE []
TENTACLE [y 1 rotate 5 size 0.8]
}

Шупальце состоит из квадрата и ещё одного щупальца, только чуть повыше, поменьше и повёрнутого на пять градусов. А это второе щупальце в свою очередь состоит из квадрата и ещё одного щупальца поменьше. А то щупальце включает в себя ещё меньшее щупальце. И так далее.

Получаем фрактал, то есть самоподобную фигуру. Щупальце здесь включает в себя собственную точную копию.

К слову: язык гораздо лучше воспринимать не как императивный или функциональный, а как декларативный. Мы пишем не функции, которые друг друга вызывают и что-то рисуют, мы именно описываем, что картинка из себя представляет. Если бы это был традиционный язык, в этом примере мы бы получили либо переполнение стека, либо бесконечный цикл.

>> No.2160537  
Файл: 1327963144921.png -(8 KB, 500x500)
8

Дальше ещё интереснее: картинки могут включать неопределённость.

startshape TENTACLE

shape TENTACLE
rule 2 {
CIRCLE []
TENTACLE [y 1 rotate 20 size 0.8]
}
rule 1 {
SQUARE []
TENTACLE [y 1 rotate 20 size 0.8]
}

Теперь для нашего щупальца есть два правила: в первом сегмент щупальца будет кругом, во втором — квадратом. При этом первое правило будет использоваться в два раза чаще второго.

%%А если бы мы добавили ещё одно правило rule 4 { ... }, то оно бы выпадало вдвое чаще первого и в четыре раза чаще второго. Ну, вы поняли.%%

Мы не знаем когда именно какое правило будет использоваться. И все картинки, нарисованные по этой инструкции, будут иметь разный порядок фигур. Но в целом кругов будет вдвое больше чем квадратов.

>> No.2160539  
Файл: 1327963289897.png -(13 KB, 500x500)
13

Цвет задаётся в тех же квадратных скобках тремя параметрами: hue, saturation и brightness: http://ru.wikipedia.org/wiki/HSV_(цветовая_модель)

startshape TENTACLE

CF::Background = [brightness -1.0]

shape TENTACLE
rule 9 {
CIRCLE [hue 60..180 saturation 1.0 brightness 0.7]
TENTACLE [y 1 rotate 20 size 0.9]
}
rule 1 {
TENTACLE [flip 90]
}

Случайными могут быть любые числа. Так, здесь мы не даём точного значения цвету круга. Мы просто говорим: тон цвета должен быть где-то между 60 (жёлтый) и 180 (бирюзовый).

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

Вторая строчка задаёт фон всего рисунка.

>> No.2160546  
Файл: 1327963510381.png -(69 KB, 500x500)
69
startshape TREE [brightness 1.0 saturation 0.5 hue 100]

CF::Background = [brightness -1.0]

shape TREE
rule 1 {
CIRCLE []
TREE [y 1 rotate -30 size 0.8 hue -40..40]
TREE [y 1 rotate 30 size 0.8 hue -40..40]
}
rule 1 {
CIRCLE []
TREE [y 1 size 0.8]
}

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

>> No.2160549  

>>2160531
Чем-то похоже по идее на Хаскель с его "ленивым" описанием бесконечных множеств.

>> No.2160550  
Файл: 1327963697821.png -(1320 KB, 1280x1280)
1320

Вот и все основные понятия CF. Подробная документация по языку есть тут: http://www.contextfreeart.org/mediawiki/index.php/CFDG_HOWTO

Меня дальнейшие эксперименты с деревом привели к вот такому результату. Здорово, что программу можно запускать сколько угодно раз и каждый раз получать разный результат.

Исходный код: http://rghost.net/36237505

>> No.2160556  

>>2160549
В чём-то да.

>> No.2160905  
Файл: 1328008760565.png -(331 KB, 700x700)
331
startshape picture
CF::Background = [brightness -1 hue 0 saturation 0]
CF::Size = [s 2]
shape picture {
sky [z -10 size 2.9 saturation .3 hue 220 brightness .7]
stem [brightness 1 saturation 0 size .01 rotate 30]
stem [brightness 1 saturation 0 size .01 rotate 150]
stem [brightness 1 saturation 0 size .01 rotate 270]
}
shape stem
rule 3.8 {
CIRCLE [size 10]
stem [y 1 rotate 1 size .995 saturation .005 brightness -.003 hue -.2]
}
rule 1 {
feather [[x .3 rotate 60..90 size 10 z -1 hue -20 brightness -.2 saturation .3]]
stem []
}
rule 1 {
feather [[x -.3 rotate -90..-60 size 10 z -1 hue -20 brightness -.2 saturation .3]]
stem []
}
shape feather {
CIRCLE []
feather [y .1 z -.01 rotate 1.5 size .98 brightness -.025 saturation .025 hue -1 alpha -.05]
}
shape sky {
loop 128 [size .995 brightness -.022 hue 1 saturation .022] CIRCLE []
}
>> No.2160917  

>>2160905
Бог, кончай. Ты и в прошлый раз проxyячился с эдиакарой, и сейчас у тебя ниxyя не получится.
http://en.wikipedia.org/wiki/Trilobozoa

>> No.2161619  
Файл: 1328085672927.png -(22 KB, 500x500)
22
startshape enso[rotate 0..360]
shape enso 
rule 1 { thick[size 3] CIRCLE[x -1..1 size 2..6 2..6] enso[x -0.6..-1.4 size 1.029] }
rule 0.1 {}
shape invisible
rule 1 { invisible[y .2 rotate -1] }
rule 0.1 { thin[] }
rule 0.01 {}
shape thin
rule 1 { CIRCLE[size 0.1..0.3 1] thin[y .2 rotate -1] }
rule 0.03 { medium[] }
rule 0.03 { invisible[] }
shape medium
rule 1 { CIRCLE[size 0.3..0.45 1.6 y -.2] CIRCLE[size 0.4..0.7 .8] CIRCLE[size 0.3..0.45 1.6 y .2] medium[y .2 rotate -1] }
rule 0.01 { thick[] }
rule 0.15 { thin[] }
shape thick
rule 1 { CIRCLE[size 0.95..1.1 1.5] thick[y .2 rotate -1] }
rule 0.015 { medium[] }
>> No.2161623  

>>2161619
Круто, а неровноты туда можно добавить?

>> No.2161640  

>>2161623
Пытался. У меня пока не получилось это сделать так, чтобы весь символ не разъехался в разные стороны.

>> No.2161893  
Файл: 1328102813120.png -(434 KB, 700x700)
434
startshape painting [hue 0..360]
CF::Size = [size 1]
CF::MinimumSize = 5
shape painting
rule { canvas [] }
rule { canvas [rotate 90] }
rule { canvas [rotate 180] }
rule { canvas [rotate 270] }
shape canvas {
transform [x -.45 y .5 saturation .3 alpha -.5]
loop 10 [x .1 hue -60..60 saturation -0.2..0.2]
loop 50 [y -.02 hue -10..10 saturation -0.1..0.1]
blob [z -.1 size 0.06..0.25 brightness 0.75..1.0]
}
shape blob 
rule {
brush []
blob [[rotate 0..360 y .5 size 0.2..0.6]]
blob [[rotate 0..360 y .5 size 0.2..0.6]]
blob [[rotate 0..360 y .5 size 0.2..0.6]]
}
rule { brush [] }
shape brush
rule { CIRCLE [] }
rule { SQUARE [] }
rule { TRIANGLE [] }
>> No.2161897  
Файл: 1328102919906.jpg -(366 KB, 900x2500)
366

>>2161893

Тема больше никому не интересна?

>> No.2161904  

>>2161897
Слишком много матна.

>> No.2161921  

>>2161904
Как раз не так уж и много, в треде >>1923478 его было куда больше. Здесь важнее пространственное мышление.

>> No.2161944  
Файл: 1328104316795.png -(32 KB, 270x270)
32

>>2161897
Интересна, вот только фантазию совсем ампутировали.

>> No.2161997  

>>2161897
Выглядит круто, но слишком ракетная физика для меня.



Удалить сообщение []
Пароль
[d | an-b-bro-fr-gf-hr-l-m-maid-med-mi-mu-ne-o-old_o-p-ph-r-s-sci-sp-t-tran-tv-w-x | bg-vg | au-mo-tr | a-aa-abe-azu-c-dn-fi-hau-jp-ls-ma-me-rm-sos-tan-to-vn | misc-tenma-vndev | dev-stat]
[Burichan] [Futaba] [Gurochan] [Tomorrow] - [Архив - Каталог - К доске] [Главная]