问题标签 [l-systems]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
155 浏览

algorithm - 是否有将 L 系统转换为迭代函数系统的已知算法?

问题陈述如下:

“给定一个具有字母集、公理、一组重写规则和一组与字母集双射的几何规则的 L 系统,我们如何找到等效的迭代函数系统 (IFS) 变换集(其中包括但不穷尽——平移、旋转和缩放)?”

粗略地说,L-System 是一个字符重写系统,您从一个初始字符串(公理)开始,然后根据重写规则继续更改字符。为了给它一个几何解释,您可以关联一个绘图元素并为您提供图表。

这是一个使用 Turtle 生成 Koch 曲线的 L 系统的 Python 实现。

IFS 是一组收缩映射或变换,它们将一个点带到另一个点并尝试逼近变换的吸引子集。

此处给出了生成科赫曲线的 IFS 的 python 实现。它使用枕头库表示为图片。

经过一周的研究,我们得出以下结论:

  • 给定一个具有一组绘制规则的 L 系统,这样的一组变换总是存在的。

但这除了证明存在之外对我们没有帮助。

我们在 python 中分别对 L-Systems 和 IFS 进行了编码以生成相同的分形,但两者之间的关系仍不清楚。

给定具有绘图规则的 L 系统,是否可以生成一种算法来了解(或生成)IFS?如果是,是否已经完成?它是什么?如果不是,为什么不可能?

0 投票
1 回答
29 浏览

python - 为什么这个 L 系统代码不返回字符串?

我正在尝试编写一个程序,该程序接受一个字符串并用其他字符串替换某些字符。(A->AB) 和 (B->A) 在这种情况下。当我运行它时,我希望返回最终的字符串,但没有返回任何内容。

在这个例子中,我希望种子“AB”产生字符串“ABA”,但是没有任何东西返回到控制台。为什么是这样?提前致谢!- 伊莱

编辑:程序编译并且不会产生任何错误。

0 投票
2 回答
80 浏览

python - 为什么这个 L-System 只画一条直线?

我正在尝试编写一个生成字符串的程序,然后根据字符串中的下一个字符绘制某些行。我相信它可以正确生成字符串,因为我已经手动检查了几次迭代,但是我使用的海龟似乎无法正常工作。

例如,下面的代码应该生成谢尔宾斯基三角形,但只画一条直线。

我已经检查过其他 L 系统(例如龙曲线),虽然它没有产生水平线,但结果仍然不正确。字符串似乎是正确的,所以我认为问题在于海龟模块如何解释我的指令。这是我第一次使用该模块,所以如果我遇到了一些非常基本的错误,我不会感到惊讶。

和以前一样,这个例子应该产生谢尔宾斯基三角形,但只产生一条水平线。

作为我认为不值得发表的最后一个快速问题,海龟文档说 speed("fastest") 应该删除所有动画,但事实并非如此,有什么想法吗?谢谢大家的时间!

编辑:我已经用用户建议更新了代码,虽然这为三角形提供了正确的结果,但它仍然为龙曲线提供了不正确的图像。龙曲线的信息是

"变量 : XY 常数 : F + − start : FX 规则 : (X → X+YF+), (Y → −FX−Y) 角度 : 90° 这里,F 表示“向前拉”,- 表示“左转 90° ”,+表示“右转90°”。X和Y不对应任何绘制动作,仅用于控制曲线的演变。

0 投票
1 回答
206 浏览

python - 为什么我的程序没有生成龙曲线?

我编写了一个使用 L 系统绘制分形的程序。它似乎适用于谢尔宾斯基三角形,但不适用于龙曲线。

我知道网站上有一些关于使用海龟图形创建龙曲线的问题,但它们似乎都不是特别适用,所以我打开了我自己的问题。作为海龟指令,我的代码生成的字符串似乎是正确的。我认为问题在于海龟如何解释该字符串。为什么它应该适用于谢尔宾斯基三角形而不适用于龙曲线令人费解,这让我认为我输入的规则是错误的,但是我检查了多个来源,它们似乎是正确的。

我希望看到龙曲线,但是该程序只会产生由线条和框组成的波浪曲线。

0 投票
1 回答
1420 浏览

java - 带有L系统的龙曲线在java中使用递归

我想用 L 系统使用递归在 java 中计算龙曲线直到 n = 10。例如,

如何使用递归在 java 中完成相同的任务?我只对了解递归方法感兴趣。

0 投票
0 回答
23 浏览

procedural-generation - L系统中长度因子的适当用法是什么?

我刚从程序生成开始,我已经制作了一个程序,通过关注Paul Bourke 的网站,使用 D0L 系统生成行。前两个简单的例子效果很好,但是当我输入L-System Leaf的规则时,我的结果是不正确的,正如这张图片所示。

你们中的任何一个更有经验的人能指出我可能出错的地方吗?我很确定我对长度因子的使用有误解。在我的情况下,lengthFactor是一个静态浮点数,在生成开始之前设置一次,用于在当前绘图状态下乘/除线的长度。lenghFactor本身不会在一代中改变。

我正在使用 OpenGL 在 C++ 中进行渲染和编程。

0 投票
1 回答
341 浏览

python - 使用 L-systems 和 Python turtle 生成树

我正在尝试使用 L 系统生成一棵简单的树。但是,当我运行我拥有的代码时:

我在海龟窗口中得到一个奇怪的纹理图案:

龟窗

我怎样才能产生想要的结果?

0 投票
1 回答
54 浏览

postscript - 为什么这个后记代码没有绘制任何东西?

为什么它不起作用?我尝试使用 mac OS 的默认 pdf 查看器运行它,它说它无法将此 eps 文件转换为 pdf(通常可以)。

这段代码分为三部分,第一部分是定义海龟操作的地方。我们希望这个文件允许我们在屏幕上绘制东西。

该文件的第二部分是我指定要绘制的内容的地方。它基于指定的 L 系统的规则。

文件的第三部分是我们要求绘制的地方

它通常应该画一个hexamaze。

0 投票
1 回答
219 浏览

processing - 如何在 L-Systems 树上找到分支的开始/结束顶点?(p5.js)

我试图在一个简单的 L-Systems 树上获取分支端点的 x、y 坐标。这个想法是创建一个p5.Vector(x, y)并将其推送到一个数组。

现在,我可以通过将它们的原点设置为(0,-len)来绘制标记所需点的椭圆,但我有一个问题。当我尝试将 (0, -len) 作为 a 推new p5.Vector(x, y)送到数组时,每个点的 x 坐标都为 0,尽管 y 坐标正确。

我知道这与将坐标转换回(宽度/ 2,高度)有关,但我只是无法弄清楚正确的计算。我什至尝试过tan(angle) * (y1 - y2),但它并不完全正确。蒂亚!

分支端点用椭圆标记的树

0 投票
1 回答
36 浏览

algorithm - 应该如何解释 ~ 以重写植物算法美中 L 系统语法中的模块?

在 The Algorithmic Beauty of Plants中,有一个示例参数 L 系统(第 69 页)显示了番红花的模型:

用于建模番红花的 L 系统规则

我还不能完全弄清楚如何解释~生产中的符号:

p1: a(t) : t<Ta --> F(1)[&(30)~L(0)]/(137.5)a(t+1)

上面描述的文字如下:

生产 p1 描述了由植物顶点 a 产生的连续节间 F 和叶 L。叶子从茎部以 30° 的角度分枝,并围绕主轴旋转,发散角等于 137.5°。

  • &意思是“弯下腰”
  • /意思是“向右滚动”
  • [意味着开始一个新的分支,保存状态
  • ]表示跳回之前的保存状态

我知道它打算表示一个螺旋或扭曲的运动 - 但目前尚不清楚这是否是“移动一点”或呈现多个连续操作的东西,在重写中抛出了许多额外的元素。

我翻遍了Algorithmic Botany的用户手册,但没有找到任何关于生产最终结果的参考资料。上面的图像似乎显示了相反两侧的叶子,当它们向上推进时,它们会盘旋。如果这只是“扭曲了一下并扔出一片叶子”,我希望只看到一片叶子,而不是一对。

生产 3 中使用了相同的符号,它也以螺旋形式显示花瓣:

p3 : A : * --> ~K(0)

任何人都可以阐明我所缺少的东西吗?