3

這是我在stackover流程中的第一篇文章。 最近我開始閱讀名爲「植物算法之美」的書,在第1章中他解釋了L系統。 (您可以閱讀章節here)。L系統節點重寫示例

據我所知,有兩種類型的L系統。邊緣重寫和節點重寫。

邊緣重寫相對非常簡單。有一個初始的起始者多邊形和一個發生器。初始多邊形的每個邊(邊)都將被生成器替換。

但是這個節點重寫是非常混亂的。從我所蒐集到的情況來看,有兩個或更多的規則,每次迭代都會用規則中的變量替換它們的常量。

龜解釋這些標準規則

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

F + 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(X-> F [+ X] F [-X] + X):F [+] F [ - ] +忽略所有十,這只是一條直線。

應用規則2(F-> FF):FF [+] FF [ - ]。這只是一條直線。

最終輸出應該是烏龜向上移動四次,就我的理解而言。或者最多隻能包含四行。

我發現了一個網上L-system generator,我認爲會幫助我理解這更好的,所以我輸入相同的價值觀和這裏的輸出如何看起來像在n = 1個

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

輸出絕對不是一條直線線和最差的部分它有5條線,這意味着最終輸出方程中應該有5 F.

幫我理解這個節點的重寫。如果不理解這一點,我不能進一步閱讀本書。

對不起,對於很長的文章,以及預標籤中的鏈接。我不能發佈超過2個鏈接。 感謝您耐心閱讀它從上到下。

+0

這是很重要的是區分命令(在你的情況下是字母),它指示如何從那些僅用於規則變異的分形中繪製分形。這裏的'X'是後者,其餘的是前者。因此,您不能只是「忽略」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 -FX」,每次你用每個X的值(包括一個新的X)替換它。可能有多個替代規則,因此您一般會一次循環輸入一個字符,如果您有該字符的替換,則輸出該字符,否則只輸出該字符。 –

回答

4

L系統非常簡單,依賴於文本替換。

有了這個開始信息:

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

那麼基本上,生產出的下一代,你拿上一代系統以及在它的每個字符你申請換人。

您可以使用該算法來生產一代:

  • 對於上一代的每個字符:
    • 檢查,如果我們有該字符替換規則
      • YES:追加替代
      • 否:追加原始字符

這樣:

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,輸出AB
  • 對於每一個其他字符無規則,只要輸出該字符(此處理所有的B的)

這將是在長度加倍每一代系統:

Axiom : A 
Rule : A = AA 

將創建:

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

考慮到這些規則,請你告訴我n(1)和n(2)次迭代。 X X = F [+ X] F [-X] + X F = FF 根據我的理解我只需要更換 N(0)= X N(1)= FF [+ X ] FF [-X] + X 如果我畫這個,那麼它會看起來像4個單位長度的直線。但在發生器中輸出看起來不同。 n(2)= –

+0

對不起,我的壞。實際的n(2)方程給出了正確的輸出,如在迭代1中的I系統在線生成器中顯示的那樣。這是我所有困惑的源頭,感謝解釋。爲我清楚了很多事情。 (http://www.kevs3d.co.uk/dev/lsystems/) –

+0

儘管如此,如果有超過1個規則,替換順序必須與規則順序相同嗎?或者它可以是任何順序? –