3

Это мой первый пост в потоке стека. Недавно я начал читать книгу под названием «Алгоритмическая красота растений», где в главе 1 он объясняет систему L. (Вы можете прочитать главу here).L Системный узел Пример перезаписи

Так как я понимаю, существуют два типа L-систем. Edge rewriting и перезаписи узлов.

Edge rewriting относительно прост. Существует исходный многоугольник стартера и генератор. Каждое ребро (сторона) исходного многоугольника будет заменено генератором.

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

С интерпретации черепахи это стандартные правила

F : Move turtle forward in current direction (initial direction is up) 
+ : rotate turtle clock wise 
- : rotate turtle anti clock wise 
[ : Push the current state of the turtle onto a pushdown operations stack. 
    The information saved on the stack contains the turtle’s position and orientation, 
    and possibly other attributes such as the color and width of lines being drawn. 
] : Pop a state from the stack and make it the current state of the turtle 

Так рассмотрим пример, как показано на этом сайте. http://www.selcukergen.net/ncca_lsystems_research/lsystems.html

Axiom  : FX 
Rule  : X= +F-F-F+FX 
Angle  : 45 

так at n=0 (игнорировать X в аксиоме)

его просто F означает, что прямая линия, направленная вверх.

at n=1

заменить X в аксиоме с правилом

Ж + FF-F + F (не обращая внимания на X, в конце концов снова)

выход этого

http://www.selcukergen.net/ncca_lsystems_research/images/noderewrite.jpg 

простой пример с одним правилом в порядке. но в книге «Алгоритмическая красота растений» на стр. 25 есть некоторые правила, которые я не уверен, как интерпретировать.

X 
X = F[+X]F[-X]+X 
F = FF 

Посмотрите это изображение.

https://lh6.googleusercontent.com/g3aPb1SQpvnzvDttsiiBgiUflrj7R2V29-D60IDahJs=w195-h344-no 

at n=0

только 'X'. не уверен, что это означает, что

at n=1

претендуете правило 1 (Х-> F [+ X] F [-X] + X): F [+] F [-] + игнорируя все X. это просто прямая линия.

применение правило 2 (F-> FF): FF [+] FF [-]. это просто прямая линия.

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

Я нашел онлайн L-system generator, который я думал, что поможет мне понять это лучше, так что я введен то же значение, а вот как выглядит результат при п = 1

https://lh6.googleusercontent.com/-mj7x0OzoPk4/VK-oMHJsCMI/AAAAAAAAD3o/Qlk_02_goAU/w526-h851-no/Capture%2B2.PNG 

выход, безусловно, не является прямым и худшая часть имеет 5 строк, что означает, что в окончательном уравнении вывода должно быть 5 F.

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

Извините за длинный пост и ссылки в предметке. я не могу опубликовать более двух ссылок. Спасибо за то, что у вас есть терпение почитать его сверху донизу.

+0

это важно различать команды (буквы в вашем случае), которые определяют, как рисовать фрактал от тех, которые используются только в мутации правила. «Х» здесь последний, тогда как остальные - первые. Таким образом, вы не можете просто «игнорировать» X, но вы не рисуете его, он не оказывает заметного влияния на фрактал на вашем экране, но он будет использоваться во время мутации правила, чтобы получить следующее поколение. Таким образом, 'FX' означает нарисовать линию и игнорировать X. Но тогда вы мутируете, а F означает, что F и X означает' + F-F-F + FX'. –

+0

Да. я имел в виду игнорировать рисование на экране, но он будет использоваться при создании следующего правила мутации. я понял это с первого примера. но посмотрите на пример из книги. Я не могу понять, как происходят итерации. Если вы можете показать мне, как выглядит первая итерация и вторая итерация, это было бы очень полезно. спасибо –

+0

Это простое правило замены. При генерации n (x) вы берете n (x-1) и для каждого символа в нем, что у вас есть правило подстановки, вы подставляете его для значения правила. При n (0) = «FX» и «X = + F-F-F + FX» n (1) становится «F + F-F-F + FX». n (2) становится «F + F-F-F + F + F-F-F + FX», каждый раз, когда вы заменяете каждый X своим значением (которое включает новый X). Могут быть несколько правил замены, поэтому вы, как правило, прокручиваете входной символ за раз, и если у вас есть подстановка для этого символа, выведите его, иначе просто выведите символ. –

ответ

4

Системы L очень просты и полагаются на текстовые подстановки.

С этой исходной информацией:

Axiom  : FX 
Rule  : X= +F-F-F+FX 

Тогда в основном, для производства следующего поколения системы берут предыдущее поколение и для каждого символа в нем вы применяете замены.

Вы можете использовать этот алгоритм для получения генерации:

  • Для каждого символа в предыдущем поколении:
    • Проверьте, если есть правило подстановки для этого персонажа
      • ДА: добавьте замена
      • НЕТ: Добавить оригинальный символ

Таким образом:

n(0) = FX 

      +-- from the X 
      | 
     v---+---v 
n(1) = F+F-F-F+FX 
    ^
     +- the original F 

Если бы вы это начать вместо этого:

Axiom : ABA 
Rule : A = AB 

Тогда вы бы это:

 +--------+ 
     |  | 
n(0) = ABA  | 
     | |  | 
     | ++  | 
     | |  | 
     vv vv  | 
n(1) = ABBAB  | 
     ^  | 
     +-------+ 

В принципе:

  • Для каждого А в поколения X, при производстве поколения X + 1, выходной АВ
  • Для каждого иного характера, не правило, только вывод, что характер (это обрабатывает все Б)

Это было бы система, которая удваивает длину для каждого поколения:

Axiom : A 
Rule : A = AA 

бы создать:

n(0) = A 
n(1) = AA 
n(2) = AAAA 
n(3) = AAAAAAAA 
+0

с учетом этих правил, пожалуйста, скажите, пожалуйста, n (1) и n (2) итерации. Х X = F [+ X] F [-X] + X F = FF согласно моему пониманию я просто должен заменить п (0) = Х п (1) = FF [+ X, ] FF [-X] + X , если я нарисую это, тогда он будет выглядеть как прямая линия с длиной 4 единицы. но в генераторе выход выглядит по-другому. n (2) = –

+0

извините, мой плохой. фактическое n (2) уравнение дает правильный результат, как показано в онлайн-генераторе l-системы на итерации 1. Это источник всей моей путаницы благодаря этому объяснению. сделал для меня множество вещей. (http://www.kevs3d.co.uk/dev/lsystems/) –

+0

одно сомнение, хотя, если существует более одного правила, порядок подстановки должен быть таким же, как и порядок правил? или это может быть любого порядка? –