這是我在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個鏈接。 感謝您耐心閱讀它從上到下。
這是很重要的是區分命令(在你的情況下是字母),它指示如何從那些僅用於規則變異的分形中繪製分形。這裏的'X'是後者,其餘的是前者。因此,您不能只是「忽略」X,但不會畫出它,它對屏幕上的分形沒有明顯的影響,但它會在規則變異期間用於獲取下一代。所以'FX'意思是劃一條線,忽略X.但是那麼你變異了,F意味着F和X意味着'+ F-F-F + FX'。 –
是的。我的意思是忽略在屏幕上繪製,但它會在生成下一個變異規則時使用。我從第一個例子中明白了這一點。但看看書中的例子。我無法理解迭代是怎麼發生的。如果你能告訴我第一次迭代和第二次迭代看起來是什麼樣子會非常有用。謝謝 –
這是一個簡單的替代規則。當生成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)替換它。可能有多個替代規則,因此您一般會一次循環輸入一個字符,如果您有該字符的替換,則輸出該字符,否則只輸出該字符。 –