L系统树无法正确分支

问题描述 投票:-1回答:1

我试图用SFML在c ++中实现L系统,但是由于某些原因,它无法按预期工作。

我尝试复制此程序:https://www.youtube.com/watch?v=E1B4UoSQMFw?t=1256除分支外,一切都正常。在时间戳记(20:56),您可以看到树分支成两个分支,并且这两个分支分别分支。

但是,由于规则的原因,这是不可能的(乌龟可以保存位置/旋转来建立新的分支,但是一次只能保存一个位置,因此不可能在一个分支内多次分支)

在我的程序中,而不是在两个分别分支的分支中分支,正如预期的那样,仅进一步分支中的一个分支(右一个)。但是,为什么他的代码却产生了完全不同的结果,而这个规则集不可能做到这一点?

c++ turtle-graphics fractals
1个回答
0
投票

您使用以下字母实现了L系统:

字母:F+-[]

以及以下规则:

规则1:FFF+[+F-F-F]-[-F+F+F]

字母字符的含义非常像乌龟图形,如下所示:

  • [F向前移动1个单位,并随行画一条线。
  • +顺时针旋转
  • -逆时针旋转
  • [将当前状态压入堆栈。
  • ]从堆栈中弹出状态并将其设为当前状态。

这要求您知道stack是什么。

您可以看到,因为规则中的方括号内有一个F,所以在第二代中将如何嵌套嵌套的方括号。

(对不起,下面的长线,但是这是一个很长的规则,打破这条线会造成混乱。只需向右滚动。)>] >>

FF+[+F-F-F]-[-F+F+F]FF+[+F-F-F]-[-F+F+F]+[+FF+[+F-F-F]-[-F+F+F]-FF+[+F-F-F]-[-F+F+F]-FF+[+F-F-F]-[-F+F+F]]-[-FF+[+F-F-F]-[-F+F+F]+FF+[+F-F-F]-[-F+F+F]+FF+[+F-F-F]-[-F+F+F]]
                                         [...............................................................] [...............................................................]

当应用海龟图形解释时,当我们在遇到[之前遇到第二个]时,现在将在堆栈上保存多个状态。可以保存任意数量的状态。堆叠是“先进先出”,就像堆叠板一样,您只能访问堆叠顶部的板。每次您用[推入状态时,就像将一个印版添加到印版堆栈中。当您看到]时,请从纸叠中取出顶板。在这种情况下,每个板块都代表乌龟被推入时的状态。弹出状态会将乌龟的位置和方向恢复到保存的位置。

© www.soinside.com 2019 - 2024. All rights reserved.