这是我在stackover流程中的第一篇文章。 最近我开始阅读这本名为“植物的算法之美”的书,在第1章中,他解释了L系统。 (您可以阅读here章节。)
据我所知,有两种类型的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 + F-F-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 [ - ] +忽略所有X.这只是一个直的线。
应用规则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 :(得分: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 |
^ |
+-------+
基本上:
这将是一个每一代人的长度翻倍的系统:
Axiom : A
Rule : A = AA
会创建:
n(0) = A
n(1) = AA
n(2) = AAAA
n(3) = AAAAAAAA