这是我在Stack Overflow的第一篇文章。最近我开始阅读一本名为“植物算法之美”的书,在第1章中,他解释了L系统。(您可以在此处阅读该章节。)
所以据我所理解,有两种类型的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
所以n=0
时(忽略公理中的X),它只是一个指向上方的直线。
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
在n=0时
只有'X'。不确定这意味着什么。
在n=1时
应用规则1 (X->F[+X]F[-X]+X):F[+]F[-]+,忽略所有的X。这只是一条直线。
应用规则2 (F->FF):FF[+]FF[-]。这只是一条直线。
最终输出应该是乌龟向上移动四次,据我理解最终输出应该只包含四条直线。
我找到了一个在线L系统生成器,我认为它会帮助我更好地理解这个问题,所以我输入了相同的值,以下是n=1时的输出结果。
https://lh6.googleusercontent.com/-mj7x0OzoPk4/VK-oMHJsCMI/AAAAAAAAD3o/Qlk_02_goAU/w526-h851-no/Capture%2B2.PNG
输出绝对不是一条直线,最糟糕的是它有5条线,这意味着最终输出方程中应该有5个F。
帮我理解这个节点重写。如果不理解这个,我就无法进一步阅读这本书。
抱歉发了这么长的帖子,并且在pre标签中放了链接。我不能发布超过2个链接。
X
属于后者,而其余部分属于前者。因此您不能只是“忽略”X,但您不会绘制它,因为它对您屏幕上的分形图形没有可见影响,但它将在规则变异期间用于生成下一代。因此,FX
表示绘制一条线,并忽略X。但随后当您进行变异时,F表示为F,而X表示为+F-F-F+FX
。 - Lasse V. Karlsen