L 系统树无法正确分支
L-System tree won't branch correctly
我尝试使用 SFML 在 c++ 中实现 L 系统,但由于某种原因它没有按预期工作。
我尝试复制这个程序: https://www.youtube.com/watch?v=E1B4UoSQMFw?t=1256 除了分支之外,一切正常。在时间戳 (20:56( 处,您可以看到树分支为两个分支,这两个分支分别分支。
但是,由于规则,这应该是不可能的(可以保存位置/旋转以创建新分支,但它一次只能保存一个位置,因此无法在分支内多次分支(
在我的程序中,而不是像预期的那样在两个分支中分支,这些分支单独分支只有一个分支(右一个(分支。 但是为什么他的代码会产生完全不同的结果,而这个规则集不应该这样做呢?
您实现了具有以下字母表的 L 系统:
字母:F+-[]
以及以下规则:
规则1:F
→FF+[+F-F-F]-[-F+F+F]
字母字符的含义非常像图形,如下所示:
F
向前移动 1 个单元并边走边画一条线。+
顺时针转动-
逆时针旋转[
将当前状态推送到堆栈上。]
从堆栈中弹出状态并使其成为当前状态。
这要求您知道什么是堆栈。
您可以看到,由于规则的方括号内有一个 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]]
[...............................................................] [...............................................................]
在应用海龟图形解释时,当我们遇到第二个[
时 遇到]
,我们现在将在堆栈上保存多个状态。 可以保存任意数量的状态。 堆叠是"先进后出",就像堆叠板一样,您只能访问堆栈顶部的板。 每次你用[
推动状态时,就像在盘子堆中添加一个盘子一样。 当您看到]
时,您将顶板从堆栈中移除。 以这种方式从堆栈顶部取出盘子就是弹出它。 在这种情况下,每个板块代表被推时的状态。 弹出状态会将的位置和方向恢复到保存的位置。
相关文章:
- C++,系统无法执行指定的程序
- 在UNIX系统中使用DIR查找文件的字节大小
- IPC使用多个管道和分支进程来运行Python程序
- 错误处理.将系统错误代码映射到泛型
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 如何删除peer if else分支中的冗长句子
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 在C++游戏中与库存系统作斗争
- 文件系统:复制功能的速度秘诀是什么
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 在gtest.中使用fff.h模拟系统API
- 如何正确地将分支添加到已存在的树中
- 如何制作无限制照明系统
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 如何将分支添加到已存在的TTree:ROOT
- 如何传递多个 std::文件系统选项?
- 遍历顺序由 std::文件系统directory_iterator给出
- C++系统找不到指定的文件错误
- L 系统树无法正确分支